chat-app/src/uni_modules/tmui/index.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

223 lines
5.8 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 { fetchNet } from './tool/lib/fetch';
import fontJson from './tool/tmicon/fontJson';
import { setDomDarkOrWhite } from './tool/theme/util';
import preview, * as util from './tool/function/util';
import { language, languageByGlobal } from "./tool/lib/language"
import { share } from "./tool/lib/share"
import { App, nextTick} from "vue"
import PageJsonInit from "../../pages.json"
import { useTmRouterBefore } from "./tool/router"
import tmuiconfigdefault from "./tool/lib/tmuiconfigDefault"
import { pagesType, tabBarType, pagesCustomType } from './interface';
import * as Pinia from 'pinia';
let pages: Array<pagesType> = [];
if (typeof PageJsonInit?.pages == 'undefined') {
PageJsonInit.pages = [];
}
PageJsonInit.pages.forEach((el: any) => {
let customType: pagesCustomType = <pagesCustomType>(el?.style?.navigationStyle ?? "default");
let bg = (el.style?.navigationBarBackgroundColor ?? PageJsonInit?.globalStyle?.navigationBarBackgroundColor ?? '#FFFFFF') || '#FFFFFF'
let txtColor = (el.style?.navigationBarTextStyle ?? PageJsonInit?.globalStyle?.navigationBarTextStyle ?? 'black') || 'black'
pages.push({
path: el.path,
custom: customType,
navigationBarBackgroundColor: bg,
navigationBarTextStyle: txtColor
})
})
if (Array.isArray(PageJsonInit?.subPackages ?? null)) {
PageJsonInit?.subPackages.forEach((el: any) => {
let rootPath = el.root;
el.pages.forEach((el2: any) => {
let elany: any = el2;
let bg = (el2.style?.navigationBarBackgroundColor ?? PageJsonInit?.globalStyle?.navigationBarBackgroundColor ?? '#FFFFFF') || '#FFFFFF'
let txtColor = (el2.style?.navigationBarTextStyle ?? PageJsonInit?.globalStyle?.navigationBarTextStyle ?? 'black') || 'black'
pages.push({
path: rootPath + "/" + elany.path,
custom: elany?.style?.navigationStyle ?? "default",
navigationBarBackgroundColor: bg,
navigationBarTextStyle: txtColor
})
})
})
}
let pagers: any = PageJsonInit;
let tabBar: tabBarType = pagers?.tabBar ?? {
color: "",
selectedColor: "",
borderStyle: "",
backgroundColor: "",
list: []
}
// custom icon
let cusutomIconList = [];
// #ifdef APP
cusutomIconList = fontJson;
// #endif
let $tm = {
tabBar: tabBar,
pages: pages,
globalNavStyle: (PageJsonInit?.globalStyle.navigationStyle ?? ""),
isOpenDarkModel: (PageJsonInit?.globalStyle?.navigationBarBackgroundColor ?? "").indexOf("@") > -1,
isColor: (color: string) => {
const reg1 = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
const reg2 = /^(rgb|RGB|rgba|RGBA)/;
return reg1.test(color) || reg2.test(color);
},
/**tmui3.0工具函数 */
u: { ...util, preview },
/**tmui3.0国际化语言辅助函数 */
language: language,
fetch: fetchNet,
tmicon: [
{
font: "tmicon",
prefix: "tmicon-",
fontJson: cusutomIconList
}
],
config: tmuiconfigdefault as Tmui.tmuiConfig
};
export default {
/**
* tmui3.0
* @param app Vue
* @param options tmui3.0配置
*/
install: (app: App, options: Tmui.tmuiConfig = {}) => {
uni.addInterceptor('navigateTo', {
invoke(result) {
nextTick(() => {
linsInko({
path: result.url,
context: null,
openType: 'navigateTo'
})
})
},
success(result) {
}
})
uni.addInterceptor('redirectTo', {
success(result) {
let pages = getCurrentPages().pop()
let path = pages?.route ?? "";
let msg = result.errMsg ?? "";
let opentype = msg.split(":")[0] ?? "";
linsInko({
path: path,
context: null,
openType: opentype
})
}
})
uni.addInterceptor('reLaunch', {
success(result) {
let pages = getCurrentPages().pop()
let path = pages?.route ?? "";
let msg = result.errMsg ?? "";
let opentype = msg.split(":")[0] ?? "";
// 这里的链接是去往的链接
linsInko({
path: path,
context: null,
openType: opentype
})
}
})
uni.addInterceptor('navigateBack', {
invoke(result) {
nextTick(() => {
let pages = getCurrentPages().pop()
let path = pages?.route ?? "";
let msg = result.errMsg ?? "";
let opentype = msg.split(":")[0] ?? "";
// 这里返回的链接是返回前的链接,并非返回后的链接。
//这里在h5端不需要监测因为有全局监测实现。
// #ifndef H5
linsInko({
path: path,
context: null,
openType: "navigateBack"
})
// #endif
})
},
success(result) {
}
})
// #ifdef H5
window.addEventListener('popstate', (ev: any) => {
linsInko({
path: ev?.state?.forward ?? "",
context: null,
openType: "navigateBack"
})
})
// #endif
//路由拦截
function linsInko(obj: any) {
// #ifdef H5
setDomDarkOrWhite();
// #endif
obj.path = obj.path[0] == "/" ? obj.path.substr(1) : obj.path
// useTmRouterBefore(obj)
options.router?.useTmRouterBefore ? options.router?.useTmRouterBefore(obj) : useTmRouterBefore(obj)
}
options = util.deepObjectMerge($tm.config, options)
const pinia = app.config.globalProperties.$pinia || null
const tmPiniaPlugin = (context: Pinia.PiniaPluginContext) => {
if (context.store.$id === 'tmpinia') {
context.store.tmuiConfig = options
context.store.$state.tmuiConfig = options
}
};
if (pinia) {
pinia.use(tmPiniaPlugin)
} else {
const pinia = Pinia.createPinia()
pinia.use(tmPiniaPlugin)
app.use(pinia)
}
// #ifndef APP-NVUE
app.use(languageByGlobal())
// #endif
let appconfig = {};
// #ifdef MP
if (!$tm.config.shareDisable) {
const { onShareAppMessage, onShareTimeline } = share()
appconfig = { ...appconfig, onShareAppMessage, onShareTimeline }
}
// #endif
app.mixin({
...appconfig,
})
/**合并插件的全局配置 */
$tm = {
...$tm,
config: options
}
/**对外暴露 */
uni.$tm = $tm;
// #ifdef APP-VUE
uni.setStorageSync("$tm", JSON.stringify($tm.config.theme));
// #endif
/**app应用上下文的暴露 */
app.config.globalProperties.tm = $tm;
}
};