初始化项目, 添加TDesign等包

This commit is contained in:
zhengw
2025-11-28 16:49:36 +08:00
commit 3e53beb7bb
980 changed files with 39201 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
/// <reference types="miniprogram-api-typings" />
/// <reference types="miniprogram-api-typings" />
/// <reference types="miniprogram-api-typings" />
import { MessageProps } from './message.interface';
declare type Context = WechatMiniprogram.Page.TrivialInstance | WechatMiniprogram.Component.TrivialInstance;
interface MessageActionOptionsType extends Optional<MessageProps> {
context?: Context;
selector?: string;
}
declare const _default: {
info(options: MessageActionOptionsType): WechatMiniprogram.Component.TrivialInstance;
success(options: MessageActionOptionsType): WechatMiniprogram.Component.TrivialInstance;
warning(options: MessageActionOptionsType): WechatMiniprogram.Component.TrivialInstance;
error(options: MessageActionOptionsType): WechatMiniprogram.Component.TrivialInstance;
hide(options: MessageActionOptionsType): void;
};
export default _default;

View File

@@ -0,0 +1 @@
import{__rest}from"tslib";import{MessageType}from"./message.interface";import{getInstance}from"../common/utils";const showMessage=function(e,s=MessageType.info){const{context:t,selector:o="#t-message"}=e,n=__rest(e,["context","selector"]),r=getInstance(t,o);if("boolean"!=typeof n.single&&(n.single=!0),r)return r.setMessage(n,s),r;console.error("未找到组件,请确认 selector && context 是否正确")};export default{info:e=>showMessage(e,MessageType.info),success:e=>showMessage(e,MessageType.success),warning:e=>showMessage(e,MessageType.warning),error:e=>showMessage(e,MessageType.error),hide(e){const{context:s,selector:t="#t-message"}=Object.assign({},e),o=getInstance(s,t);o&&o.hide()}};

View File

@@ -0,0 +1,37 @@
/// <reference types="miniprogram-api-typings" />
import { SuperComponent, ComponentsOptionsType } from '../common/src/index';
import { MessageType, MessageProps } from './message.interface';
export default class Message extends SuperComponent {
options: ComponentsOptionsType;
properties: MessageProps;
data: {
prefix: string;
classPrefix: string;
messageList: any[];
};
index: number;
instances: any[];
gap: number;
observers: {
visible(value: any): void;
};
pageLifetimes: {
show(): void;
};
lifetimes: {
ready(): void;
};
memoInitialData(): void;
setMessage(msg: MessageProps, theme?: MessageType): void;
addMessage(msgObj: MessageProps): void;
getOffsetHeight(index?: number): number;
showMessageItem(options: MessageProps, id: string, offsetHeight: number): WechatMiniprogram.Component.TrivialInstance;
close(id: any): void;
hide(id?: string): void;
hideAll(): void;
removeInstance(id: any): void;
removeMsg(id: any): void;
handleClose(): void;
handleLinkClick(): void;
handleDurationEnd(): void;
}

View File

@@ -0,0 +1,28 @@
export declare enum MessageType {
info = "info",
success = "success",
warning = "warning",
error = "error"
}
export interface MessageMarquee {
speed?: number;
loop?: number;
delay?: number;
}
export interface MessageProps {
visible?: boolean;
content: string;
align?: string;
theme?: MessageType;
icon?: boolean | string;
link?: string | object;
closeBtn?: boolean;
action?: string;
marquee?: MessageMarquee;
offset?: object;
duration?: number;
zIndex?: number;
id?: string;
gap?: string | number;
single?: boolean;
}

View File

@@ -0,0 +1 @@
export var MessageType;!function(e){e.info="info",e.success="success",e.warning="warning",e.error="error"}(MessageType||(MessageType={}));

View File

