chat-app/src/uni_modules/tmui/interface.ts
scout b54bfe63ad
Some checks are pending
Check / lint (push) Waiting to run
Check / typecheck (push) Waiting to run
Check / build (build, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build, 18.x, windows-latest) (push) Waiting to run
Check / build (build:app, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:app, 18.x, windows-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Waiting to run
init
2024-11-11 14:46:14 +08:00

688 lines
23 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'pinia';
import { ComponentInternalInstance, ComponentPublicInstance } from "vue"
interface Data {
[key: string]: any;
}
/**渐变方向 left:右->左right:左->右。top:下->上bottom:上->下。 */
export type linearType = 'left' | 'right' | 'bottom' | 'top' | ''
/**渐变色调light,dark,accent亮系渐变和深色渐变。 */
export type linearDeepType = "accent" | "dark" | "light"
/**边线的访问 */
export type borderDirectionType = "all" | "bottom" | "bottomleft" | "bottomright" | "left" | "leftright" | "right" | "right" | "top" | "topbottom" | "topleft" | "topright" | "x" | "y"
/**边线的样式 */
export type borderStyleType = "solid" | "dashed" | "dotted"
type componentKey = 'app' | 'button' | 'card' | 'tag' | 'sheet'
/**定义对象字段的键值只能是规定的组件名称。 */
type componentKeys = Partial<Record<componentKey, Tmui.components.all>>
declare global {
interface Uni {
/**
* tmui3.0 函数库
* https://tmui.design
*/
$tm: tmUtil,
}
namespace UniNamespace {
interface CanvasToTempFilePathOptions {
// @ts-ignore
canvas?: CanvasContext
}
interface CanvasContext {
width: number,
height: number,
/**dpr,屏幕的倍率 */
dpr: number,
/**nvue的gcanvas函数 */
toTempFilePath(any0: any, any1: any, any2: any, any3: any, any4: any, any5: any, any6: any, any7: any, any8: any): void
}
interface NodesRef {
/**节点,微信小程序上 */
node(callback?: (result: any) => void): SelectorQuery,
/**需要读取的字段属性 */
fields(fields: NodeField, callback?: (result: NodeInfo) => void): SelectorQuery;
}
interface NodeField {
/**包含的节点,部分小程序上会返回。 */
node?: boolean
}
}
namespace Tmui {
interface fetchNetConfigType {
/**
* 请求的数据query,或者body都可传递对象。自动转换数据格式。
*/
data?:any,
/**
* 头部数据。
*/
header?:any;
/**
* 请求方式
*/
method?:fetchConfigMethod,
/**
* 定义成功的服务器返回的状态码成功的标志
*/
statusCode?:number,
/**
* 从返回的结果读取的数据字段,默认全部返回,
* 如果指定了就会读取指定字段
* 比如你的结果返回{code,data,msg},如果你指定:['data'],结果集中只返回data数据
* 如果是['data',code],结果集中只返回{data,code}
*/
pick?:string[],
/**
* 是否监视参数的变化,如果参数发生了变化将会重新发起请求
*/
watchRefresh?:boolean,
/**
* 如果不配置或者配置,默认为all
*/
toast?:'fail'|'success'|'all',
/**
* 是否显示操作后的提示,默认为true
*/
showToast?:boolean,
/**
* 读取提示信息的字段如果读取不到会显示自动的文字。默认为msg
*/
toastKey?:string,
/**
* 是否显示加载框,默认为true。
*/
showLoading?:boolean,
}
/**tmui配置表 */
interface tmuiConfig {
/** 自动跟随系统暗黑 */
autoDark?: boolean,
/** 开启全局分离功能,默认关闭 */
shareDisable?: boolean,
/**主题列表 */
theme?: {},
/**细化全局的主题配置表 */
themeConfig?: {
/**暗黑模式下的一些统一配置 */
dark?: {
/**一般的卡片项目暗黑背景 */
cardColor?: string,
/**输入框,表单等暗黑背景 */
inputColor?: string,
/**禁用输入框,表单等暗黑背景 */
disableColor?: string,
/**暗黑下的页面背景 */
bodyColor?: string,
/**文本禁用色. */
textDisableColor?: string,
},
/**
* app整体字体大小的调整比例
* 只对使用tm-text组件以及自身组件的字号才会有效果
*
* */
globalFontSizeRatio?: number,
/** 是否关闭弹层背景的模糊 */
overflowBlur?: false,
/**
* 针对不同的主题配置详细的配色方案。
* 注意这里影响的时主题计算功能的配置
*/
theme?: {
/**如果该组件默认有值就会使用下列属性如果组件默认为0不会使用。 */
[key: string]: {
/**待考虑编辑2023-2-18 00:23:35 */
}
},
/**各个组件的统一配置 */
component?: componentKeys
},
/**router路由拦截代替外置文件 */
router?: {
/**页面访问前执行 */
useTmRouterBefore(arg: beforeRouterOpts): void,
/**页面访问后执行 */
useTmRouterAfter(arg: beforeRouterOpts): void,
},
/**用户自定义全局数据 */
custom?: {
[key: string]: any
}
}
interface beforeRouterOpts {
path: string | null,//当前页面路径,不含前缀 /
opts?: any,//页面参数
openType?: string,//当前页面打开的类型
context: ComponentPublicInstance | null,
}
/**actionMenu组件项目类型 */
interface tmActionMenu {
text?: string,
disabled?: boolean,
/** 各家小程序的openType。 */
openType?: string
[key: string]: any;
}
interface tmAlert {
icon?: string,
title?: string,
content?: string
}
interface tabs {
key?: string | number,
title?: string,
icon?: string,
dot?: boolean,
count?: string | number
dotColor?: string,
[key: string]: any
}
interface skuItem {
title: string,
id: string | number,
num: number,
children: skuItem[]
}
interface sku {
data: skuItem[],
product: {
id: string,
title: string,
num: number,
max_buy: number,
/** 原价 */
price: number,
/** 优惠价 */
salePrice: 54,
tip: string,
img: string
}[]
}
interface tmFormSubmitResult {
data: { [key: string]: any };
isPass: boolean,
result: {
message: string,//校验后的提示文本
validator: boolean,//是否校验通过
}[]
}
interface tmFormRules {
validator?: Function | boolean,//检验函数。可以是Promise异步回调。
required?: boolean,//是否必填。
message?: string,//检验不合格时的文本
type?: string,//校验类型.
[key: string]: any
}
/**组件的配置 */
namespace components {
type all = button & sheet
interface button {
round?: number,
shadow?: number,
color?: string
}
interface sheet {
}
}
}
}
declare module 'pinia' {
export interface PiniaCustomProperties {
tmuiConfig: Tmui.tmuiConfig,
}
export interface PiniaCustomStateProperties {
tmuiConfig: Tmui.tmuiConfig
}
}
export type pagesCustomType = 'default' | 'custom'
export interface pagesType {
//页面地址
path: string,
//导航栏模式
custom: pagesCustomType,
navigationBarBackgroundColor: string,
navigationBarTextStyle: string,
subPackages?: Array<any>
}
export interface tabBarItemType {
pagePath: string,
iconPath: string,
selectedIconPath: string,
text: string
}
export interface tabBarType {
color: string,
selectedColor: string,
borderStyle: string,
backgroundColor: string,
list?: Array<tabBarItemType>
}
export interface beforeRouterOpts {
path: string | null,//当前页面路径,不含前缀 /
opts?: any,//页面参数
openType?: string,//当前页面打开的类型
context: ComponentPublicInstance | null,
}
type fetchConfigResponseType = "arraybuffer" | "text";
type fetchConfigDataType = "json" | "text";
type fetchConfigMethod = "GET" | "POST" | "PUT" | "DELETE" | "CONNECT" | "HEAD" | "OPTIONS" | "TRACE";
interface fetchConfigSuccessType {
data: object | string | ArrayBuffer,
statusCode: number,
header: object,
cookies: Array<string>
}
interface fetchConfig {
url?: string,
data?: object | string | ArrayBuffer,
header?: object,
method?: fetchConfigMethod,
timeout?: number,
dataType?: fetchConfigDataType,
responseType?: fetchConfigResponseType,
sslVerify?: boolean,
withCredentials?: boolean,
firstIpv4?: boolean,
success?: Function,
fail?: Function,
complete?: Function
}
type openUrlType = "navigate" | "redirect" | "reLaunch" | "switchTab" | "navigateBack"
declare interface Touch {
readonly clientX: number;
readonly clientY: number;
readonly force: number;
readonly identifier: number;
readonly pageX: number;
readonly pageY: number;
readonly radiusX: number;
readonly radiusY: number;
readonly rotationAngle: number;
readonly screenX: number;
readonly screenY: number;
readonly target: EventTarget;
readonly x: number;
readonly y: number;
}
declare interface TouchEvent {
readonly changedTouches: TouchList
}
type tmUtil = {
//pagejson下的pages配置。
pages: Array<{ path: string, custom: 'custom' | 'default' }>,
//pagejson下的配置。
tabBar: tabBarType,
globalNavStyle: "custom" | "default",
/**
* 判断是否是颜色值
* @param color 颜色值
*/
isColor(color: string): boolean,
/**
* 国际化
* @param key 关键字
* @return 语言值
*/
language(key: string): string,
fetch: {
/**
* GET请求
* @param url 请求地址
* @param data 请求的数据
* @param opts 请求的配置
* @help https://tmui.design/doc/JSTool/fetch.html
*/
get(url: string, data?: object, opts?: fetchConfig): Promise<UniApp.GeneralCallbackResult | UniApp.RequestSuccessCallbackResult>,
/**
* POST请求
* @param url 请求地址
* @param data 请求的数据
* @param opts 请求的配置
* @help https://tmui.design/doc/JSTool/fetch.html
*/
post(url: string, data?: object, opts?: fetchConfig): Promise<UniApp.GeneralCallbackResult | UniApp.RequestSuccessCallbackResult>,
/**
* 自定义请求
* @param cog 请求的配置
* @param beforeFun 请求前执行的函数
* @param afterFun 请求后执行的函数
* @param complete 请求完成的函数
* @help https://tmui.design/doc/JSTool/fetch.html
*/
request(cog: fetchConfig, beforeFun?: Function, afterFun?: Function, complete?: Function): Promise<UniApp.GeneralCallbackResult | UniApp.RequestSuccessCallbackResult>,
},
/**
* tmui3.0函数工具
*/
u: {
/**
* 检测是否是数字
* @param arg 待检测的字符
* @param defaultNum 0,如果不符合值时设置默认值
* @returns number类型数值
*/
isNumber(arg: string | number | undefined | null, defaultNum: number): number,
/**
* 检测是否是字符串
* @param arg 待检测的字符
* @param defaultNum 默认"",如果不符合值是设置默认值
* @returns 字符串
*/
isString(arg: string | number | undefined | null, defaultStr: string): string,
/**
* 把一个数字进行分页返回数字数组
* @param total 总数
* @param pageSize 分页大小
* @returns 数字数组
*/
paginate(total: number, pageSize: number): number[],
/**
* 取对象数据值(可深层次取值)
* @example getValue(data,"a.b.c")
* @param data 对象数据
* @param keys 键值
* @returns 返回值
* @description 注意不会去改变原来的数据
*/
getValue(data: Data, keys: string): any,
/**
* 设置对象键值(可深层次设置值)
* @example setValue(data,"a.b.c","haha")
* @param data 对象数据
* @param keys 键值
* @returns 修改后的对象数据。
* @description 改变原来的数据
*/
setValue(data: Data, keys: string, value: any): void,
/**
* 计算并返回一个对象中最大的层级数
* @param data 待检测对象数据
* @returns 最大层级数
*/
getMaxDepth(data: Data): number,
/**
* 预览图片。
* @param {Object} url 必填 当前预览的图片链接。
* @param {Object} list 可以是url数组也可以是对象数据比如["http:url"] or [{url:"https:url",...}]
* @param {Object} rangKey 如果list是对象数组需要提供url字段。
*/
preview(url: string, list?: Array<string>, rangKey?: string): void,
/**
* 数据分组
* @param {Array} oArr - 原数组列表
* @param {Number} length - 单个数组长度
* @return {Array} arr - 分组后的新数组
*/
splitData<T>(arr: Array<T>, size: number): Array<T[]>,
/**
* 剩余时间格式化
* @param {Number} t - 剩余多少秒
* @return {Object} format - 格式后的天时分秒对象
*/
timeMuch(t: number): string,
/**
* 获取时间距离当前时间
* @param timestamp 当前时间
* @return 返回比如不久前1年前这样的格式文本
*/
getDateToNewData(timestamp?: number | string | Date): string,
/**
* 打电话
* @param {String<Number>} phoneNumber - 数字字符串
* @return Promise<boolean>
*/
callPhone(phoneNumber: string): Promise<boolean | any>,
/**
* 调起客户端相机扫码。
* @param {Boolean} onlyFromCamera true 是否只允许相机扫码识别
* @param {Array<string>} scanType ['barCode', 'qrCode', 'datamatrix','datamatrix']
* @returns Promise 成功返回相关数据结构
*/
scanCode(onlyFromCamera: boolean, scanType: Array<any>): Promise<UniApp.ScanCodeSuccessRes | string>,
/**
* 设置剪切板内容。
* @param {String} data
* @returns Promise true/false
*/
setClipboardData(data: string): Promise<boolean | string>,
/**
* 获取剪切板内容
* @returns Promise 剪切板内容
*/
getClipboardData(): Promise<string | boolean>,
/**
* 设置cookie数据
* @param {String} key 键值
* @param {String} data 值
* @returns Boolean
*/
setCookie(key: string, data: any): boolean,
/**
* 删除一个本地cookie
* @param {String} key 键值
* @returns Boolean
*/
delCookie(key: string): boolean,
/**
* 获取一个cookie数据
* 如果存入的是对象返回的也是对象。如果是string返回的也是字符串。
* @param {String} key 键
* @returns json/string
*/
getCookie(key: string): Object | string,
/**
* 向地址连接追加参数。
* @param {string} uri 网址
* @param {string} key 字段
* @param {string} value 字段值
* @returns 网址
*/
httpUrlAddKey(uri: string, key: string, value: string): string,
/**
* 取url参数
* @param {string} uri 网址
* @param {string} key 字段
* @returns string|undefined
*/
getQueryString(url: string, key: string): string,
/**
* 唯一标识
* @param rdix 1 随机因子
* @param length 12 取的长度
* @param isAddStr false 是否限制随机结果中的长度,不允许输出长度
* @returns String
*/
getUid(rdix?: number, length?: number, isAddStr?: boolean): number | string,
/**
* 防抖
* 防抖原理在一定时间内只有最后一次操作再过wait毫秒后才执行函数
* @param {Function} func 要执行的回调函数
* @param {Number} wait 延迟的时间
* @param {Boolean} immediate 是否要立即执行
*/
debounce(func: Function, wait?: number, immediate?: boolean): void,
/**
* 节流
* 节流原理:在一定时间内,只能触发一次
* @param {Function} func 要执行的回调函数
* @param {Number} wait 延时的时间
* @param {Boolean} immediate 是否立即执行
* @return void
*/
throttle(func: Function, wait?: number, immediate?: boolean, timer?: number, flags?: boolean): void,
/**
* 深度克隆
* @param {T} data 待大克隆复制的数据
* @return {T} any
*/
deepClone<T>(data: T): T,
/**
* 等同queryDom
*/
quereyDom(t: ComponentInternalInstance, node: string): Promise<UniApp.NodeInfo | UniApp.NodeInfo[]>,
/**
* 查询文档节点信息
* @param t Vue上下文对象
* @param node 提供带#的id比如'#id',在nvue中应该是元素上写明ref='id'
* @returns vue页面返回查询的节点信息nvue返回weex的节点信息。
*/
queryDom(t: ComponentInternalInstance, node: string): Promise<UniApp.NodeInfo | UniApp.NodeInfo[]>,
/**
* 深度合并对象
* @param FirstOBJ 需要合并的对象
* @param SecondOBJ 被合并的对象
* @returns 返回合并后的对象
*/
deepObjectMerge(FirstOBJ: Record<string, any>, SecondOBJ: Record<string, any>): Record<string, any>,
/**
* 是否是手机号码
* @param phone 号码
* @returns Boolean
*/
isPhone(phone: string | number): boolean,
/**
* 是否含有中文
* @param s 字符串
* @returns Boolean
*/
isChina(s: string): boolean,
/**
* 是否为空
* @description 判断是否是null,对象是否为空,数组是否为空。是否为 undefaind是否为 “”空字符串。
* @param s 任意
*/
isEmpty(s: any): boolean,
/**
* 是否邮箱
* @param s 字符串
* @returns Boolean
*/
isEmail(s: string): boolean,
/**
* 是否身份证号
* @param val 字符号或者数字
* @returns Boolean
* @author https://cloud.tencent.com/developer/article/1114323
*/
isIdCard(val: string | number): boolean,
/**
* 是否车牌
* @description 蓝牌5位绿牌6位。
* @param s 字符串
* @returns Boolean
*/
isIdCar(s: string): boolean,
/**
* 纯数字密码验证
* @param s 字符串或者数字
* @param len 最小长度默认6
* @param maxLen 最大长度默认20
* @returns Boolean
*/
isPasswordOfNumber(s: number | string, le: number, maxLen: number): boolean,
/**
* 密码验证
* @param s 字符串或者数字
* @param len 最小长度默认6
* @param maxLen 最大长度默认20
* @param model 0数字和英文1数字英文必须包含不允许有特殊字符2数字和字母必须包含可以有特殊字符。
* @returns Boolean
*/
isPasswordOfOther(s: string | number, len: number, maxLen: number, model: number): boolean,
/**
* 是否是一个有效的日期
* @param s 字符串,数字,日期对象
* @returns Boolean
*/
isDate(s: string | number | Date): boolean,
/**
* 显示信息
* @param word 标题
* @param mask 不允许穿透
* @param icon 图标
*/
toast(word: string, mask?: boolean, icon?: any): void,
/**
* 获取屏幕窗口安全高度和宽度
* 注意是针对种屏幕的统一计算统一高度不再让uni获取有效高度而烦恼。
* 请一定要在onMounted或者onLoad中调用否则不准确在h5端。
* @return {height,width,top,isCustomHeader,sysinfo}
*/
getWindow(): { width: number, height: number, top: number, bottom: number, statusBarHeight: number, isCustomHeader: Boolean, sysinfo: UniApp.GetSystemInfoResult },
/**
* 打开页面路径
* @param url string 打开的页面路径
* @param type openUrlType "navigate" | "redirect" | "reLaunch" | "switchTab" | "navigateBack"
*/
routerTo(url: string, type?: openUrlType): void,
/**
* 将rpx转换为px
* @param v 待转换的数字
* @param screenWidth 屏幕的宽度,如果不提供默认自动获取
* @return number
*/
torpx(v: number, screenWidth?: number): number
/**
* 将rpx转换为px
* @param v 待转换的数字
* @return number
*/
topx(v: number, screenWidth?: number): number,
/**
* 在下一次前执行回调函数
* @param callback 回调函数
* @returns 一个id值取消时cancelAnimationFrame(id)来取消
*/
requestAnimationFrame(callback: Function): number,
/**
* 取消回调执行
* @param id requestAnimationFrame产生的id
*/
cancelAnimationFrame(id: number): void
},
tmicon: Array<{
font: string,
prefix: string,
fontJson: Array<{
icon_id: string,
name: string,
font_class: string,
unicode: string,
unicode_decimal: number
}>
}>,
/**tmui3.0的全局配置以代替router,theme等的外围文件夹。解耦相关目录 */
config: Tmui.tmuiConfig
}