mirror of
https://github.com/kuaifan/dootask.git
synced 2026-07-30 09:56:01 +00:00
新移动端从 EEUI(weex) 切到 Expo(react-native),UA 标识从 'eeui' 改为 'DooTaskApp', 桥接底层从全局 requireModuleJs 切到 window.__nativeBridge.call(method,args) Promise RPC。 约 52 个文件批量改名(256 处引用): - 平台识别:$A.isEEUIApp/Vue.prototype.$isEEUIApp → isMobileApp / $isMobileApp app.js 顶部 UA 正则 /eeui/i → /DooTaskApp/i app.js requireModuleJs 等待逻辑替换为 window.__nativeBridge 就绪判定 - 桥接 API:$A.eeuiAppXXX → $A.nativeAppXXX - functions/eeui.js 删除,重写为 functions/native-app.js 底层走 window.__nativeBridge.call;nativeAppSendMessage 把旧 sendMessage 的 各 action 拆解为独立 method 调用(updateTheme/windowSize/setBadge/vibrate/ callTel/picturePreview/videoPreview/startMeeting/updateMeetingInfo 等) - types/dootask-globals.d.ts:方法签名同步改名 - store/actions.js:清理 saveUserInfoBase 内旧的 userChatList/userUploadUrl sendMessage(二期由 /share 接收页直接调接口替代) 二期 /share 接收页(跨 App 分享): - pages/share.vue(新增):原生 Share Extension / Android Intent 通过 dootask://share?token=... 拉起 App 后跳本页; 调 nativeAppGetSharedPayload 取分享元数据; 复用 api/users/share/list 渲染会话列表; 用户选会话 → POST api/dialog/msg/sendfiles 上传 + sendtext 发文本/URL; 完成后 nativeAppClearSharedPayload 清理 + 跳目标会话 - routes.js 注册 /share 路由 - language/original-web.txt 加 share.vue 用到的文案 构建链路(electron/build.js): - appbuild app 子命令:前端产物从复制到 resources/mobile/src/public + EEUI docker 构建 改为同步到 resources/mobile/assets/web(由 plugins/withWebAssets 注入原生 bundle) - android-upload apk 路径:从 platforms/android/eeuiApp/... 改为 android/app/build/outputs/apk/release(Expo prebuild 标准布局) 子模块 resources/mobile 指针更新到新 Expo 工程提交(feat/mobile-expo-rewrite 分支)。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
667 lines
30 KiB
TypeScript
667 lines
30 KiB
TypeScript
/**
|
||
* DooTask 前端全局工具 $A / 翻译函数 $L 的 TypeScript 类型声明(纯声明,无运行时代码)。
|
||
*
|
||
* 来源文件($A 是 jQuery 实例,由以下三个 IIFE 文件通过 $.extend() 扩展而成,
|
||
* 挂载于 window.$A 与 Vue.prototype.$A):
|
||
* - resources/assets/js/functions/common.js (基础函数 / localForage / Storage / ihttp / ajaxc / time / sort)
|
||
* - resources/assets/js/functions/web.js (页面专用 / iviewui 弹窗提示 / dark 暗黑模式)
|
||
* - resources/assets/js/functions/eeui.js (EEUI App 专用)
|
||
* $L 来源:resources/assets/js/language/index.js 的 switchLanguage,
|
||
* 挂载于 window.$L、Vue.prototype.$L 以及 $A.L(见 resources/assets/js/app.js)。
|
||
*
|
||
* 维护提示:在上述源文件中新增/修改 $.extend 挂载的 $A 方法时,须同步更新本声明文件。
|
||
*/
|
||
|
||
/** modal 系列配置(字符串等价于 { content: 字符串 }) */
|
||
interface DooTaskModalConfig {
|
||
/** 标题,默认「温馨提示」 */
|
||
title?: string;
|
||
/** 内容 */
|
||
content?: string | false;
|
||
/** 确定按钮文字,默认「确定」 */
|
||
okText?: string;
|
||
/** 取消按钮文字,默认「取消」 */
|
||
cancelText?: string;
|
||
/** 传 false 时由调用方自行处理翻译,否则内部自动 $L 翻译 */
|
||
language?: boolean;
|
||
/** onOk 返回 Promise 时启用 loading 等待 */
|
||
loading?: boolean;
|
||
onOk?: (...args: any[]) => any;
|
||
onCancel?: (...args: any[]) => any;
|
||
render?: (...args: any[]) => any;
|
||
[key: string]: any;
|
||
}
|
||
|
||
/** notice 系列配置(字符串等价于 { desc: 字符串 }) */
|
||
interface DooTaskNoticeConfig {
|
||
/** 标题,默认「温馨提示」 */
|
||
title?: string;
|
||
/** 描述内容 */
|
||
desc?: string;
|
||
/** 显示时长(秒) */
|
||
duration?: number;
|
||
render?: (...args: any[]) => any;
|
||
[key: string]: any;
|
||
}
|
||
|
||
/** ajaxc 请求参数 */
|
||
interface DooTaskAjaxcParams {
|
||
url: string;
|
||
data?: any;
|
||
cache?: boolean;
|
||
method?: string;
|
||
timeout?: number;
|
||
dataType?: string;
|
||
header?: Record<string, string>;
|
||
requestId?: string | number | null;
|
||
before?: () => void;
|
||
complete?: () => void;
|
||
after?: (success: boolean) => void;
|
||
success?: (data: any, status: number | string, xhr: XMLHttpRequest) => void;
|
||
error?: (xhr: XMLHttpRequest, status: number | string) => void;
|
||
[key: string]: any;
|
||
}
|
||
|
||
/** extractImageParameter 返回的图片参数 */
|
||
interface DooTaskImageParameter {
|
||
src: string | null;
|
||
width: number;
|
||
height: number;
|
||
original: string;
|
||
}
|
||
|
||
/** imageRatioHandle 参数/返回值 */
|
||
interface DooTaskImageRatioParams {
|
||
/** 原图地址 */
|
||
src: string;
|
||
/** 原图宽度 */
|
||
width: number;
|
||
/** 原图高度 */
|
||
height: number;
|
||
/** 裁剪参数,如:{ratio:3, percentage:"80x0"} */
|
||
crops?: { ratio?: number; size?: string; percentage?: string; cover?: string; contain?: string };
|
||
/** 返回尺寸缩放最高尺寸 */
|
||
scaleSize?: number;
|
||
[key: string]: any;
|
||
}
|
||
|
||
/** dark 暗黑模式工具 */
|
||
interface DooTaskDark {
|
||
utils: {
|
||
/** 判断浏览器支持的暗黑实现方式 chrome|webkit|null */
|
||
supportMode(): "chrome" | "webkit" | null;
|
||
/** 默认反色滤镜样式 */
|
||
defaultFilter(): string;
|
||
/** 反向反色滤镜样式 */
|
||
reverseFilter(): string;
|
||
/** 取消滤镜样式 */
|
||
noneFilter(): string;
|
||
/** 附加额外样式 */
|
||
addExtraStyle(): string;
|
||
/** 添加样式标签 */
|
||
addStyle(id: string, tag: string, css: string): void;
|
||
/** 获取元素 classList */
|
||
getClassList(node: Element): DOMTokenList | any[];
|
||
/** 给元素添加 class */
|
||
addClass(node: Element, name: string): DooTaskDark["utils"];
|
||
/** 移除元素 class */
|
||
removeClass(node: Element, name: string): DooTaskDark["utils"];
|
||
/** 判断元素是否含有 class */
|
||
hasClass(node: Element, name: string): boolean;
|
||
/** 根据 id 获取元素 */
|
||
hasElementById(eleId: string): HTMLElement | null;
|
||
/** 根据 id 删除元素 */
|
||
removeElementById(eleId: string): void;
|
||
};
|
||
/** 创建暗黑模式样式 */
|
||
createDarkStyle(): void;
|
||
/** 开启暗黑模式 */
|
||
enableDarkMode(): void;
|
||
/** 关闭暗黑模式 */
|
||
disableDarkMode(): void;
|
||
/** 跟随系统自动切换暗黑模式 */
|
||
autoDarkMode(): void;
|
||
/** 是否已开启暗黑模式 */
|
||
isDarkEnabled(): boolean;
|
||
}
|
||
|
||
/**
|
||
* DooTask 全局工具对象。
|
||
* 说明:$A 本体是 jQuery 实例(window.$ / window.jQuery),为避免引入 @types/jquery 依赖,
|
||
* 这里不 extends JQueryStatic,而是用「可调用签名 + 字符串索引签名」兜底 jQuery 本体的
|
||
* 选择器调用(如 $A(el))与 each/extend 等静态方法。
|
||
*/
|
||
interface DooTaskGlobal {
|
||
/** jQuery 选择器调用兜底($A(selector),返回 jQuery 对象) */
|
||
(selector?: any, context?: any): any;
|
||
/** jQuery 本体其余静态属性/方法兜底(each/extend/fn 等) */
|
||
[key: string]: any;
|
||
|
||
/* =========================================================================
|
||
* app.js 挂载的全局属性
|
||
* ========================================================================= */
|
||
|
||
/** 翻译函数(同 window.$L,见 language/index.js switchLanguage) */
|
||
L(text: string, ...args: Array<string | number>): string;
|
||
/** 应用是否初始化完成 */
|
||
Ready: boolean;
|
||
/** Electron 桥接对象(非 Electron 环境为 null) */
|
||
Electron: any;
|
||
/** 运行平台:web|mac|win|ios|android */
|
||
Platform: string;
|
||
/** 是否 Electron 主窗口 */
|
||
isMainElectron: boolean;
|
||
/** 是否 Electron 子窗口 */
|
||
isSubElectron: boolean;
|
||
/** 是否 EEUI App 环境 */
|
||
isMobileApp: boolean;
|
||
/** 是否 Electron 环境 */
|
||
isElectron: boolean;
|
||
/** 是否客户端软件环境(Electron 或 EEUI) */
|
||
isSoftware: boolean;
|
||
/** 是否开启调试日志(VConsole) */
|
||
openLog: boolean;
|
||
/** iView Modal 实例(app 初始化后可用) */
|
||
Modal: any;
|
||
/** iView Message 实例(app 初始化后可用) */
|
||
Message: any;
|
||
/** iView Notice 实例(app 初始化后可用) */
|
||
Notice: any;
|
||
|
||
/* =========================================================================
|
||
* common.js —— 基础函数类
|
||
* ========================================================================= */
|
||
|
||
/** 是否数组 */
|
||
isArray(obj: any): boolean;
|
||
/** 规范化为整型数组(去重、过滤非正整数) */
|
||
normalizeIntArray(data: any): number[];
|
||
/** 是否数组对象(普通 JSON 对象) */
|
||
isJson(obj: any): boolean;
|
||
/** 是否在数组里(regular 为 true 时支持 * 通配) */
|
||
inArray(key: any, array: any[], regular?: boolean): boolean;
|
||
/** 随机获取范围内的整数 */
|
||
randNum(Min: number, Max: number): number;
|
||
/** 获取数组最后一个值(无则返回 false) */
|
||
last(array: any[]): any;
|
||
/** 字符串是否包含(lower 为 true 时区分大小写) */
|
||
strExists(string: any, find: any, lower?: boolean): boolean;
|
||
/** 字符串是否左边包含 */
|
||
leftExists(string: any, find: any, lower?: boolean): boolean;
|
||
/** 删除左边字符串 */
|
||
leftDelete(string: any, find: any, lower?: boolean): string;
|
||
/** 字符串是否右边包含 */
|
||
rightExists(string: any, find: any, lower?: boolean): boolean;
|
||
/** 删除右边字符串 */
|
||
rightDelete(string: any, find: any, lower?: boolean): string;
|
||
/** 取字符串中间 */
|
||
getMiddle(string: any, start?: string | null, end?: string | null): string;
|
||
/** 截取字符串 */
|
||
subString(string: any, start: number, end?: number): string;
|
||
/** 随机字符(默认 32 位) */
|
||
randomString(len?: number): string;
|
||
/** 判断是否有值(enhanced 为 true 时空数组/空对象视为无) */
|
||
isHave(val: any, enhanced?: boolean): boolean;
|
||
/** 判断是否为真(true/1/"true"/"1") */
|
||
isTrue(value: any): boolean;
|
||
/** 相当于 intval(fixed 指定小数位时返回字符串) */
|
||
runNum(str: any, fixed?: number | string | null): number | string;
|
||
/** 补零 */
|
||
zeroFill(str: any, length: number, after?: boolean): string;
|
||
/** 检测手机号码格式 */
|
||
isMobile(str: any): boolean;
|
||
/** 检测邮箱地址格式 */
|
||
isEmail(email: any): boolean;
|
||
/** 根据两点间的经纬度计算距离(米,字符串) */
|
||
getDistance(lng1: number, lat1: number, lng2: number, lat2: number): string;
|
||
/** 设置网页标题 */
|
||
setTile(title: string): void;
|
||
/** 克隆对象 */
|
||
cloneJSON<T>(value: T, useParse?: boolean): T;
|
||
/** 将一个 JSON 字符串转换为对象(已try) */
|
||
jsonParse(str: any, defaultVal?: any): any;
|
||
/** 将 JavaScript 值转换为 JSON 字符串(已try) */
|
||
jsonStringify(json: any, defaultVal?: string): string;
|
||
/** 监听对象尺寸发生改变 */
|
||
resize(obj: any, callback?: () => void): void;
|
||
/** 获取屏幕方向 */
|
||
screenOrientation(): "landscape" | "portrait";
|
||
/** 是否IOS */
|
||
isIos(): boolean;
|
||
/** 是否iPad */
|
||
isIpad(): boolean;
|
||
/** 是否安卓 */
|
||
isAndroid(): boolean;
|
||
/** 是否微信 */
|
||
isWeixin(): boolean;
|
||
/** 是否Chrome */
|
||
isChrome(): boolean;
|
||
/** 是否桌面端 */
|
||
isDesktop(): boolean;
|
||
/** 获取对象(支持 a.b.c 路径取值) */
|
||
getObject(obj: any, keys: string | Array<string | number>, defaultValue?: any): any;
|
||
/** 统计数组或对象长度 */
|
||
count(obj: any): number;
|
||
/** 获取文本长度 */
|
||
stringLength(string: any): number;
|
||
/** 获取数组长度(处理数组不存在) */
|
||
arrayLength(array: any): number;
|
||
/** 将数组或对象内容部分拼成字符串 */
|
||
objImplode(obj: any): string;
|
||
/** 指定键获取url参数(不传 key 返回全部) */
|
||
urlParameter(key?: string): any;
|
||
/** 获取所有url参数 */
|
||
urlParameterAll(): Record<string, string>;
|
||
/** 删除地址中的参数 */
|
||
removeURLParameter(url: string, keys: string | string[]): string;
|
||
/** 连接加上参数 */
|
||
urlAddParams(url: string, params: Record<string, any>): string;
|
||
/** 替换url中的hash(只传一个参数时视为 path,url 默认当前页面) */
|
||
urlReplaceHash(url: string, path?: string): string;
|
||
/** 刷新当前地址 */
|
||
reloadUrl(): void;
|
||
/** 链接字符串(第一个参数为连接符) */
|
||
stringConnect(...value: any[]): string;
|
||
/** 判断两个对象是否相等 */
|
||
objEquals(x: any, y: any): boolean;
|
||
/** 输入框内插入文本 */
|
||
insert2Input(object: any, content: string): void;
|
||
/** 输入框数字限制 */
|
||
inputNumberLimit(object: any, min?: number | null, max?: number | null): void;
|
||
/** iOS上虚拟键盘引起的触控错位修正 */
|
||
iOSKeyboardFixer(): void;
|
||
/** 动态加载js文件 */
|
||
loadScript(url: string): Promise<boolean>;
|
||
/** 按顺序动态加载多个js文件 */
|
||
loadScriptS(urls: string[]): Promise<void>;
|
||
/** 动态加载css文件 */
|
||
loadCss(url: string): Promise<boolean>;
|
||
/** 按顺序动态加载多个css文件 */
|
||
loadCssS(urls: string[]): Promise<void>;
|
||
/** 动态加载iframe */
|
||
loadIframe(url: string, loadedRemove?: number): Promise<boolean>;
|
||
/** 按顺序动态加载多个iframe */
|
||
loadIframes(urls: string[]): Promise<void>;
|
||
/** 字节转换(如 1024 -> "1 KB") */
|
||
bytesToSize(bytes: number): string;
|
||
/** html代码转义 */
|
||
html2Escape(sHtml: string): string;
|
||
/** 正则提取域名 */
|
||
getDomain(weburl: any): string;
|
||
/** 提取 URL 协议 */
|
||
getProtocol(weburl: any): string;
|
||
/** 滚动到View */
|
||
scrollToView(element: Element | null, options?: boolean | Record<string, any>): void;
|
||
/** 按需滚动到View */
|
||
scrollIntoViewIfNeeded(element?: Element | null, smooth?: boolean): void;
|
||
/** 给元素添加一个class,过指定时间之后再去除这个class */
|
||
addClassWithTimeout(element: Element | null, className: string, duration: number): void;
|
||
/** 滚动到元素并抖动 */
|
||
scrollIntoAndShake(element: Element | Element[] | null, viewIfNeeded?: boolean): void;
|
||
/** 等比缩放尺寸 */
|
||
scaleToScale(width: number, height: number, maxW: number, maxH?: number): { width: number; height: number };
|
||
/** 阻止滑动穿透 */
|
||
scrollPreventThrough(el: HTMLElement | null): void;
|
||
/** 获取元素属性 */
|
||
getAttr(el: Element | null, attrName: string, def?: string): string | null;
|
||
/** 排序JSON对象 */
|
||
sortObject(obj: Record<string, any>, ignore?: string[]): Record<string, any>;
|
||
/** 从HTML中提取图片参数 */
|
||
extractImageParameter(imgTag: string): DooTaskImageParameter;
|
||
/** 从HTML中提取所有图片参数 */
|
||
extractImageParameterAll(html: string): DooTaskImageParameter[];
|
||
/** 增强版的字符串截取(超长自动加后缀) */
|
||
cutString(str: string, length: number, start?: number, suffix?: string): string;
|
||
/** 获取两个数组后面的交集 */
|
||
getLastSameElements(arr1: any[], arr2: any[]): any[];
|
||
/** 查找元素并在失败时重试 */
|
||
findElementWithRetry(findElementFn: () => any, maxAttempts?: number, delayMs?: number): Promise<any>;
|
||
/** 轮询等待条件满足 */
|
||
waitForCondition(conditionFn: () => boolean, intervalMs?: number, timeoutMs?: number): Promise<boolean>;
|
||
/** 执行指定次数的定时任务,返回取消函数 */
|
||
repeatWithCount(fn: (count: number) => boolean | void, delay: number, interval?: number, times?: number): () => void;
|
||
/** 通过URL生成base64图片 */
|
||
generateBase64Image(url: string, quality?: number, maxWidth?: number, maxHeight?: number): Promise<string>;
|
||
/** 是否全屏(根据尺寸对比) */
|
||
isFullScreen(): boolean;
|
||
|
||
/* =========================================================================
|
||
* common.js —— localForage(IndexedDB)
|
||
* ========================================================================= */
|
||
|
||
/** 测试 IndexedDB 是否可用 */
|
||
IDBTest(): Promise<boolean>;
|
||
/** 延迟保存(防抖,默认 100ms) */
|
||
IDBSave(key: string, value: any, delay?: number): void;
|
||
/** 删除缓存 */
|
||
IDBDel(key: string): Promise<void>;
|
||
/** 设置缓存 */
|
||
IDBSet(key: string, value: any): Promise<any>;
|
||
/** 删除缓存(同 IDBDel) */
|
||
IDBRemove(key: string): Promise<void>;
|
||
/** 清除缓存(可指定保留的 key) */
|
||
IDBClear(keysToKeep?: string[]): Promise<void>;
|
||
/** 获取缓存值 */
|
||
IDBValue(key: string): Promise<any>;
|
||
/** 获取缓存值(字符串) */
|
||
IDBString(key: string, def?: string): Promise<string | number>;
|
||
/** 获取缓存值(整数) */
|
||
IDBInt(key: string, def?: number): Promise<number>;
|
||
/** 获取缓存值(布尔) */
|
||
IDBBoolean(key: string, def?: boolean): Promise<boolean>;
|
||
/** 获取缓存值(数组) */
|
||
IDBArray(key: string, def?: any[]): Promise<any[]>;
|
||
/** 获取缓存值(对象) */
|
||
IDBJson(key: string, def?: Record<string, any>): Promise<Record<string, any>>;
|
||
|
||
/* =========================================================================
|
||
* common.js —— localStorage
|
||
* ========================================================================= */
|
||
|
||
/** 设置本地存储 */
|
||
setStorage(key: string, value: any): void;
|
||
/** 获取本地存储值 */
|
||
getStorageValue(key: string): any;
|
||
/** 获取本地存储值(字符串) */
|
||
getStorageString(key: string, def?: string): string | number;
|
||
/** 获取本地存储值(整数) */
|
||
getStorageInt(key: string, def?: number): number;
|
||
/** 获取本地存储值(布尔) */
|
||
getStorageBoolean(key: string, def?: boolean): boolean;
|
||
/** 获取本地存储值(数组) */
|
||
getStorageArray(key: string, def?: any[]): any[];
|
||
/** 获取本地存储值(对象) */
|
||
getStorageJson(key: string, def?: Record<string, any>): Record<string, any>;
|
||
/** 本地存储是否存在 */
|
||
existsStorage(key: string): boolean;
|
||
|
||
/* =========================================================================
|
||
* common.js —— sessionStorage
|
||
* ========================================================================= */
|
||
|
||
/** 设置会话存储 */
|
||
setSessionStorage(key: string, value: any): void;
|
||
/** 获取会话存储值 */
|
||
getSessionStorageValue(key: string): any;
|
||
/** 获取会话存储值(字符串) */
|
||
getSessionStorageString(key: string, def?: string): string | number;
|
||
/** 获取会话存储值(整数) */
|
||
getSessionStorageInt(key: string, def?: number): number;
|
||
|
||
/* =========================================================================
|
||
* common.js —— ihttp / ajaxc
|
||
* ========================================================================= */
|
||
|
||
/** 序列化对象为查询字符串 */
|
||
serializeObject(obj: any, parents?: string[]): string;
|
||
/** 全局 Ajax 配置 */
|
||
globalAjaxOptions: Record<string, any>;
|
||
/** 设置全局 Ajax 配置 */
|
||
ajaxSetup(options: Record<string, any>): void;
|
||
/** XHR 请求(jQuery.ajax 风格,JSONP 时无返回值) */
|
||
ihttp(options: Record<string, any>): XMLHttpRequest | void;
|
||
/** Ajax 请求封装(带请求列表管理,可用 ajaxcCancel 取消) */
|
||
ajaxc(params: DooTaskAjaxcParams): void | false;
|
||
/** 取消 ajaxc 请求,返回取消的数量 */
|
||
ajaxcCancel(requestId: string | number): number;
|
||
|
||
/* =========================================================================
|
||
* common.js —— time / sort
|
||
* ========================================================================= */
|
||
|
||
/** 时间对象(dayjs 实例,自动识别 10/13 位时间戳;返回 any 以避免引入 dayjs 类型依赖) */
|
||
dayjs(v?: any): any;
|
||
/** 时间对象(减去时区差,dayjs 实例) */
|
||
daytz(v?: any): any;
|
||
/** 更新时区,返回时区差(小时) */
|
||
updateTimezone(tz?: string): number;
|
||
/** 当前时区名称 */
|
||
timezoneName: string | null;
|
||
/** 时区差(小时) */
|
||
timezoneDifference: number;
|
||
/** 对象中有Date格式的转成指定格式(支持 dayjs、Date、string,递归处理对象/数组) */
|
||
newDateString(value: any, format?: string, key?: string | null): any;
|
||
/** 对象中有Date格式的转成时间戳(递归处理对象/数组) */
|
||
newTimestamp(value: any): any;
|
||
/** 判断是否是日期格式(YYYY-MM-DD[ HH[:mm[:ss]]]) */
|
||
isDateString(value: any): boolean;
|
||
/** 秒数倒计时,格式:00:00:00, 00:00, 0s */
|
||
secondsToTime(s: number): string;
|
||
/** 格式化时间(本地时间自动减去时区差) */
|
||
timeFormat(date: any): string;
|
||
/** 倒计时(开始时间自动减去时区差) */
|
||
countDownFormat(s: any, e: any): string;
|
||
/** 计算排序值(日期格式) */
|
||
sortDay(v1: any, v2: any): number;
|
||
/** 计算排序值(数字格式) */
|
||
sortFloat(v1: any, v2: any): number;
|
||
|
||
/* =========================================================================
|
||
* web.js —— 页面专用
|
||
* ========================================================================= */
|
||
|
||
/** 接口地址(补全为完整 API URL) */
|
||
apiUrl(str: string): string;
|
||
/** 主页地址 */
|
||
mainUrl(str?: string | null): string;
|
||
/** 获取 mainUrl 的域名 */
|
||
mainDomain(): string;
|
||
/** 移除 mainUrl 前缀(忽略 http/https 协议差异,只匹配域名) */
|
||
removeMainUrlPrefix(url: any): string;
|
||
/** 服务地址 */
|
||
originUrl(str: string): string;
|
||
/** 预览文件地址 */
|
||
onlinePreviewUrl(name: string, key: string): string;
|
||
/** 项目配置模板 */
|
||
projectParameterTemplate(project_id: number | string): {
|
||
project_id: number | string;
|
||
menuInit: boolean;
|
||
menuType: string;
|
||
chat: boolean;
|
||
showMy: boolean;
|
||
showHelp: boolean;
|
||
showUndone: boolean;
|
||
showCompleted: boolean;
|
||
completedTask: boolean;
|
||
};
|
||
/** 获取日期选择器的 shortcuts 模板参数 */
|
||
timeOptionShortcuts(): Array<{ text: string; value(): [Date, Date] }>;
|
||
/** 对话标签(已完成/已删除/已归档) */
|
||
dialogTags(dialog: any): Array<{ color: string; text: string }>;
|
||
/** 对话是否完成(返回 success 标签) */
|
||
dialogCompleted(dialog: any): { color: string; text: string } | undefined;
|
||
/** 返回对话未读数量(不含免打扰,但如果免打扰中有@则返回@数量) */
|
||
getDialogNum(dialog: any): number;
|
||
/** 返回对话未读数量(containSilence 是否包含免打扰消息) */
|
||
getDialogUnread(dialog: any, containSilence?: boolean): number;
|
||
/** 返回对话@提及未读数量 */
|
||
getDialogMention(dialog: any): number;
|
||
/** 返回文本信息预览格式 */
|
||
getMsgTextPreview(msgData: { type?: string; text?: string }, imgClassName?: string | null): string;
|
||
/** 消息格式化处理(将消息内的RemoteURL换成真实地址) */
|
||
formatMsgBasic<T>(data: T): T;
|
||
/** 消息格式化处理(@提及、链接、图片尺寸) */
|
||
formatTextMsg(text: string, userid: number | string): string;
|
||
/** 获取文本消息图片 */
|
||
getTextImagesInfo(text: string): Array<{ src: string; width: number | string; height: number | string }>;
|
||
/** 合并转发消息标题 */
|
||
getMergeForwardTitle(msg: any): string;
|
||
/** 消息简单描述 */
|
||
getMsgSimpleDesc(data: any, imgClassName?: string | null): string;
|
||
/** 文件消息简单描述 */
|
||
fileMsgSimpleDesc(msg: any, imgClassName?: string | null): string;
|
||
/** 模板消息简单描述 */
|
||
templateMsgSimpleDesc(msg: any): string;
|
||
/** 获取文件标题(name.ext) */
|
||
getFileName(file: { name?: string; ext?: string }): string;
|
||
/** 是否是doo服务器 */
|
||
isDooServer(): boolean;
|
||
/** 缩略图还原 */
|
||
thumbRestore(url: any): string;
|
||
/** 拖拽或粘贴的数据是否包含文件夹 */
|
||
dataHasFolder(data: { items?: any }): boolean;
|
||
/** 图片尺寸比例超出处理(裁剪 + 等比缩放) */
|
||
imageRatioHandle(params: DooTaskImageRatioParams): DooTaskImageRatioParams;
|
||
/** 判断图片地址是否满足比例缩放 */
|
||
imageRatioJudge(url: string): boolean;
|
||
/** 图片尺寸比例超出(返回超出时的 ratio,否则 0) */
|
||
imageRatioExceed(width: number, height: number, ratio: number, float?: number): number;
|
||
/** 去除html内容中无效的部分 */
|
||
filterInvalidLine(content: any): string;
|
||
/** 加载 VConsole 日志组件(key: 'log.o' 开 / 'log.c' 关) */
|
||
loadVConsole(key?: string): boolean | void;
|
||
/** 提取工作报告中的时间 */
|
||
reportExtractTime(text: string): string;
|
||
/** 根据十六进制颜色生成通用 CSS 变量样式 */
|
||
generateColorVarStyle(hexColor: string, levels?: number[], prefix?: string, styles?: Record<string, string> | null): Record<string, string> | null;
|
||
/** 转换工作流状态 */
|
||
convertWorkflow(item: string | { flow_item_name?: string; complete_at?: any }): { status: string | null; name: string; color: string | null };
|
||
|
||
/* =========================================================================
|
||
* web.js —— iviewui assist(弹窗/提示/通知)
|
||
* 注意:modal/message/notice 系列内部自动 $L 翻译,调用方勿再包 $L
|
||
* (仅当 config.language === false 时由调用方自行处理翻译)。
|
||
* ========================================================================= */
|
||
|
||
/** 弹窗配置规范化(内部自动 $L 翻译 title/content/okText/cancelText,调用方勿再包 $L) */
|
||
modalConfig(config?: string | DooTaskModalConfig): DooTaskModalConfig;
|
||
/** 弹窗文案翻译辅助(language === false 时翻译,否则原样返回交给 modalConfig 统一翻译) */
|
||
modalTranslation(title: string, language?: boolean): string;
|
||
/** 输入弹窗(内部自动 $L 翻译,调用方勿再包 $L;millisecond 为延迟弹出毫秒数) */
|
||
modalInput(config: string | DooTaskModalConfig, millisecond?: number): void;
|
||
/** 确认弹窗(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
modalConfirm(config: string | DooTaskModalConfig | false, millisecond?: number): void;
|
||
/** 成功弹窗(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
modalSuccess(config: string | DooTaskModalConfig | false, millisecond?: number): void;
|
||
/** 信息弹窗(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
modalInfo(config: string | DooTaskModalConfig | false, millisecond?: number): void;
|
||
/** 警告弹窗(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
modalWarning(config: string | DooTaskModalConfig | false, millisecond?: number): void;
|
||
/** 错误弹窗(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
modalError(config: string | DooTaskModalConfig | false, millisecond?: number): void;
|
||
/** alert 弹窗(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
modalAlert(msg: string | false): void;
|
||
/** 成功提示(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
messageSuccess(msg: string): void;
|
||
/** 信息提示(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
messageInfo(msg: string): void;
|
||
/** 警告提示(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
messageWarning(msg: string | false): void;
|
||
/** 错误提示(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
messageError(msg: string | false): void;
|
||
/** 通知配置规范化(内部自动 $L 翻译 title/desc,调用方勿再包 $L) */
|
||
noticeConfig(config?: string | DooTaskNoticeConfig): DooTaskNoticeConfig;
|
||
/** 成功通知(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
noticeSuccess(config: string | DooTaskNoticeConfig | false): void;
|
||
/** 警告通知(内部自动 $L 翻译,调用方勿再包 $L) */
|
||
noticeWarning(config: string | DooTaskNoticeConfig | false): void;
|
||
/** 错误通知(内部自动 $L 翻译,调用方勿再包 $L;字符串默认 duration 6 秒) */
|
||
noticeError(config: string | DooTaskNoticeConfig | false): void;
|
||
|
||
/* =========================================================================
|
||
* web.js —— dark 暗黑模式
|
||
* ========================================================================= */
|
||
|
||
/** 暗黑模式工具对象 */
|
||
dark: DooTaskDark;
|
||
|
||
/* =========================================================================
|
||
* eeui.js —— EEUI App 专用
|
||
* ========================================================================= */
|
||
|
||
/** 获取eeui模块 */
|
||
eeuiModule(name?: string): any;
|
||
/** 获取eeui模块(Promise) */
|
||
eeuiModulePromise(name?: string): Promise<any>;
|
||
/** 获取eeui版本号 */
|
||
nativeAppVersion(): string | undefined;
|
||
/** 获取本地软件版本号 */
|
||
nativeAppLocalVersion(): string | undefined;
|
||
/** Alert 弹窗 */
|
||
nativeAppAlert(object: any, callback?: (result: any) => void): void;
|
||
/** Toast 提示 */
|
||
nativeAppToast(object: any): void;
|
||
/** 相对地址基于当前地址补全 */
|
||
nativeAppRewriteUrl(val: string): string | undefined;
|
||
/** 获取页面信息 */
|
||
nativeAppGetPageInfo(pageName?: string): any;
|
||
/** 打开app新页面 */
|
||
nativeAppOpenPage(object: Record<string, any>, callback?: (result: any) => void): void;
|
||
/** 使用系统浏览器打开网页 */
|
||
nativeAppOpenWeb(url: string): void;
|
||
/** 拦截返回按键事件(仅支持android、iOS无效) */
|
||
nativeAppSetPageBackPressed(object: any, callback?: (result: any) => void): void;
|
||
/** 返回手机桌面 */
|
||
nativeAppGoDesktop(): void;
|
||
/** 打开屏幕常亮 */
|
||
nativeAppKeepScreenOn(): void;
|
||
/** 关闭屏幕常亮 */
|
||
nativeAppKeepScreenOff(): void;
|
||
/** 隐藏软键盘 */
|
||
nativeAppKeyboardHide(): void;
|
||
/** 给app发送消息 */
|
||
nativeAppSendMessage(object: any): void;
|
||
/** 设置浏览器地址 */
|
||
nativeAppSetUrl(url: string): void;
|
||
/** 生成webview快照 */
|
||
nativeAppGetWebviewSnapshot(callback: (result: any) => void): void;
|
||
/** 显示webview快照 */
|
||
nativeAppShowWebviewSnapshot(): void;
|
||
/** 隐藏webview快照 */
|
||
nativeAppHideWebviewSnapshot(): void;
|
||
/** 扫码(成功时回调扫码文本) */
|
||
nativeAppScan(callback: (text: string) => void): void;
|
||
/** 检查更新 */
|
||
nativeAppCheckUpdate(): void;
|
||
/** 获取主题名称 light|dark */
|
||
nativeAppGetThemeName(): string | undefined;
|
||
/** 判断软键盘是否可见 */
|
||
nativeAppKeyboardStatus(): boolean | undefined;
|
||
/** 设置全局变量 */
|
||
nativeAppSetVariate(key: string, value: any): void;
|
||
/** 获取全局变量 */
|
||
nativeAppGetVariate(key: string, defaultVal?: any): any;
|
||
/** 设置缓存数据 */
|
||
nativeAppSetCachesString(key: string, value: string, expired?: number): void;
|
||
/** 获取缓存数据 */
|
||
nativeAppGetCachesString(key: string, defaultVal?: string): string | undefined;
|
||
/** 是否长按内容震动(仅支持android、iOS无效) */
|
||
nativeAppSetHapticBackEnabled(val: boolean): void;
|
||
/** 禁止长按选择(仅支持android、iOS无效;传毫秒数则临时禁止) */
|
||
nativeAppSetDisabledUserLongClickSelect(val: boolean | number | string): void;
|
||
/** 复制文本 */
|
||
nativeAppCopyText(text: string): void;
|
||
/** 设置是否禁止滚动 */
|
||
nativeAppSetScrollDisabled(disabled: boolean): void;
|
||
/** 设置应用程序级别的摇动撤销(仅支持iOS、android无效) */
|
||
nativeAppShakeToEditEnabled(enabled: boolean): void;
|
||
/** 获取最新一张照片 */
|
||
nativeAppGetLatestPhoto(expiration?: number, timeout?: number): Promise<any>;
|
||
/** 上传照片(params 参数:{url,data,headers,path,fieldName,onReady?}) */
|
||
nativeAppUploadPhoto(params: Record<string, any>, timeout?: number): Promise<any>;
|
||
/** 取消上传照片 */
|
||
nativeAppCancelUploadPhoto(id: any): Promise<any>;
|
||
/** 获取导航栏和状态栏高度 */
|
||
nativeAppGetSafeAreaInsets(): Promise<any>;
|
||
/** 获取当前语言(zh -> zh-Hans 等映射) */
|
||
nativeAppConvertLanguage(): string;
|
||
/** 获取设备信息 */
|
||
nativeAppGetDeviceInfo(): Promise<any>;
|
||
/** 判断是否窗口化 */
|
||
nativeAppIsWindowed(): Promise<boolean>;
|
||
}
|
||
|
||
/** DooTask 全局工具对象(jQuery 实例 + $.extend 扩展方法) */
|
||
declare const $A: DooTaskGlobal;
|
||
|
||
/**
|
||
* 翻译函数(language/index.js switchLanguage)。
|
||
* 动态值用 (*) 占位:$L('共(*)条', n);禁止拼接翻译。
|
||
*/
|
||
declare function $L(text: string, ...args: Array<string | number>): string;
|
||
|
||
interface Window {
|
||
$A: DooTaskGlobal;
|
||
$L: typeof $L;
|
||
}
|