@@ -0,0 +1 @@
import{__decorate}from"tslib";import{SuperComponent,wxComponent}from"../common/src/index";import config from"../common/config";import{MessageType}from"./message.interface";import props from"./props";import{unitConvert}from"../common/utils";const SHOW_DURATION=400,{prefix:prefix}=config,name=`${prefix}-message`;let Message=class extends SuperComponent{constructor(){super(...arguments),this.options={multipleSlots:!0},this.properties=Object.assign({},props),this.data={prefix:prefix,classPrefix:name,messageList:[]},this.index=0,this.instances=[],this.gap=12,this.observers={visible(s){s?this.setMessage(this.properties,this.properties.theme):this.setData({messageList:[]})}},this.pageLifetimes={show(){this.hideAll()}},this.lifetimes={ready(){this.memoInitialData()}}}memoInitialData(){this.initialData=Object.assign(Object.assign({},this.properties),this.data)}setMessage(s,e=MessageType.info){let t=`${name}_${this.index}`;s.single&&(t=name),this.gap=unitConvert(s.gap||this.gap);const i=Object.assign(Object.assign({},s),{theme:e,id:t,gap:this.gap}),n=this.instances.findIndex(s=>s.id===t);if(n<0)this.addMessage(i);else{const s=this.instances[n],e=this.getOffsetHeight(n);s.resetData(()=>{s.setData(i,s.show.bind(s,e)),s.onHide=()=>{this.close(t)}})}}addMessage(s){const e=[...this.data.messageList,{id:s.id}];this.setData({messageList:e},()=>{const e=this.getOffsetHeight(),t=this.showMessageItem(s,s.id,e);this.instances&&(this.instances.push(t),this.index+=1)})}getOffsetHeight(s=-1){let e=0,t=s;(-1===t||t>this.instances.length)&&(t=this.instances.length);for(let s=0;s<t;s+=1){const t=this.instances[s];e+=t.data.height+t.data.gap}return e}showMessageItem(s,e,t){const i=this.selectComponent(`#${e}`);if(i)return i.resetData(()=>{i.setData(s,i.show.bind(i,t)),i.onHide=()=>{this.close(e)}}),i;console.error("未找到组件,请确认 selector && context 是否正确")}close(s){setTimeout(()=>{this.removeMsg(s)},400),this.removeInstance(s)}hide(s){s||this.hideAll();const e=this.instances.find(e=>e.id===s);e&&e.hide()}hideAll(){for(let s=0;s<this.instances.length;){this.instances[s].hide()}}removeInstance(s){const e=this.instances.findIndex(e=>e.id===s);if(e<0)return;const t=this.instances[e].data.height;this.instances.splice(e,1);for(let s=e;s<this.instances.length;s+=1){const e=this.instances[s];e.setData({wrapTop:e.data.wrapTop-t-e.data.gap})}}removeMsg(s){const e=this.data.messageList.findIndex(e=>e.id===s);e>-1&&(this.data.messageList.splice(e,1),this.setData({messageList:this.data.messageList}))}handleClose(){this.triggerEvent("close-btn-click")}handleLinkClick(){this.triggerEvent("link-click")}handleDurationEnd(){this.triggerEvent("duration-end")}};Message=__decorate([wxComponent()],Message);export default Message;

View File

@@ -0,0 +1 @@
{"component":true,"styleIsolation":"apply-shared","usingComponents":{"t-message-item":"../message-item/message-item"}}

View File

@@ -0,0 +1 @@
<block wx:for="{{messageList}}" wx:key="id"><t-message-item id="{{item.id}}" bind:close-btn-click="handleClose" bind:link-click="handleLinkClick" bind:duration-end="handleDurationEnd"><slot name="icon" slot="icon"/><slot name="content" slot="content"/><slot/><slot name="link" slot="link"/><slot name="close-btn" slot="close-btn"/></t-message-item></block>

View File

@@ -0,0 +1 @@
@import '../common/style/index.wxss';

View File

@@ -0,0 +1,3 @@
import { TdMessageProps } from './type';
declare const props: TdMessageProps;
export default props;

View File

@@ -0,0 +1 @@
const props={align:{type:String,value:"left"},closeBtn:{type:null,value:!1},content:{type:String},duration:{type:Number,value:3e3},gap:{type:null,value:12},icon:{type:null,value:!0},link:{type:null},marquee:{type:null,value:!1},offset:{type:Array},single:{type:Boolean,value:!0},theme:{type:String,value:"info"},visible:{type:Boolean,value:!1},defaultVisible:{type:Boolean,value:!1},zIndex:{type:Number,value:15e3}};export default props;

View File

@@ -0,0 +1,65 @@
export interface TdMessageProps {
align?: {
type: StringConstructor;
value?: MessageAlignType;
};
closeBtn?: {
type: null;
value?: string | boolean | object;
};
content?: {
type: StringConstructor;
value?: string;
};
duration?: {
type: NumberConstructor;
value?: number;
};
gap?: {
type: null;
value?: string | number | boolean;
};
icon?: {
type: null;
value?: string | boolean | object;
};
link?: {
type: null;
value?: string | object;
};
marquee?: {
type: null;
value?: boolean | MessageMarquee;
};
offset?: {
type: ArrayConstructor;
value?: Array<string | number>;
};
single?: {
type: BooleanConstructor;
value?: boolean;
};
theme?: {
type: StringConstructor;
value?: MessageThemeList;
};
visible?: {
type: BooleanConstructor;
value?: boolean;
};
defaultVisible?: {
type: BooleanConstructor;
value?: boolean;
};
zIndex?: {
type: NumberConstructor;
value?: number;
};
}
export declare type MessageAlignType = 'left' | 'center';
export interface MessageMarquee {
speed?: number;
loop?: number;
delay?: number;
}
export declare type MessageThemeList = 'info' | 'success' | 'warning' | 'error';

View File

@@ -0,0 +1 @@
export{};