commit 0dcbd340e65c0617e66b17ad516f1e0dc2578264
Author: huangzhenbao <17818024429@163.com>
Date: Wed Jan 14 18:19:33 2026 +0800
feat:初始提交uni-app项目
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..fa3b691
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,18 @@
+
+
+
diff --git a/api/apis.js b/api/apis.js
new file mode 100644
index 0000000..8940d6d
--- /dev/null
+++ b/api/apis.js
@@ -0,0 +1,96 @@
+import {request} from "@/utils/request.js"
+
+//获取首页banner栏内容
+export function apiGetBanner(){
+ return request({
+ url:"/homeBanner",
+ })
+
+}
+
+//获取首页每日推荐栏内容
+export function apiGetDayRandom(){
+ return request({url:"/randomWall"})
+
+}
+
+//获取首页公告栏内容
+export function apiGetNotice(data={}){
+ return request({
+ url:"/wallNewsList",
+ data
+ })
+}
+
+//获取tabBar的“分类”里面的列表内容
+export function apiGetClassify(data={}){
+ return request({
+ url:"/classify",
+ data
+ })
+}
+
+
+//获取tabBar的“分类”栏里面给一个板块的具体图片内容
+export function apiGetClassList(data={}){
+ return request({
+ url:"/wallList",
+ data
+ })
+}
+
+//为每一个壁纸评分
+export function apiGetSetScore(data={}){
+ return request({
+ url:"/setupScore",
+ data
+ })
+}
+
+//下载壁纸
+export function apiWriteDownload(data={}){
+ return request({
+ url:"/downloadWall",
+ data
+ })
+}
+
+// 判断用户是不是通过别人分享进来的,从而获取被分享壁纸的详情信息。只有一张
+export function apiDetailWall(data={}){
+ return request({
+ url:"/detailWall",
+ data
+ })
+}
+
+//获取 “我的” 页面的个人信息
+export function apiUserInfo(data={}){
+ return request({
+ url:"/userInfo",
+ data
+ })
+}
+
+//获取 “我的” 页面中"我的下载"和"我的评分"的区分信息
+export function apiGetHistoryList(data={}){
+ return request({
+ url:"/userWallList",
+ data
+ })
+}
+
+//获取 “我的” 页面中"我的下载"和"我的评分"的区分信息
+export function apiNoticeDetail(data={}){
+ return request({
+ url:"/wallNewsDetail",
+ data
+ })
+}
+
+//获取 “搜索”页面 壁纸信息
+export function apiSearchData(data={}){
+ return request({
+ url:"/searchWall",
+ data
+ })
+}
diff --git a/common/images/banner1.jpg b/common/images/banner1.jpg
new file mode 100644
index 0000000..5f6470e
Binary files /dev/null and b/common/images/banner1.jpg differ
diff --git a/common/images/banner2.jpg b/common/images/banner2.jpg
new file mode 100644
index 0000000..218ba07
Binary files /dev/null and b/common/images/banner2.jpg differ
diff --git a/common/images/banner3.jpg b/common/images/banner3.jpg
new file mode 100644
index 0000000..c444a97
Binary files /dev/null and b/common/images/banner3.jpg differ
diff --git a/common/images/classify1.jpg b/common/images/classify1.jpg
new file mode 100644
index 0000000..040047c
Binary files /dev/null and b/common/images/classify1.jpg differ
diff --git a/common/images/classify2.jpg b/common/images/classify2.jpg
new file mode 100644
index 0000000..7de667b
Binary files /dev/null and b/common/images/classify2.jpg differ
diff --git a/common/images/more.jpg b/common/images/more.jpg
new file mode 100644
index 0000000..8cc2ff3
Binary files /dev/null and b/common/images/more.jpg differ
diff --git a/common/images/preview1.jpg b/common/images/preview1.jpg
new file mode 100644
index 0000000..0413ad8
Binary files /dev/null and b/common/images/preview1.jpg differ
diff --git a/common/images/preview2.jpg b/common/images/preview2.jpg
new file mode 100644
index 0000000..335d86a
Binary files /dev/null and b/common/images/preview2.jpg differ
diff --git a/common/images/preview_small.webp b/common/images/preview_small.webp
new file mode 100644
index 0000000..716f2cb
Binary files /dev/null and b/common/images/preview_small.webp differ
diff --git a/common/style/base-style.scss b/common/style/base-style.scss
new file mode 100644
index 0000000..00d9e4c
--- /dev/null
+++ b/common/style/base-style.scss
@@ -0,0 +1,9 @@
+$brand-theme-color:#28B389; //品牌主题绿色
+
+$border-color:#e0e0e0; //边框颜色
+$border-color-light:#efefef; //边框亮色
+
+$text-font-color-1:#000; //文字主色
+$text-font-color-2:#676767; //副标题颜色
+$text-font-color-3:#a7a7a7; //浅色
+$text-font-color-4:#e4e4e4; //更浅色
\ No newline at end of file
diff --git a/common/style/common-sytle.scss b/common/style/common-sytle.scss
new file mode 100644
index 0000000..53d6ff7
--- /dev/null
+++ b/common/style/common-sytle.scss
@@ -0,0 +1,25 @@
+view,swiper,swiper-item{
+ // 将盒子全部换成奇异盒,而不是普通盒
+ box-sizing: border-box;
+}
+
+//页面的背景
+.pageBg{
+ background:
+ // 这个百分比控制的是颜色占的广度,越小表示从页面的百分之几开始融合
+ //transparent 透明 = rgba(0,0,0,0)
+ linear-gradient(to bottom,transparent 0%,#fff 400rpx),
+ linear-gradient(to right,#beecd8 20%,#F4E2D8);
+ // 加一个最小高度,保证全部覆盖
+
+ min-height: 80vh;
+}
+
+
+.loadingLayout{
+ padding: 30rpx 0;
+}
+
+.safe-area-inset-bottom{
+ height: env(safe-area-inset-bottom);
+}
\ No newline at end of file
diff --git a/components/common-title/common-title.vue b/components/common-title/common-title.vue
new file mode 100644
index 0000000..0018dbc
--- /dev/null
+++ b/components/common-title/common-title.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/components.vue b/components/components.vue
new file mode 100644
index 0000000..b1d06e9
--- /dev/null
+++ b/components/components.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/components/custom-nav-bar/custom-nav-bar.vue b/components/custom-nav-bar/custom-nav-bar.vue
new file mode 100644
index 0000000..0d8c741
--- /dev/null
+++ b/components/custom-nav-bar/custom-nav-bar.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+ {{title}}
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/theme-item/theme-item.vue b/components/theme-item/theme-item.vue
new file mode 100644
index 0000000..8d133e0
--- /dev/null
+++ b/components/theme-item/theme-item.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+ {{compareTimestamp(item.updateTime)}}前更新
+
+
+
+
+
+
+
+
+ 更多
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b5d330d
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..c1caf36
--- /dev/null
+++ b/main.js
@@ -0,0 +1,22 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..a75b940
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,73 @@
+{
+ "name" : "wallpaper-kt",
+ "appid" : "__UNI__CDCE98F",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {},
+ /* SDK配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "wxd0cd1606ac6a1936",
+ "setting" : {
+ "urlCheck" : false,
+ "minified" : true
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "3"
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..3f02045
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,102 @@
+{
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "uni-app",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path" : "components/components",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
+ },
+ {
+ "path" : "pages/classify/classify",
+ "style" :
+ {
+ "navigationBarTitleText" : "分类",
+ "enablePullDownRefresh": true,
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path" : "pages/user/user",
+ "style" :
+ {
+ "navigationBarTitleText" : "我的",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path" : "pages/classlist/classlist",
+ "style" :
+ {
+ "navigationBarTitleText" : "分类列表"
+ }
+ },
+ {
+ "path" : "pages/preview/preview",
+ "style" :
+ {
+ "navigationBarTitleText" : "预览",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path" : "pages/notice/notice",
+ "style" :
+ {
+ "navigationBarTitleText" : "公告"
+ }
+ },
+ {
+ "path" : "pages/notice/detail",
+ "style" :
+ {
+ "navigationBarTitleText" : "公告详情"
+ }
+ },
+ {
+ "path" : "pages/search/search",
+ "style" :
+ {
+ "navigationBarTitleText" : "搜索"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "咸虾米壁纸",
+ "navigationBarBackgroundColor": "#fff",
+ "backgroundColor": "#F8F8F8"
+ },
+ "tabBar": {
+ "color": "#9799a5",
+ "selectedColor": "#28b389",
+ "list": [
+ {
+ "text": "推荐",
+ "pagePath": "pages/index/index",
+ "iconPath": "/static/images/tabBar/home.png",
+ "selectedIconPath": "/static/images/tabBar/home-h.png"
+ },
+ {
+ "text": "分类",
+ "pagePath": "pages/classify/classify",
+ "iconPath": "/static/images/tabBar/classify.png",
+ "selectedIconPath": "/static/images/tabBar/classify-h.png"
+ },
+ {
+ "text": "我的",
+ "pagePath": "pages/user/user",
+ "iconPath": "/static/images/tabBar/user.png",
+ "selectedIconPath": "/static/images/tabBar/user-h.png"
+ }
+ ]
+ },
+ "uniIdRouter": {}
+}
diff --git a/pages/classify/classify.vue b/pages/classify/classify.vue
new file mode 100644
index 0000000..4034e23
--- /dev/null
+++ b/pages/classify/classify.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/classlist/classlist.vue b/pages/classlist/classlist.vue
new file mode 100644
index 0000000..8330642
--- /dev/null
+++ b/pages/classlist/classlist.vue
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..b5f2cd8
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,370 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公告
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 每日推荐
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 专题精选
+
+
+ More+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/notice/detail.vue b/pages/notice/detail.vue
new file mode 100644
index 0000000..9ace384
--- /dev/null
+++ b/pages/notice/detail.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+ {{detail.title}}
+
+
+
+ {{detail.author}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 阅读数量:{{detail.view_count}}
+
+
+
+
+
+
+
+
diff --git a/pages/notice/notice.vue b/pages/notice/notice.vue
new file mode 100644
index 0000000..30d542f
--- /dev/null
+++ b/pages/notice/notice.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/preview/preview.vue b/pages/preview/preview.vue
new file mode 100644
index 0000000..3d0ffe2
--- /dev/null
+++ b/pages/preview/preview.vue
@@ -0,0 +1,707 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{currentIndex+1}} / {{classList.length}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/search/search.vue b/pages/search/search.vue
new file mode 100644
index 0000000..1543beb
--- /dev/null
+++ b/pages/search/search.vue
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 最近搜索
+
+
+
+
+
+
+ {{tab}}
+
+
+
+
+
+ 热门搜索
+
+
+
+
+ {{tab}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/user/user.vue b/pages/user/user.vue
new file mode 100644
index 0000000..ec69377
--- /dev/null
+++ b/pages/user/user.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{userinfo.IP}}
+ 来自于:
+
+
+ {{userinfo?.address?.city || userinfo?.address?.province || userinfo?.address?.country || '中国' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我的下载
+
+
+ {{userinfo.downloadSize}}
+
+
+
+
+
+
+
+
+
+
+
+ 我的评分
+
+
+ {{userinfo.scoreSize}}
+
+
+
+
+
+
+
+
+
+ 联系客服
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 订阅更新
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 常见问题
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..1cea089
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "uglifyFileName": false,
+ "enhance": true,
+ "packNpmRelationList": [],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "useCompilerPlugins": false,
+ "minifyWXML": true
+ },
+ "compileType": "miniprogram",
+ "simulatorPluginLibVersion": {},
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "appid": "wxd0cd1606ac6a1936",
+ "editorSetting": {}
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..46ee174
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,14 @@
+{
+ "libVersion": "3.9.0",
+ "projectname": "wallpaper-kt",
+ "setting": {
+ "urlCheck": true,
+ "coverView": true,
+ "lazyloadPlaceholderEnable": false,
+ "skylineRenderEnable": false,
+ "preloadBackgroundData": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "compileHotReLoad": true
+ }
+}
\ No newline at end of file
diff --git a/static/images/tabBar/classify-h.png b/static/images/tabBar/classify-h.png
new file mode 100644
index 0000000..2858107
Binary files /dev/null and b/static/images/tabBar/classify-h.png differ
diff --git a/static/images/tabBar/classify.png b/static/images/tabBar/classify.png
new file mode 100644
index 0000000..d32bc6c
Binary files /dev/null and b/static/images/tabBar/classify.png differ
diff --git a/static/images/tabBar/home-h.png b/static/images/tabBar/home-h.png
new file mode 100644
index 0000000..e86e1dd
Binary files /dev/null and b/static/images/tabBar/home-h.png differ
diff --git a/static/images/tabBar/home.png b/static/images/tabBar/home.png
new file mode 100644
index 0000000..591aa1a
Binary files /dev/null and b/static/images/tabBar/home.png differ
diff --git a/static/images/tabBar/user-h.png b/static/images/tabBar/user-h.png
new file mode 100644
index 0000000..fa8b717
Binary files /dev/null and b/static/images/tabBar/user-h.png differ
diff --git a/static/images/tabBar/user.png b/static/images/tabBar/user.png
new file mode 100644
index 0000000..6d53fc0
Binary files /dev/null and b/static/images/tabBar/user.png differ
diff --git a/static/images/xxmLogo.png b/static/images/xxmLogo.png
new file mode 100644
index 0000000..d822b16
Binary files /dev/null and b/static/images/xxmLogo.png differ
diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js
new file mode 100644
index 0000000..5fec4f3
--- /dev/null
+++ b/uni.promisify.adaptor.js
@@ -0,0 +1,13 @@
+uni.addInterceptor({
+ returnValue (res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => {
+ if (!res) return resolve(res)
+ return res[0] ? reject(res[0]) : resolve(res[1])
+ });
+ });
+ },
+});
\ No newline at end of file
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..a941223
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,88 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+@import "@/common/style/base-style.scss";
+// 定义一个 mixin
+@mixin fix-position{
+ position: absolute;
+ left: 0;
+ right: 0;
+ //单纯的给margin:auto的话,你的宽度会被拉长,需要给一个固定宽度
+ margin: auto;
+ //宽度你给多少都不能准确到达中间位置,给一个fit-content自动适应
+ width:fit-content;
+ color: #fff;
+}
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;
diff --git a/uni_modules/mp-html/README.md b/uni_modules/mp-html/README.md
new file mode 100644
index 0000000..cf9ba73
--- /dev/null
+++ b/uni_modules/mp-html/README.md
@@ -0,0 +1,192 @@
+## 为减小组件包的大小,默认组件包中不包含编辑、latex 公式等扩展功能,需要使用扩展功能的请参考下方的 插件扩展 栏的说明
+
+## 功能介绍
+- 全端支持(含 `v3、NVUE`)
+- 支持丰富的标签(包括 `table`、`video`、`svg` 等)
+- 支持丰富的事件效果(自动预览图片、链接处理等)
+- 支持设置占位图(加载中、出错时、预览时)
+- 支持锚点跳转、长按复制等丰富功能
+- 支持大部分 *html* 实体
+- 丰富的插件(关键词搜索、内容编辑、`latex` 公式等)
+- 效率高、容错性强且轻量化
+
+查看 [功能介绍](https://jin-yufeng.github.io/mp-html/#/overview/feature) 了解更多
+
+## 使用方法
+- `uni_modules` 方式
+ 1. 点击右上角的 `使用 HBuilder X 导入插件` 按钮直接导入项目或点击 `下载插件 ZIP` 按钮下载插件包并解压到项目的 `uni_modules/mp-html` 目录下
+ 2. 在需要使用页面的 `(n)vue` 文件中添加
+ ```html
+
+
+ ```
+ ```javascript
+ export default {
+ data() {
+ return {
+ html: 'Hello World!
'
+ }
+ }
+ }
+ ```
+ 3. 需要更新版本时在 `HBuilder X` 中右键 `uni_modules/mp-html` 目录选择 `从插件市场更新` 即可
+
+- 源码方式
+ 1. 从 [github](https://github.com/jin-yufeng/mp-html/tree/master/dist/uni-app) 或 [gitee](https://gitee.com/jin-yufeng/mp-html/tree/master/dist/uni-app) 下载源码
+ 插件市场的 **非 uni_modules 版本** 无法更新,不建议从插件市场获取
+ 2. 在需要使用页面的 `(n)vue` 文件中添加
+ ```html
+
+ ```
+ ```javascript
+ import mpHtml from '@/components/mp-html/mp-html'
+ export default {
+ // HBuilderX 2.5.5+ 可以通过 easycom 自动引入
+ components: {
+ mpHtml
+ },
+ data() {
+ return {
+ html: 'Hello World!
'
+ }
+ }
+ }
+ ```
+
+- npm 方式
+ 1. 在项目根目录下执行
+ ```bash
+ npm install mp-html
+ ```
+ 2. 在需要使用页面的 `(n)vue` 文件中添加
+ ```html
+
+ ```
+ ```javascript
+ import mpHtml from 'mp-html/dist/uni-app/components/mp-html/mp-html'
+ export default {
+ // 不可省略
+ components: {
+ mpHtml
+ },
+ data() {
+ return {
+ html: 'Hello World!
'
+ }
+ }
+ }
+ ```
+ 3. 需要更新版本时执行以下命令即可
+ ```bash
+ npm update mp-html
+ ```
+
+ 使用 *cli* 方式运行的项目,通过 *npm* 方式引入时,需要在 *vue.config.js* 中配置 *transpileDependencies*,详情可见 [#330](https://github.com/jin-yufeng/mp-html/issues/330#issuecomment-913617687)
+ 如果在 **nvue** 中使用还要将 `dist/uni-app/static` 目录下的内容拷贝到项目的 `static` 目录下,否则无法运行
+
+查看 [快速开始](https://jin-yufeng.github.io/mp-html/#/overview/quickstart) 了解更多
+
+## 组件属性
+
+| 属性 | 类型 | 默认值 | 说明 |
+|:---:|:---:|:---:|---|
+| container-style | String | | 容器的样式([2.1.0+](https://jin-yufeng.github.io/mp-html/#/changelog/changelog#v210)) |
+| content | String | | 用于渲染的 html 字符串 |
+| copy-link | Boolean | true | 是否允许外部链接被点击时自动复制 |
+| domain | String | | 主域名(用于链接拼接) |
+| error-img | String | | 图片出错时的占位图链接 |
+| lazy-load | Boolean | false | 是否开启图片懒加载 |
+| loading-img | String | | 图片加载过程中的占位图链接 |
+| pause-video | Boolean | true | 是否在播放一个视频时自动暂停其他视频 |
+| preview-img | Boolean | true | 是否允许图片被点击时自动预览 |
+| scroll-table | Boolean | false | 是否给每个表格添加一个滚动层使其能单独横向滚动 |
+| selectable | Boolean | false | 是否开启文本长按复制 |
+| set-title | Boolean | true | 是否将 title 标签的内容设置到页面标题 |
+| show-img-menu | Boolean | true | 是否允许图片被长按时显示菜单 |
+| tag-style | Object | | 设置标签的默认样式 |
+| use-anchor | Boolean | false | 是否使用锚点链接 |
+
+查看 [属性](https://jin-yufeng.github.io/mp-html/#/basic/prop) 了解更多
+
+## 组件事件
+
+| 名称 | 触发时机 |
+|:---:|---|
+| load | dom 树加载完毕时 |
+| ready | 图片加载完毕时 |
+| error | 发生渲染错误时 |
+| imgtap | 图片被点击时 |
+| linktap | 链接被点击时 |
+| play | 音视频播放时 |
+
+查看 [事件](https://jin-yufeng.github.io/mp-html/#/basic/event) 了解更多
+
+## api
+组件实例上提供了一些 `api` 方法可供调用
+
+| 名称 | 作用 |
+|:---:|---|
+| in | 将锚点跳转的范围限定在一个 scroll-view 内 |
+| navigateTo | 锚点跳转 |
+| getText | 获取文本内容 |
+| getRect | 获取富文本内容的位置和大小 |
+| setContent | 设置富文本内容 |
+| imgList | 获取所有图片的数组 |
+| pauseMedia | 暂停播放音视频([2.2.2+](https://jin-yufeng.github.io/mp-html/#/changelog/changelog#v222)) |
+| setPlaybackRate | 设置音视频播放速率([2.4.0+](https://jin-yufeng.github.io/mp-html/#/changelog/changelog#v240)) |
+
+查看 [api](https://jin-yufeng.github.io/mp-html/#/advanced/api) 了解更多
+
+## 插件扩展
+除基本功能外,本组件还提供了丰富的扩展,可按照需要选用
+
+| 名称 | 作用 |
+|:---:|---|
+| audio | 音乐播放器 |
+| editable | 富文本 **编辑**([示例项目](https://mp-html.oss-cn-hangzhou.aliyuncs.com/editable.zip)) |
+| emoji | 解析 emoji |
+| highlight | 代码块高亮显示 |
+| markdown | 渲染 markdown |
+| search | 关键词搜索 |
+| style | 匹配 style 标签中的样式 |
+| txv-video | 使用腾讯视频 |
+| img-cache | 图片缓存 by [@PentaTea](https://github.com/PentaTea) |
+| latex | 渲染 latex 公式 by [@Zeng-J](https://github.com/Zeng-J) |
+
+从插件市场导入的包中 **不含有** 扩展插件,使用插件需通过微信小程序 `富文本插件` 获取或参考以下方法进行打包:
+1. 获取完整组件包
+ ```bash
+ npm install mp-html
+ ```
+2. 编辑 `tools/config.js` 中的 `plugins` 项,选择需要的插件
+3. 生成新的组件包
+ 在 `node_modules/mp-html` 目录下执行
+ ```bash
+ npm install
+ npm run build:uni-app
+ ```
+4. 拷贝 `dist/uni-app` 中的内容到项目根目录
+
+查看 [插件](https://jin-yufeng.github.io/mp-html/#/advanced/plugin) 了解更多
+
+## 关于 nvue
+`nvue` 使用原生渲染,不支持部分 `css` 样式,为实现和 `html` 相同的效果,组件内部通过 `web-view` 进行渲染,性能上差于原生,根据 `weex` 官方建议,`web` 标签仅应用在非常规的降级场景。因此,如果通过原生的方式(如 `richtext`)能够满足需要,则不建议使用本组件,如果有较多的富文本内容,则可以直接使用 `vue` 页面
+由于渲染方式与其他端不同,有以下限制:
+1. 不支持 `lazy-load` 属性
+2. 视频不支持全屏播放
+3. 如果在 `flex-direction: row` 的容器中使用,需要给组件设置宽度或设置 `flex: 1` 占满剩余宽度
+
+纯 `nvue` 模式下,[此问题](https://ask.dcloud.net.cn/question/119678) 修复前,不支持通过 `uni_modules` 引入,需要本地引入(将 [dist/uni-app](https://github.com/jin-yufeng/mp-html/tree/master/dist/uni-app) 中的内容拷贝到项目根目录下)
+
+
+## 问题反馈
+遇到问题时,请先查阅 [常见问题](https://jin-yufeng.github.io/mp-html/#/question/faq) 和 [issue](https://github.com/jin-yufeng/mp-html/issues) 中是否已有相同的问题
+可通过 [issue](https://github.com/jin-yufeng/mp-html/issues/new/choose) 、插件问答或发送邮件到 [mp_html@126.com](mailto:mp_html@126.com) 提问,不建议在评论区提问(不方便回复)
+提问请严格按照 [issue 模板](https://github.com/jin-yufeng/mp-html/issues/new/choose) ,描述清楚使用环境、`html` 内容或可复现的 `demo` 项目以及复现方式,对于 **描述不清**、**无法复现** 或重复的问题将不予回复
+
+欢迎加入 `QQ` 交流群:
+群1(已满):`699734691`
+群2(已满):`778239129`
+群3:`960265313`
+
+查看 [问题反馈](https://jin-yufeng.github.io/mp-html/#/question/feedback) 了解更多
diff --git a/uni_modules/mp-html/changelog.md b/uni_modules/mp-html/changelog.md
new file mode 100644
index 0000000..ebb557a
--- /dev/null
+++ b/uni_modules/mp-html/changelog.md
@@ -0,0 +1,156 @@
+## v2.5.1(2025-04-20)
+1. `U` 适配鸿蒙 `APP` [详细](https://github.com/jin-yufeng/mp-html/issues/615)
+2. `U` 微信小程序替换废弃 `api` `getSystemInfoSync` [详细](https://github.com/jin-yufeng/mp-html/issues/613)
+3. `F` 修复了 `app` 端播放视频可能报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/617)
+4. `F` 修复了 `latex` 插件可能出现 `xxx can be used only in display mode` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/632)
+5. `F` 修复了 `uni-app` 包 `latex` 公式可能不显示的问题 [#599](https://github.com/jin-yufeng/mp-html/issues/599)、[#627](https://github.com/jin-yufeng/mp-html/issues/627)
+## v2.5.0(2024-04-22)
+1. `U` `play` 事件增加返回 `src` 等信息 [详细](https://github.com/jin-yufeng/mp-html/issues/526)
+2. `U` `preview-img` 属性支持设置为 `all` 开启 `base64` 图片预览 [详细](https://github.com/jin-yufeng/mp-html/issues/536)
+3. `U` `editable` 插件增加简易模式(点击文字直接编辑)
+4. `U` `latex` 插件支持块级公式 [详细](https://github.com/jin-yufeng/mp-html/issues/582)
+5. `F` 修复了表格部分情况下背景丢失的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/587)
+6. `F` 修复了部分 `svg` 无法显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/591)
+7. `F` 修复了 `h5` 和 `app` 端部分情况下样式无法识别的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/518)
+8. `F` 修复了 `latex` 插件部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/580)
+9. `F` 修复了 `editable` 插件表格无法删除的问题
+10. `F` 修复了 `editable` 插件 `vue3` `h5` 端点击图片报错的问题
+11. `F` 修复了 `editable` 插件点击表格没有菜单栏的问题
+## v2.4.3(2024-01-21)
+1. `A` 增加 [card](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#card) 插件 [详细](https://github.com/jin-yufeng/mp-html/pull/533) by [@whoooami](https://github.com/whoooami)
+2. `F` 修复了 `svg` 中包含 `foreignobject` 可能不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/523)
+3. `F` 修复了合并单元格的表格部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/561)
+4. `F` 修复了 `img` 标签设置 `object-fit` 无效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/567)
+5. `F` 修复了 `latex` 插件公式会换行的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/540)
+6. `F` 修复了 `editable` 和 `audio` 插件共用时点击 `audio` 无法编辑的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/529) by [@whoooami](https://github.com/whoooami)
+7. `F` 修复了微信小程序部分情况下图片会报错 `replace of undefined` 的问题
+8. `F` 修复了快手小程序图片不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/571)
+## v2.4.2(2023-05-14)
+1. `A` `editable` 插件支持修改文字颜色 [详细](https://github.com/jin-yufeng/mp-html/issues/254)
+2. `F` 修复了 `svg` 中有 `style` 不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/505)
+3. `F` 修复了使用旧版编译器可能报错 `Bad attr nodes` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/472)
+4. `F` 修复了 `app` 端可能出现无法读取 `lazyLoad` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/513)
+5. `F` 修复了 `editable` 插件在点击换图时未拼接 `domain` 的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/497) by [@TwoKe945](https://github.com/TwoKe945)
+6. `F` 修复了 `latex` 插件部分情况下不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/515)
+7. `F` 修复了 `editable` 插件点击音视频时其他标签框不消失的问题
+## v2.4.1(2022-12-25)
+1. `F` 修复了没有图片时 `ready` 事件可能不触发的问题
+2. `F` 修复了加载过程中可能出现 `Root label not found` 错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/470)
+3. `F` 修复了 `audio` 插件退出页面可能会报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/457)
+4. `F` 修复了 `vue3` 运行到 `app` 在 `HBuilder X 3.6.10` 以上报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/480)
+5. `F` 修复了 `nvue` 端链接中包含 `%22` 时可能无法显示的问题
+6. `F` 修复了 `vue3` 使用 `highlight` 插件可能报错的问题
+## v2.4.0(2022-08-27)
+1. `A` 增加了 [setPlaybackRate](https://jin-yufeng.gitee.io/mp-html/#/advanced/api#setPlaybackRate) 的 `api`,可以设置音视频的播放速率 [详细](https://github.com/jin-yufeng/mp-html/issues/452)
+2. `A` 示例小程序代码开源 [详细](https://github.com/jin-yufeng/mp-html-demo)
+3. `U` 优化 `ready` 事件触发时机,未设置懒加载的情况下基本可以准确触发 [详细](https://github.com/jin-yufeng/mp-html/issues/195)
+4. `U` `highlight` 插件在编辑状态下不进行高亮处理,便于编辑
+5. `F` 修复了 `flex` 布局下图片大小可能不正确的问题
+6. `F` 修复了 `selectable` 属性没有设置 `force` 也可能出现渲染异常的问题
+7. `F` 修复了表格中的图片大小可能不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/448)
+8. `F` 修复了含有合并单元格的表格可能无法设置竖直对齐的问题
+9. `F` 修复了 `editable` 插件在 `scroll-view` 中使用时工具条位置可能不正确的问题
+10. `F` 修复了 `vue3` 使用 [search](advanced/plugin#search) 插件可能导致错误换行的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/449)
+## v2.3.2(2022-08-13)
+1. `A` 增加 [latex](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#latex) 插件,可以渲染数学公式 [详细](https://github.com/jin-yufeng/mp-html/pull/447) by [@Zeng-J](https://github.com/Zeng-J)
+2. `U` 优化根节点下有很多标签的长内容渲染速度
+3. `U` `highlight` 插件适配 `lang-xxx` 格式
+4. `F` 修复了 `table` 标签设置 `border` 属性后可能无法修改边框样式的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/439) by [@zouxingjie](https://github.com/zouxingjie)
+5. `F` 修复了 `editable` 插件输入连续空格无效的问题
+6. `F` 修复了 `vue3` 图片设置 `inline` 会报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/438)
+7. `F` 修复了 `vue3` 使用 `table` 可能报错的问题
+## v2.3.1(2022-05-20)
+1. `U` `app` 端支持使用本地图片
+2. `U` 优化了微信小程序 `selectable` 属性在 `ios` 端的处理 [详细](https://jin-yufeng.gitee.io/mp-html/#/basic/prop#selectable)
+3. `F` 修复了 `editable` 插件不在顶部时 `tooltip` 位置可能错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/430)
+4. `F` 修复了 `vue3` 运行到微信小程序可能报错丢失内容的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/414)
+5. `F` 修复了 `vue3` 部分标签可能被错误换行的问题
+6. `F` 修复了 `editable` 插件 `app` 端插入视频无法预览的问题
+## v2.3.0(2022-04-01)
+1. `A` 增加了 `play` 事件,音视频播放时触发,可用于与页面其他音视频进行互斥播放 [详细](basic/event#play)
+2. `U` `show-img-menu` 属性支持控制预览时是否长按弹出菜单
+3. `U` 优化 `wxs` 处理,提高渲染性能 [详细](https://developers.weixin.qq.com/community/develop/article/doc/0006cc2b204740f601bd43fa25a413)
+4. `U` `video` 标签支持 `object-fit` 属性
+5. `U` 增加支持一些常用实体编码 [详细](https://github.com/jin-yufeng/mp-html/issues/418)
+6. `F` 修复了图片仅设置高度可能不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/410)
+7. `F` 修复了 `video` 标签高度设置为 `auto` 不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/411)
+8. `F` 修复了使用 `grid` 布局时可能样式错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/413)
+9. `F` 修复了含有合并单元格的表格部分情况下显示异常的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/417)
+10. `F` 修复了 `editable` 插件连续插入内容时顺序不正确的问题
+11. `F` 修复了 `uni-app` 包 `vue3` 使用 `audio` 插件报错的问题
+12. `F` 修复了 `uni-app` 包 `highlight` 插件使用自定义的 `prism.min.js` 报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/416)
+## v2.2.2(2022-02-26)
+1. `A` 增加了 [pauseMedia](https://jin-yufeng.gitee.io/mp-html/#/advanced/api#pauseMedia) 的 `api`,可用于暂停播放音视频 [详细](https://github.com/jin-yufeng/mp-html/issues/317)
+2. `U` 优化了长内容的加载速度
+3. `U` 适配 `vue3` [#389](https://github.com/jin-yufeng/mp-html/issues/389)、[#398](https://github.com/jin-yufeng/mp-html/pull/398) by [@zhouhuafei](https://github.com/zhouhuafei)、[#400](https://github.com/jin-yufeng/mp-html/issues/400)
+4. `F` 修复了小程序端图片高度设置为百分比时可能不显示的问题
+5. `F` 修复了 `highlight` 插件部分情况下可能显示不完整的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/403)
+## v2.2.1(2021-12-24)
+1. `A` `editable` 插件增加上下移动标签功能
+2. `U` `editable` 插件支持在文本中间光标处插入内容
+3. `F` 修复了 `nvue` 端设置 `margin` 后可能导致高度不正确的问题
+4. `F` 修复了 `highlight` 插件使用压缩版的 `prism.css` 可能导致背景失效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/367)
+5. `F` 修复了编辑状态下使用 `emoji` 插件内容为空时可能报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/371)
+6. `F` 修复了使用 `editable` 插件后将 `selectable` 属性设置为 `force` 不生效的问题
+## v2.2.0(2021-10-12)
+1. `A` 增加 `customElements` 配置项,便于添加自定义功能性标签 [详细](https://github.com/jin-yufeng/mp-html/issues/350)
+2. `A` `editable` 插件增加切换音视频自动播放状态的功能 [详细](https://github.com/jin-yufeng/mp-html/pull/341) by [@leeseett](https://github.com/leeseett)
+3. `A` `editable` 插件删除媒体标签时触发 `remove` 事件,便于删除已上传的文件
+4. `U` `editable` 插件 `insertImg` 方法支持同时插入多张图片 [详细](https://github.com/jin-yufeng/mp-html/issues/342)
+5. `U` `editable` 插入图片和音视频时支持拼接 `domian` 主域名
+6. `F` 修复了内部链接参数中包含 `://` 时被认为是外部链接的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/356)
+7. `F` 修复了部分 `svg` 标签名或属性名大小写不正确时不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/351)
+8. `F` 修复了 `nvue` 页面运行到非 `app` 平台时可能样式错误的问题
+## v2.1.5(2021-08-13)
+1. `A` 增加支持标签的 `dir` 属性
+2. `F` 修复了 `ruby` 标签文字与拼音没有居中对齐的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/325)
+3. `F` 修复了音视频标签内有 `a` 标签时可能无法播放的问题
+4. `F` 修复了 `externStyle` 中的 `class` 名包含下划线或数字时可能失效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/326)
+5. `F` 修复了 `h5` 端引入 `externStyle` 可能不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/326)
+## v2.1.4(2021-07-14)
+1. `F` 修复了 `rt` 标签无法设置样式的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/318)
+2. `F` 修复了表格中有单元格同时合并行和列时可能显示不正确的问题
+3. `F` 修复了 `app` 端无法关闭图片长按菜单的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/322)
+4. `F` 修复了 `editable` 插件只能添加图片链接不能修改的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/312) by [@leeseett](https://github.com/leeseett)
+## v2.1.3(2021-06-12)
+1. `A` `editable` 插件增加 `insertTable` 方法
+2. `U` `editable` 插件支持编辑表格中的空白单元格 [详细](https://github.com/jin-yufeng/mp-html/issues/310)
+3. `F` 修复了 `externStyle` 中使用伪类可能失效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/298)
+4. `F` 修复了多个组件同时使用时 `tag-style` 属性时可能互相影响的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/305) by [@woodguoyu](https://github.com/woodguoyu)
+5. `F` 修复了包含 `linearGradient` 的 `svg` 可能无法显示的问题
+6. `F` 修复了编译到头条小程序时可能报错的问题
+7. `F` 修复了 `nvue` 端不触发 `click` 事件的问题
+8. `F` 修复了 `editable` 插件尾部插入时无法撤销的问题
+9. `F` 修复了 `editable` 插件的 `insertHtml` 方法只能在末尾插入的问题
+10. `F` 修复了 `editable` 插件插入音频不显示的问题
+## v2.1.2(2021-04-24)
+1. `A` 增加了 [img-cache](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#img-cache) 插件,可以在 `app` 端缓存图片 [详细](https://github.com/jin-yufeng/mp-html/issues/292) by [@PentaTea](https://github.com/PentaTea)
+2. `U` 支持通过 `container-style` 属性设置 `white-space` 来保留连续空格和换行符 [详细](https://jin-yufeng.gitee.io/mp-html/#/question/faq#space)
+3. `U` 代码风格符合 [standard](https://standardjs.com) 标准
+4. `U` `editable` 插件编辑状态下支持预览视频 [详细](https://github.com/jin-yufeng/mp-html/issues/286)
+5. `F` 修复了 `svg` 标签内嵌 `svg` 时无法显示的问题
+6. `F` 修复了编译到支付宝和头条小程序时部分区域不可复制的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/291)
+## v2.1.1(2021-04-09)
+1. 修复了对 `p` 标签设置 `tag-style` 可能不生效的问题
+2. 修复了 `svg` 标签中的文本无法显示的问题
+3. 修复了使用 `editable` 插件编辑表格时可能报错的问题
+4. 修复了使用 `highlight` 插件运行到头条小程序时可能没有样式的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/280)
+5. 修复了使用 `editable` 插件 `editable` 属性为 `false` 时会报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/284)
+6. 修复了 `style` 插件连续子选择器失效的问题
+7. 修复了 `editable` 插件无法修改图片和字体大小的问题
+## v2.1.0.2(2021-03-21)
+修复了 `nvue` 端使用可能报错的问题
+## v2.1.0(2021-03-20)
+1. `A` 增加了 [container-style](https://jin-yufeng.gitee.io/mp-html/#/basic/prop#container-style) 属性 [详细](https://gitee.com/jin-yufeng/mp-html/pulls/1)
+2. `A` 增加支持 `strike` 标签
+3. `A` `editable` 插件增加 `placeholder` 属性 [详细](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#editable)
+4. `A` `editable` 插件增加 `insertHtml` 方法 [详细](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#editable)
+5. `U` 外部样式支持标签名选择器 [详细](https://jin-yufeng.gitee.io/mp-html/#/overview/quickstart#setting)
+6. `F` 修复了 `nvue` 端部分情况下可能不显示的问题
+## v2.0.5(2021-03-12)
+1. `U` [linktap](https://jin-yufeng.gitee.io/mp-html/#/basic/event#linktap) 事件增加返回内部文本内容 `innerText` [详细](https://github.com/jin-yufeng/mp-html/issues/271)
+2. `U` [selectable](https://jin-yufeng.gitee.io/mp-html/#/basic/prop#selectable) 属性设置为 `force` 时能够在微信 `iOS` 端生效(文本块会变成 `inline-block`) [详细](https://github.com/jin-yufeng/mp-html/issues/267)
+3. `F` 修复了部分情况下竖向无法滚动的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/182)
+4. `F` 修复了多次修改富文本数据时部分内容可能不显示的问题
+5. `F` 修复了 [腾讯视频](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#txv-video) 插件可能无法播放的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/265)
+6. `F` 修复了 [highlight](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#highlight) 插件没有设置高亮语言时没有应用默认样式的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/276) by [@fuzui](https://github.com/fuzui)
diff --git a/uni_modules/mp-html/components/mp-html/mp-html.vue b/uni_modules/mp-html/components/mp-html/mp-html.vue
new file mode 100644
index 0000000..796762b
--- /dev/null
+++ b/uni_modules/mp-html/components/mp-html/mp-html.vue
@@ -0,0 +1,498 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/mp-html/components/mp-html/node/node.vue b/uni_modules/mp-html/components/mp-html/node/node.vue
new file mode 100644
index 0000000..d3457c5
--- /dev/null
+++ b/uni_modules/mp-html/components/mp-html/node/node.vue
@@ -0,0 +1,597 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{n.text}}
+
+
+ {{n.text}}
+
+ \n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/mp-html/components/mp-html/parser.js b/uni_modules/mp-html/components/mp-html/parser.js
new file mode 100644
index 0000000..acca9bf
--- /dev/null
+++ b/uni_modules/mp-html/components/mp-html/parser.js
@@ -0,0 +1,1400 @@
+/**
+ * @fileoverview html 解析器
+ */
+
+// 配置
+const config = {
+ // 信任的标签(保持标签名不变)
+ trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
+
+ // 块级标签(转为 div,其他的非信任标签转为 span)
+ blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
+
+ // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3
+ // 行内标签
+ inlineTags: makeMap('abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup'),
+ // #endif
+
+ // 要移除的标签
+ ignoreTags: makeMap('area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr'),
+
+ // 自闭合的标签
+ voidTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
+
+ // html 实体
+ entities: {
+ lt: '<',
+ gt: '>',
+ quot: '"',
+ apos: "'",
+ ensp: '\u2002',
+ emsp: '\u2003',
+ nbsp: '\xA0',
+ semi: ';',
+ ndash: '–',
+ mdash: '—',
+ middot: '·',
+ lsquo: '‘',
+ rsquo: '’',
+ ldquo: '“',
+ rdquo: '”',
+ bull: '•',
+ hellip: '…',
+ larr: '←',
+ uarr: '↑',
+ rarr: '→',
+ darr: '↓'
+ },
+
+ // 默认的标签样式
+ tagStyle: {
+ // #ifndef APP-PLUS-NVUE
+ address: 'font-style:italic',
+ big: 'display:inline;font-size:1.2em',
+ caption: 'display:table-caption;text-align:center',
+ center: 'text-align:center',
+ cite: 'font-style:italic',
+ dd: 'margin-left:40px',
+ mark: 'background-color:yellow',
+ pre: 'font-family:monospace;white-space:pre',
+ s: 'text-decoration:line-through',
+ small: 'display:inline;font-size:0.8em',
+ strike: 'text-decoration:line-through',
+ u: 'text-decoration:underline'
+ // #endif
+ },
+
+ // svg 大小写对照表
+ svgDict: {
+ animatetransform: 'animateTransform',
+ lineargradient: 'linearGradient',
+ viewbox: 'viewBox',
+ attributename: 'attributeName',
+ repeatcount: 'repeatCount',
+ repeatdur: 'repeatDur',
+ foreignobject: 'foreignObject'
+ }
+}
+const tagSelector={}
+let windowWidth, system
+// #ifdef MP-WEIXIN
+if (uni.canIUse('getWindowInfo')) {
+ windowWidth = uni.getWindowInfo().windowWidth
+ system = uni.getDeviceInfo().system
+} else {
+// #endif
+ const systemInfo = uni.getSystemInfoSync()
+ windowWidth = systemInfo.windowWidth
+ // #ifdef MP-WEIXIN
+ system = systemInfo.system
+}
+// #endif
+const blankChar = makeMap(' ,\r,\n,\t,\f')
+let idIndex = 0
+
+// #ifdef H5 || APP-PLUS
+config.ignoreTags.iframe = undefined
+config.trustTags.iframe = true
+config.ignoreTags.embed = undefined
+config.trustTags.embed = true
+// #endif
+// #ifdef APP-PLUS-NVUE
+config.ignoreTags.source = undefined
+config.ignoreTags.style = undefined
+// #endif
+
+/**
+ * @description 创建 map
+ * @param {String} str 逗号分隔
+ */
+function makeMap (str) {
+ const map = Object.create(null)
+ const list = str.split(',')
+ for (let i = list.length; i--;) {
+ map[list[i]] = true
+ }
+ return map
+}
+
+/**
+ * @description 解码 html 实体
+ * @param {String} str 要解码的字符串
+ * @param {Boolean} amp 要不要解码 &
+ * @returns {String} 解码后的字符串
+ */
+function decodeEntity (str, amp) {
+ let i = str.indexOf('&')
+ while (i !== -1) {
+ const j = str.indexOf(';', i + 3)
+ let code
+ if (j === -1) break
+ if (str[i + 1] === '#') {
+ // { 形式的实体
+ code = parseInt((str[i + 2] === 'x' ? '0' : '') + str.substring(i + 2, j))
+ if (!isNaN(code)) {
+ str = str.substr(0, i) + String.fromCharCode(code) + str.substr(j + 1)
+ }
+ } else {
+ // 形式的实体
+ code = str.substring(i + 1, j)
+ if (config.entities[code] || (code === 'amp' && amp)) {
+ str = str.substr(0, i) + (config.entities[code] || '&') + str.substr(j + 1)
+ }
+ }
+ i = str.indexOf('&', i + 1)
+ }
+ return str
+}
+
+/**
+ * @description 合并多个块级标签,加快长内容渲染
+ * @param {Array} nodes 要合并的标签数组
+ */
+function mergeNodes (nodes) {
+ let i = nodes.length - 1
+ for (let j = i; j >= -1; j--) {
+ if (j === -1 || nodes[j].c || !nodes[j].name || (nodes[j].name !== 'div' && nodes[j].name !== 'p' && nodes[j].name[0] !== 'h') || (nodes[j].attrs.style || '').includes('inline')) {
+ if (i - j >= 5) {
+ nodes.splice(j + 1, i - j, {
+ name: 'div',
+ attrs: {},
+ children: nodes.slice(j + 1, i + 1)
+ })
+ }
+ i = j - 1
+ }
+ }
+}
+
+/**
+ * @description html 解析器
+ * @param {Object} vm 组件实例
+ */
+function Parser (vm) {
+ this.options = vm || {}
+ this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle)
+ this.imgList = vm.imgList || []
+ this.imgList._unloadimgs = 0
+ this.plugins = vm.plugins || []
+ this.attrs = Object.create(null)
+ this.stack = []
+ this.nodes = []
+ this.pre = (this.options.containerStyle || '').includes('white-space') && this.options.containerStyle.includes('pre') ? 2 : 0
+}
+
+/**
+ * @description 执行解析
+ * @param {String} content 要解析的文本
+ */
+Parser.prototype.parse = function (content) {
+ // 插件处理
+ for (let i = this.plugins.length; i--;) {
+ if (this.plugins[i].onUpdate) {
+ content = this.plugins[i].onUpdate(content, config) || content
+ }
+ }
+
+ new Lexer(this).parse(content)
+ // 出栈未闭合的标签
+ while (this.stack.length) {
+ this.popNode()
+ }
+ if (this.nodes.length > 50) {
+ mergeNodes(this.nodes)
+ }
+ return this.nodes
+}
+
+/**
+ * @description 将标签暴露出来(不被 rich-text 包含)
+ */
+Parser.prototype.expose = function () {
+ // #ifndef APP-PLUS-NVUE
+ for (let i = this.stack.length; i--;) {
+ const item = this.stack[i]
+ if (item.c || item.name === 'a' || item.name === 'video' || item.name === 'audio') return
+ item.c = 1
+ }
+ // #endif
+}
+
+/**
+ * @description 处理插件
+ * @param {Object} node 要处理的标签
+ * @returns {Boolean} 是否要移除此标签
+ */
+Parser.prototype.hook = function (node) {
+ for (let i = this.plugins.length; i--;) {
+ if (this.plugins[i].onParse && this.plugins[i].onParse(node, this) === false) {
+ return false
+ }
+ }
+ return true
+}
+
+/**
+ * @description 将链接拼接上主域名
+ * @param {String} url 需要拼接的链接
+ * @returns {String} 拼接后的链接
+ */
+Parser.prototype.getUrl = function (url) {
+ const domain = this.options.domain
+ if (url[0] === '/') {
+ if (url[1] === '/') {
+ // // 开头的补充协议名
+ url = (domain ? domain.split('://')[0] : 'http') + ':' + url
+ } else if (domain) {
+ // 否则补充整个域名
+ url = domain + url
+ } /* #ifdef APP-PLUS */ else {
+ url = plus.io.convertLocalFileSystemURL(url)
+ } /* #endif */
+ } else if (!url.includes('data:') && !url.includes('://')) {
+ if (domain) {
+ url = domain + '/' + url
+ } /* #ifdef APP-PLUS */ else {
+ url = plus.io.convertLocalFileSystemURL(url)
+ } /* #endif */
+ }
+ return url
+}
+
+/**
+ * @description 解析样式表
+ * @param {Object} node 标签
+ * @returns {Object}
+ */
+Parser.prototype.parseStyle = function (node) {
+ const attrs = node.attrs
+ const list = (this.tagStyle[node.name] || '').split(';').concat((attrs.style || '').split(';'))
+ const styleObj = {}
+ let tmp = ''
+
+ if (attrs.id && !this.xml) {
+ // 暴露锚点
+ if (this.options.useAnchor) {
+ this.expose()
+ } else if (node.name !== 'img' && node.name !== 'a' && node.name !== 'video' && node.name !== 'audio') {
+ attrs.id = undefined
+ }
+ }
+
+ // 转换 width 和 height 属性
+ if (attrs.width) {
+ styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px')
+ attrs.width = undefined
+ }
+ if (attrs.height) {
+ styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px')
+ attrs.height = undefined
+ }
+
+ for (let i = 0, len = list.length; i < len; i++) {
+ const info = list[i].split(':')
+ if (info.length < 2) continue
+ const key = info.shift().trim().toLowerCase()
+ let value = info.join(':').trim()
+ if ((value[0] === '-' && value.lastIndexOf('-') > 0) || value.includes('safe')) {
+ // 兼容性的 css 不压缩
+ tmp += `;${key}:${value}`
+ } else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) {
+ // 重复的样式进行覆盖
+ if (value.includes('url')) {
+ // 填充链接
+ let j = value.indexOf('(') + 1
+ if (j) {
+ while (value[j] === '"' || value[j] === "'" || blankChar[value[j]]) {
+ j++
+ }
+ value = value.substr(0, j) + this.getUrl(value.substr(j))
+ }
+ } else if (value.includes('rpx')) {
+ // 转换 rpx(rich-text 内部不支持 rpx)
+ value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px')
+ }
+ styleObj[key] = value
+ }
+ }
+
+ node.attrs.style = tmp
+ return styleObj
+}
+
+/**
+ * @description 解析到标签名
+ * @param {String} name 标签名
+ * @private
+ */
+Parser.prototype.onTagName = function (name) {
+ this.tagName = this.xml ? name : name.toLowerCase()
+ if (this.tagName === 'svg') {
+ this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
+ config.ignoreTags.style = undefined // svg 标签内 style 可用
+ }
+}
+
+/**
+ * @description 解析到属性名
+ * @param {String} name 属性名
+ * @private
+ */
+Parser.prototype.onAttrName = function (name) {
+ name = this.xml ? name : name.toLowerCase()
+ // #ifdef (VUE3 && (H5 || APP-PLUS)) || APP-PLUS-NVUE
+ if (name.includes('?') || name.includes(';')) {
+ this.attrName = undefined
+ return
+ }
+ // #endif
+ if (name.substr(0, 5) === 'data-') {
+ if (name === 'data-src' && !this.attrs.src) {
+ // data-src 自动转为 src
+ this.attrName = 'src'
+ } else if (this.tagName === 'img' || this.tagName === 'a') {
+ // a 和 img 标签保留 data- 的属性,可以在 imgtap 和 linktap 事件中使用
+ this.attrName = name
+ } else {
+ // 剩余的移除以减小大小
+ this.attrName = undefined
+ }
+ } else {
+ this.attrName = name
+ this.attrs[name] = 'T' // boolean 型属性缺省设置
+ }
+}
+
+/**
+ * @description 解析到属性值
+ * @param {String} val 属性值
+ * @private
+ */
+Parser.prototype.onAttrVal = function (val) {
+ const name = this.attrName || ''
+ if (name === 'style' || name === 'href') {
+ // 部分属性进行实体解码
+ this.attrs[name] = decodeEntity(val, true)
+ } else if (name.includes('src')) {
+ // 拼接主域名
+ this.attrs[name] = this.getUrl(decodeEntity(val, true))
+ } else if (name) {
+ this.attrs[name] = val
+ }
+}
+
+/**
+ * @description 解析到标签开始
+ * @param {Boolean} selfClose 是否有自闭合标识 />
+ * @private
+ */
+Parser.prototype.onOpenTag = function (selfClose) {
+ // 拼装 node
+ const node = Object.create(null)
+ node.name = this.tagName
+ node.attrs = this.attrs
+ // 避免因为自动 diff 使得 type 被设置为 null 导致部分内容不显示
+ if (this.options.nodes.length) {
+ node.type = 'node'
+ }
+ this.attrs = Object.create(null)
+
+ const attrs = node.attrs
+ const parent = this.stack[this.stack.length - 1]
+ const siblings = parent ? parent.children : this.nodes
+ const close = this.xml ? selfClose : config.voidTags[node.name]
+
+ // 替换标签名选择器
+ if (tagSelector[node.name]) {
+ attrs.class = tagSelector[node.name] + (attrs.class ? ' ' + attrs.class : '')
+ }
+
+ // 转换 embed 标签
+ if (node.name === 'embed') {
+ // #ifndef H5 || APP-PLUS
+ const src = attrs.src || ''
+ // 按照后缀名和 type 将 embed 转为 video 或 audio
+ if (src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8') || (attrs.type || '').includes('video')) {
+ node.name = 'video'
+ } else if (src.includes('.mp3') || src.includes('.wav') || src.includes('.aac') || src.includes('.m4a') || (attrs.type || '').includes('audio')) {
+ node.name = 'audio'
+ }
+ if (attrs.autostart) {
+ attrs.autoplay = 'T'
+ }
+ attrs.controls = 'T'
+ // #endif
+ // #ifdef H5 || APP-PLUS
+ this.expose()
+ // #endif
+ }
+
+ // #ifndef APP-PLUS-NVUE
+ // 处理音视频
+ if (node.name === 'video' || node.name === 'audio') {
+ // 设置 id 以便获取 context
+ if (node.name === 'video' && !attrs.id) {
+ attrs.id = 'v' + idIndex++
+ }
+ // 没有设置 controls 也没有设置 autoplay 的自动设置 controls
+ if (!attrs.controls && !attrs.autoplay) {
+ attrs.controls = 'T'
+ }
+ // 用数组存储所有可用的 source
+ node.src = []
+ if (attrs.src) {
+ node.src.push(attrs.src)
+ attrs.src = undefined
+ }
+ this.expose()
+ }
+ // #endif
+
+ // 处理自闭合标签
+ if (close) {
+ if (!this.hook(node) || config.ignoreTags[node.name]) {
+ // 通过 base 标签设置主域名
+ if (node.name === 'base' && !this.options.domain) {
+ this.options.domain = attrs.href
+ } /* #ifndef APP-PLUS-NVUE */ else if (node.name === 'source' && parent && (parent.name === 'video' || parent.name === 'audio') && attrs.src) {
+ // 设置 source 标签(仅父节点为 video 或 audio 时有效)
+ parent.src.push(attrs.src)
+ } /* #endif */
+ return
+ }
+
+ // 解析 style
+ const styleObj = this.parseStyle(node)
+
+ // 处理图片
+ if (node.name === 'img') {
+ if (attrs.src) {
+ // 标记 webp
+ if (attrs.src.includes('webp')) {
+ node.webp = 'T'
+ }
+ // data url 图片如果没有设置 original-src 默认为不可预览的小图片
+ if (attrs.src.includes('data:') && this.options.previewImg !== 'all' && !attrs['original-src']) {
+ attrs.ignore = 'T'
+ }
+ if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) {
+ for (let i = this.stack.length; i--;) {
+ const item = this.stack[i]
+ if (item.name === 'a') {
+ node.a = item.attrs
+ }
+ if (item.name === 'table' && !node.webp && !attrs.src.includes('cloud://')) {
+ if (!styleObj.display || styleObj.display.includes('inline')) {
+ node.t = 'inline-block'
+ } else {
+ node.t = styleObj.display
+ }
+ styleObj.display = undefined
+ }
+ // #ifndef H5 || APP-PLUS
+ const style = item.attrs.style || ''
+ if (style.includes('flex:') && !style.includes('flex:0') && !style.includes('flex: 0') && (!styleObj.width || parseInt(styleObj.width) > 100)) {
+ styleObj.width = '100% !important'
+ styleObj.height = ''
+ for (let j = i + 1; j < this.stack.length; j++) {
+ this.stack[j].attrs.style = (this.stack[j].attrs.style || '').replace('inline-', '')
+ }
+ } else if (style.includes('flex') && styleObj.width === '100%') {
+ for (let j = i + 1; j < this.stack.length; j++) {
+ const style = this.stack[j].attrs.style || ''
+ if (!style.includes(';width') && !style.includes(' width') && style.indexOf('width') !== 0) {
+ styleObj.width = ''
+ break
+ }
+ }
+ } else if (style.includes('inline-block')) {
+ if (styleObj.width && styleObj.width[styleObj.width.length - 1] === '%') {
+ item.attrs.style += ';max-width:' + styleObj.width
+ styleObj.width = ''
+ } else {
+ item.attrs.style += ';max-width:100%'
+ }
+ }
+ // #endif
+ item.c = 1
+ }
+ attrs.i = this.imgList.length.toString()
+ let src = attrs['original-src'] || attrs.src
+ // #ifndef H5 || MP-ALIPAY || APP-PLUS || MP-360
+ if (this.imgList.includes(src)) {
+ // 如果有重复的链接则对域名进行随机大小写变换避免预览时错位
+ let i = src.indexOf('://')
+ if (i !== -1) {
+ i += 3
+ let newSrc = src.substr(0, i)
+ for (; i < src.length; i++) {
+ if (src[i] === '/') break
+ newSrc += Math.random() > 0.5 ? src[i].toUpperCase() : src[i]
+ }
+ newSrc += src.substr(i)
+ src = newSrc
+ }
+ }
+ // #endif
+ this.imgList.push(src)
+ if (!node.t) {
+ this.imgList._unloadimgs += 1
+ }
+ // #ifdef H5 || APP-PLUS
+ if (this.options.lazyLoad) {
+ attrs['data-src'] = attrs.src
+ attrs.src = undefined
+ }
+ // #endif
+ }
+ }
+ if (styleObj.display === 'inline') {
+ styleObj.display = ''
+ }
+ // #ifndef APP-PLUS-NVUE
+ if (attrs.ignore) {
+ styleObj['max-width'] = styleObj['max-width'] || '100%'
+ attrs.style += ';-webkit-touch-callout:none'
+ }
+ // #endif
+ // 设置的宽度超出屏幕,为避免变形,高度转为自动
+ if (parseInt(styleObj.width) > windowWidth) {
+ styleObj.height = undefined
+ }
+ // 记录是否设置了宽高
+ if (!isNaN(parseInt(styleObj.width))) {
+ node.w = 'T'
+ }
+ if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) {
+ node.h = 'T'
+ }
+ if (node.w && node.h && styleObj['object-fit']) {
+ if (styleObj['object-fit'] === 'contain') {
+ node.m = 'aspectFit'
+ } else if (styleObj['object-fit'] === 'cover') {
+ node.m = 'aspectFill'
+ }
+ }
+ } else if (node.name === 'svg') {
+ siblings.push(node)
+ this.stack.push(node)
+ this.popNode()
+ return
+ }
+ for (const key in styleObj) {
+ if (styleObj[key]) {
+ attrs.style += `;${key}:${styleObj[key].replace(' !important', '')}`
+ }
+ }
+ attrs.style = attrs.style.substr(1) || undefined
+ // #ifdef (MP-WEIXIN || MP-QQ) && VUE3
+ if (!attrs.style) {
+ delete attrs.style
+ }
+ // #endif
+ } else {
+ if ((node.name === 'pre' || ((attrs.style || '').includes('white-space') && attrs.style.includes('pre'))) && this.pre !== 2) {
+ this.pre = node.pre = 1
+ }
+ node.children = []
+ this.stack.push(node)
+ }
+
+ // 加入节点树
+ siblings.push(node)
+}
+
+/**
+ * @description 解析到标签结束
+ * @param {String} name 标签名
+ * @private
+ */
+Parser.prototype.onCloseTag = function (name) {
+ // 依次出栈到匹配为止
+ name = this.xml ? name : name.toLowerCase()
+ let i
+ for (i = this.stack.length; i--;) {
+ if (this.stack[i].name === name) break
+ }
+ if (i !== -1) {
+ while (this.stack.length > i) {
+ this.popNode()
+ }
+ } else if (name === 'p' || name === 'br') {
+ const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes
+ siblings.push({
+ name,
+ attrs: {
+ class: tagSelector[name] || '',
+ style: this.tagStyle[name] || ''
+ }
+ })
+ }
+}
+
+/**
+ * @description 处理标签出栈
+ * @private
+ */
+Parser.prototype.popNode = function () {
+ const node = this.stack.pop()
+ let attrs = node.attrs
+ const children = node.children
+ const parent = this.stack[this.stack.length - 1]
+ const siblings = parent ? parent.children : this.nodes
+
+ if (!this.hook(node) || config.ignoreTags[node.name]) {
+ // 获取标题
+ if (node.name === 'title' && children.length && children[0].type === 'text' && this.options.setTitle) {
+ uni.setNavigationBarTitle({
+ title: children[0].text
+ })
+ }
+ siblings.pop()
+ return
+ }
+
+ if (node.pre && this.pre !== 2) {
+ // 是否合并空白符标识
+ this.pre = node.pre = undefined
+ for (let i = this.stack.length; i--;) {
+ if (this.stack[i].pre) {
+ this.pre = 1
+ }
+ }
+ }
+
+ const styleObj = {}
+
+ // 转换 svg
+ if (node.name === 'svg') {
+ if (this.xml > 1) {
+ // 多层 svg 嵌套
+ this.xml--
+ return
+ }
+ // #ifdef APP-PLUS-NVUE
+ (function traversal (node) {
+ if (node.name) {
+ // 调整 svg 的大小写
+ node.name = config.svgDict[node.name] || node.name
+ for (const item in node.attrs) {
+ if (config.svgDict[item]) {
+ node.attrs[config.svgDict[item]] = node.attrs[item]
+ node.attrs[item] = undefined
+ }
+ }
+ for (let i = 0; i < (node.children || []).length; i++) {
+ traversal(node.children[i])
+ }
+ }
+ })(node)
+ // #endif
+ // #ifndef APP-PLUS-NVUE
+ let src = ''
+ const style = attrs.style
+ attrs.style = ''
+ attrs.xmlns = 'http://www.w3.org/2000/svg';
+ (function traversal (node) {
+ if (node.type === 'text') {
+ src += node.text
+ return
+ }
+ const name = config.svgDict[node.name] || node.name
+ if (name === 'foreignObject') {
+ for (const child of (node.children || [])) {
+ if (child.attrs && !child.attrs.xmlns) {
+ child.attrs.xmlns = 'http://www.w3.org/1999/xhtml'
+ break
+ }
+ }
+ }
+ src += '<' + name
+ for (const item in node.attrs) {
+ const val = node.attrs[item]
+ if (val) {
+ src += ` ${config.svgDict[item] || item}="${val.replace(/"/g, '')}"`
+ }
+ }
+ if (!node.children) {
+ src += '/>'
+ } else {
+ src += '>'
+ for (let i = 0; i < node.children.length; i++) {
+ traversal(node.children[i])
+ }
+ src += '' + name + '>'
+ }
+ })(node)
+ node.name = 'img'
+ node.attrs = {
+ src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
+ style,
+ ignore: 'T'
+ }
+ node.children = undefined
+ // #endif
+ this.xml = false
+ config.ignoreTags.style = true
+ return
+ }
+
+ // #ifndef APP-PLUS-NVUE
+ // 转换 align 属性
+ if (attrs.align) {
+ if (node.name === 'table') {
+ if (attrs.align === 'center') {
+ styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto'
+ } else {
+ styleObj.float = attrs.align
+ }
+ } else {
+ styleObj['text-align'] = attrs.align
+ }
+ attrs.align = undefined
+ }
+
+ // 转换 dir 属性
+ if (attrs.dir) {
+ styleObj.direction = attrs.dir
+ attrs.dir = undefined
+ }
+
+ // 转换 font 标签的属性
+ if (node.name === 'font') {
+ if (attrs.color) {
+ styleObj.color = attrs.color
+ attrs.color = undefined
+ }
+ if (attrs.face) {
+ styleObj['font-family'] = attrs.face
+ attrs.face = undefined
+ }
+ if (attrs.size) {
+ let size = parseInt(attrs.size)
+ if (!isNaN(size)) {
+ if (size < 1) {
+ size = 1
+ } else if (size > 7) {
+ size = 7
+ }
+ styleObj['font-size'] = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large'][size - 1]
+ }
+ attrs.size = undefined
+ }
+ }
+ // #endif
+
+ // 一些编辑器的自带 class
+ if ((attrs.class || '').includes('align-center')) {
+ styleObj['text-align'] = 'center'
+ }
+
+ Object.assign(styleObj, this.parseStyle(node))
+
+ if (node.name !== 'table' && parseInt(styleObj.width) > windowWidth) {
+ styleObj['max-width'] = '100%'
+ styleObj['box-sizing'] = 'border-box'
+ }
+
+ // #ifndef APP-PLUS-NVUE
+ if (config.blockTags[node.name]) {
+ node.name = 'div'
+ } else if (!config.trustTags[node.name] && !this.xml) {
+ // 未知标签转为 span,避免无法显示
+ node.name = 'span'
+ }
+
+ if (node.name === 'a' || node.name === 'ad'
+ // #ifdef H5 || APP-PLUS
+ || node.name === 'iframe' // eslint-disable-line
+ // #endif
+ ) {
+ this.expose()
+ } else if (node.name === 'video') {
+ if ((styleObj.height || '').includes('auto')) {
+ styleObj.height = undefined
+ }
+ /* #ifdef APP-PLUS */
+ let str = ''
+ node.html = str
+ /* #endif */
+ } else if ((node.name === 'ul' || node.name === 'ol') && node.c) {
+ // 列表处理
+ const types = {
+ a: 'lower-alpha',
+ A: 'upper-alpha',
+ i: 'lower-roman',
+ I: 'upper-roman'
+ }
+ if (types[attrs.type]) {
+ attrs.style += ';list-style-type:' + types[attrs.type]
+ attrs.type = undefined
+ }
+ for (let i = children.length; i--;) {
+ if (children[i].name === 'li') {
+ children[i].c = 1
+ }
+ }
+ } else if (node.name === 'table') {
+ // 表格处理
+ // cellpadding、cellspacing、border 这几个常用表格属性需要通过转换实现
+ let padding = parseFloat(attrs.cellpadding)
+ let spacing = parseFloat(attrs.cellspacing)
+ const border = parseFloat(attrs.border)
+ const bordercolor = styleObj['border-color']
+ const borderstyle = styleObj['border-style']
+ if (node.c) {
+ // padding 和 spacing 默认 2
+ if (isNaN(padding)) {
+ padding = 2
+ }
+ if (isNaN(spacing)) {
+ spacing = 2
+ }
+ }
+ if (border) {
+ attrs.style += `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}`
+ }
+ if (node.flag && node.c) {
+ // 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
+ styleObj.display = 'grid'
+ if (styleObj['border-collapse'] === 'collapse') {
+ styleObj['border-collapse'] = undefined
+ spacing = 0
+ }
+ if (spacing) {
+ styleObj['grid-gap'] = spacing + 'px'
+ styleObj.padding = spacing + 'px'
+ } else if (border) {
+ // 无间隔的情况下避免边框重叠
+ attrs.style += ';border-left:0;border-top:0'
+ }
+
+ const width = [] // 表格的列宽
+ const trList = [] // tr 列表
+ const cells = [] // 保存新的单元格
+ const map = {}; // 被合并单元格占用的格子
+
+ (function traversal (nodes) {
+ for (let i = 0; i < nodes.length; i++) {
+ if (nodes[i].name === 'tr') {
+ trList.push(nodes[i])
+ } else if (nodes[i].name === 'colgroup') {
+ let colI = 1
+ for (const col of (nodes[i].children || [])) {
+ if (col.name === 'col') {
+ const style = col.attrs.style || ''
+ const start = style.indexOf('width') ? style.indexOf(';width') : 0
+ // 提取出宽度
+ if (start !== -1) {
+ let end = style.indexOf(';', start + 6)
+ if (end === -1) {
+ end = style.length
+ }
+ width[colI] = style.substring(start ? start + 7 : 6, end)
+ }
+ colI += 1
+ }
+ }
+ } else {
+ traversal(nodes[i].children || [])
+ }
+ }
+ })(children)
+
+ for (let row = 1; row <= trList.length; row++) {
+ let col = 1
+ for (let j = 0; j < trList[row - 1].children.length; j++) {
+ const td = trList[row - 1].children[j]
+ if (td.name === 'td' || td.name === 'th') {
+ // 这个格子被上面的单元格占用,则列号++
+ while (map[row + '.' + col]) {
+ col++
+ }
+ let style = td.attrs.style || ''
+ let start = style.indexOf('width') ? style.indexOf(';width') : 0
+ // 提取出 td 的宽度
+ if (start !== -1) {
+ let end = style.indexOf(';', start + 6)
+ if (end === -1) {
+ end = style.length
+ }
+ if (!td.attrs.colspan) {
+ width[col] = style.substring(start ? start + 7 : 6, end)
+ }
+ style = style.substr(0, start) + style.substr(end)
+ }
+ // 设置竖直对齐
+ style += ';display:flex'
+ start = style.indexOf('vertical-align')
+ if (start !== -1) {
+ const val = style.substr(start + 15, 10)
+ if (val.includes('middle')) {
+ style += ';align-items:center'
+ } else if (val.includes('bottom')) {
+ style += ';align-items:flex-end'
+ }
+ } else {
+ style += ';align-items:center'
+ }
+ // 设置水平对齐
+ start = style.indexOf('text-align')
+ if (start !== -1) {
+ const val = style.substr(start + 11, 10)
+ if (val.includes('center')) {
+ style += ';justify-content: center'
+ } else if (val.includes('right')) {
+ style += ';justify-content: right'
+ }
+ }
+ style = (border ? `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}` + (spacing ? '' : ';border-right:0;border-bottom:0') : '') + (padding ? `;padding:${padding}px` : '') + ';' + style
+ // 处理列合并
+ if (td.attrs.colspan) {
+ style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`
+ if (!td.attrs.rowspan) {
+ style += `;grid-row-start:${row};grid-row-end:${row + 1}`
+ }
+ col += parseInt(td.attrs.colspan) - 1
+ }
+ // 处理行合并
+ if (td.attrs.rowspan) {
+ style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`
+ if (!td.attrs.colspan) {
+ style += `;grid-column-start:${col};grid-column-end:${col + 1}`
+ }
+ // 记录下方单元格被占用
+ for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {
+ for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {
+ map[(row + rowspan) + '.' + (col - colspan)] = 1
+ }
+ }
+ }
+ if (style) {
+ td.attrs.style = style
+ }
+ cells.push(td)
+ col++
+ }
+ }
+ if (row === 1) {
+ let temp = ''
+ for (let i = 1; i < col; i++) {
+ temp += (width[i] ? width[i] : 'auto') + ' '
+ }
+ styleObj['grid-template-columns'] = temp
+ }
+ }
+ node.children = cells
+ } else {
+ // 没有使用合并单元格的表格通过 table 布局实现
+ if (node.c) {
+ styleObj.display = 'table'
+ }
+ if (!isNaN(spacing)) {
+ styleObj['border-spacing'] = spacing + 'px'
+ }
+ if (border || padding) {
+ // 遍历
+ (function traversal (nodes) {
+ for (let i = 0; i < nodes.length; i++) {
+ const td = nodes[i]
+ if (td.name === 'th' || td.name === 'td') {
+ if (border) {
+ td.attrs.style = `border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'};${td.attrs.style || ''}`
+ }
+ if (padding) {
+ td.attrs.style = `padding:${padding}px;${td.attrs.style || ''}`
+ }
+ } else if (td.children) {
+ traversal(td.children)
+ }
+ }
+ })(children)
+ }
+ }
+ // 给表格添加一个单独的横向滚动层
+ if (this.options.scrollTable && !(attrs.style || '').includes('inline')) {
+ const table = Object.assign({}, node)
+ node.name = 'div'
+ node.attrs = {
+ style: 'overflow:auto'
+ }
+ node.children = [table]
+ attrs = table.attrs
+ }
+ } else if ((node.name === 'tbody' || node.name === 'tr') && node.flag && node.c) {
+ node.flag = undefined;
+ (function traversal (nodes) {
+ for (let i = 0; i < nodes.length; i++) {
+ if (nodes[i].name === 'td') {
+ // 颜色样式设置给单元格避免丢失
+ for (const style of ['color', 'background', 'background-color']) {
+ if (styleObj[style]) {
+ nodes[i].attrs.style = style + ':' + styleObj[style] + ';' + (nodes[i].attrs.style || '')
+ }
+ }
+ } else {
+ traversal(nodes[i].children || [])
+ }
+ }
+ })(children)
+ } else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) {
+ for (let i = this.stack.length; i--;) {
+ if (this.stack[i].name === 'table' || this.stack[i].name === 'tbody' || this.stack[i].name === 'tr') {
+ this.stack[i].flag = 1 // 指示含有合并单元格
+ }
+ }
+ } else if (node.name === 'ruby') {
+ // 转换 ruby
+ node.name = 'span'
+ for (let i = 0; i < children.length - 1; i++) {
+ if (children[i].type === 'text' && children[i + 1].name === 'rt') {
+ children[i] = {
+ name: 'div',
+ attrs: {
+ style: 'display:inline-block;text-align:center'
+ },
+ children: [{
+ name: 'div',
+ attrs: {
+ style: 'font-size:50%;' + (children[i + 1].attrs.style || '')
+ },
+ children: children[i + 1].children
+ }, children[i]]
+ }
+ children.splice(i + 1, 1)
+ }
+ }
+ } else if (node.c) {
+ (function traversal (node) {
+ node.c = 2
+ for (let i = node.children.length; i--;) {
+ const child = node.children[i]
+ // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3
+ if (child.name && (config.inlineTags[child.name] || ((child.attrs.style || '').includes('inline') && child.children)) && !child.c) {
+ traversal(child)
+ }
+ // #endif
+ if (!child.c || child.name === 'table') {
+ node.c = 1
+ }
+ }
+ })(node)
+ }
+
+ if ((styleObj.display || '').includes('flex') && !node.c) {
+ for (let i = children.length; i--;) {
+ const item = children[i]
+ if (item.f) {
+ item.attrs.style = (item.attrs.style || '') + item.f
+ item.f = undefined
+ }
+ }
+ }
+ // flex 布局时部分样式需要提取到 rich-text 外层
+ const flex = parent && ((parent.attrs.style || '').includes('flex') || (parent.attrs.style || '').includes('grid'))
+ // #ifdef MP-WEIXIN
+ // 检查基础库版本 virtualHost 是否可用
+ && !(node.c && wx.getNFCAdapter) // eslint-disable-line
+ // #endif
+ // #ifndef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO
+ && !node.c // eslint-disable-line
+ // #endif
+ if (flex) {
+ node.f = ';max-width:100%'
+ }
+
+ if (children.length >= 50 && node.c && !(styleObj.display || '').includes('flex')) {
+ mergeNodes(children)
+ }
+ // #endif
+
+ for (const key in styleObj) {
+ if (styleObj[key]) {
+ const val = `;${key}:${styleObj[key].replace(' !important', '')}`
+ /* #ifndef APP-PLUS-NVUE */
+ if (flex && ((key.includes('flex') && key !== 'flex-direction') || key === 'align-self' || key.includes('grid') || styleObj[key][0] === '-' || (key.includes('width') && val.includes('%')))) {
+ node.f += val
+ if (key === 'width') {
+ attrs.style += ';width:100%'
+ }
+ } else /* #endif */ {
+ attrs.style += val
+ }
+ }
+ }
+ attrs.style = attrs.style.substr(1) || undefined
+ // #ifdef (MP-WEIXIN || MP-QQ) && VUE3
+ for (const key in attrs) {
+ if (!attrs[key]) {
+ delete attrs[key]
+ }
+ }
+ // #endif
+}
+
+/**
+ * @description 解析到文本
+ * @param {String} text 文本内容
+ */
+Parser.prototype.onText = function (text) {
+ if (!this.pre) {
+ // 合并空白符
+ let trim = ''
+ let flag
+ for (let i = 0, len = text.length; i < len; i++) {
+ if (!blankChar[text[i]]) {
+ trim += text[i]
+ } else {
+ if (trim[trim.length - 1] !== ' ') {
+ trim += ' '
+ }
+ if (text[i] === '\n' && !flag) {
+ flag = true
+ }
+ }
+ }
+ // 去除含有换行符的空串
+ if (trim === ' ') {
+ if (flag) return
+ // #ifdef VUE3
+ else {
+ const parent = this.stack[this.stack.length - 1]
+ if (parent && parent.name[0] === 't') return
+ }
+ // #endif
+ }
+ text = trim
+ }
+ const node = Object.create(null)
+ node.type = 'text'
+ // #ifdef (MP-BAIDU || MP-ALIPAY || MP-TOUTIAO) && VUE3
+ node.attrs = {}
+ // #endif
+ node.text = decodeEntity(text)
+ if (this.hook(node)) {
+ // #ifdef MP-WEIXIN
+ if (this.options.selectable === 'force' && system.includes('iOS') && !uni.canIUse('rich-text.user-select')) {
+ this.expose()
+ }
+ // #endif
+ const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes
+ siblings.push(node)
+ }
+}
+
+/**
+ * @description html 词法分析器
+ * @param {Object} handler 高层处理器
+ */
+function Lexer (handler) {
+ this.handler = handler
+}
+
+/**
+ * @description 执行解析
+ * @param {String} content 要解析的文本
+ */
+Lexer.prototype.parse = function (content) {
+ this.content = content || ''
+ this.i = 0 // 标记解析位置
+ this.start = 0 // 标记一个单词的开始位置
+ this.state = this.text // 当前状态
+ for (let len = this.content.length; this.i !== -1 && this.i < len;) {
+ this.state()
+ }
+}
+
+/**
+ * @description 检查标签是否闭合
+ * @param {String} method 如果闭合要进行的操作
+ * @returns {Boolean} 是否闭合
+ * @private
+ */
+Lexer.prototype.checkClose = function (method) {
+ const selfClose = this.content[this.i] === '/'
+ if (this.content[this.i] === '>' || (selfClose && this.content[this.i + 1] === '>')) {
+ if (method) {
+ this.handler[method](this.content.substring(this.start, this.i))
+ }
+ this.i += selfClose ? 2 : 1
+ this.start = this.i
+ this.handler.onOpenTag(selfClose)
+ if (this.handler.tagName === 'script') {
+ this.i = this.content.indexOf('', this.i)
+ if (this.i !== -1) {
+ this.i += 2
+ this.start = this.i
+ }
+ this.state = this.endTag
+ } else {
+ this.state = this.text
+ }
+ return true
+ }
+ return false
+}
+
+/**
+ * @description 文本状态
+ * @private
+ */
+Lexer.prototype.text = function () {
+ this.i = this.content.indexOf('<', this.i) // 查找最近的标签
+ if (this.i === -1) {
+ // 没有标签了
+ if (this.start < this.content.length) {
+ this.handler.onText(this.content.substring(this.start, this.content.length))
+ }
+ return
+ }
+ const c = this.content[this.i + 1]
+ if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+ // 标签开头
+ if (this.start !== this.i) {
+ this.handler.onText(this.content.substring(this.start, this.i))
+ }
+ this.start = ++this.i
+ this.state = this.tagName
+ } else if (c === '/' || c === '!' || c === '?') {
+ if (this.start !== this.i) {
+ this.handler.onText(this.content.substring(this.start, this.i))
+ }
+ const next = this.content[this.i + 2]
+ if (c === '/' && ((next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z'))) {
+ // 标签结尾
+ this.i += 2
+ this.start = this.i
+ this.state = this.endTag
+ return
+ }
+ // 处理注释
+ let end = '-->'
+ if (c !== '!' || this.content[this.i + 2] !== '-' || this.content[this.i + 3] !== '-') {
+ end = '>'
+ }
+ this.i = this.content.indexOf(end, this.i)
+ if (this.i !== -1) {
+ this.i += end.length
+ this.start = this.i
+ }
+ } else {
+ this.i++
+ }
+}
+
+/**
+ * @description 标签名状态
+ * @private
+ */
+Lexer.prototype.tagName = function () {
+ if (blankChar[this.content[this.i]]) {
+ // 解析到标签名
+ this.handler.onTagName(this.content.substring(this.start, this.i))
+ while (blankChar[this.content[++this.i]]);
+ if (this.i < this.content.length && !this.checkClose()) {
+ this.start = this.i
+ this.state = this.attrName
+ }
+ } else if (!this.checkClose('onTagName')) {
+ this.i++
+ }
+}
+
+/**
+ * @description 属性名状态
+ * @private
+ */
+Lexer.prototype.attrName = function () {
+ let c = this.content[this.i]
+ if (blankChar[c] || c === '=') {
+ // 解析到属性名
+ this.handler.onAttrName(this.content.substring(this.start, this.i))
+ let needVal = c === '='
+ const len = this.content.length
+ while (++this.i < len) {
+ c = this.content[this.i]
+ if (!blankChar[c]) {
+ if (this.checkClose()) return
+ if (needVal) {
+ // 等号后遇到第一个非空字符
+ this.start = this.i
+ this.state = this.attrVal
+ return
+ }
+ if (this.content[this.i] === '=') {
+ needVal = true
+ } else {
+ this.start = this.i
+ this.state = this.attrName
+ return
+ }
+ }
+ }
+ } else if (!this.checkClose('onAttrName')) {
+ this.i++
+ }
+}
+
+/**
+ * @description 属性值状态
+ * @private
+ */
+Lexer.prototype.attrVal = function () {
+ const c = this.content[this.i]
+ const len = this.content.length
+ if (c === '"' || c === "'") {
+ // 有冒号的属性
+ this.start = ++this.i
+ this.i = this.content.indexOf(c, this.i)
+ if (this.i === -1) return
+ this.handler.onAttrVal(this.content.substring(this.start, this.i))
+ } else {
+ // 没有冒号的属性
+ for (; this.i < len; this.i++) {
+ if (blankChar[this.content[this.i]]) {
+ this.handler.onAttrVal(this.content.substring(this.start, this.i))
+ break
+ } else if (this.checkClose('onAttrVal')) return
+ }
+ }
+ while (blankChar[this.content[++this.i]]);
+ if (this.i < len && !this.checkClose()) {
+ this.start = this.i
+ this.state = this.attrName
+ }
+}
+
+/**
+ * @description 结束标签状态
+ * @returns {String} 结束的标签名
+ * @private
+ */
+Lexer.prototype.endTag = function () {
+ const c = this.content[this.i]
+ if (blankChar[c] || c === '>' || c === '/') {
+ this.handler.onCloseTag(this.content.substring(this.start, this.i))
+ if (c !== '>') {
+ this.i = this.content.indexOf('>', this.i)
+ if (this.i === -1) return
+ }
+ this.start = ++this.i
+ this.state = this.text
+ } else {
+ this.i++
+ }
+}
+
+export default Parser
diff --git a/uni_modules/mp-html/package.json b/uni_modules/mp-html/package.json
new file mode 100644
index 0000000..95394c0
--- /dev/null
+++ b/uni_modules/mp-html/package.json
@@ -0,0 +1,79 @@
+{
+ "id": "mp-html",
+ "displayName": "mp-html 富文本组件【全端支持,支持编辑、latex等扩展】",
+ "version": "v2.5.1",
+ "description": "一个强大的富文本组件,高效轻量,功能丰富",
+ "keywords": [
+ "富文本",
+ "编辑器",
+ "html",
+ "rich-text",
+ "editor"
+ ],
+ "repository": "https://github.com/jin-yufeng/mp-html",
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/mp-html",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y",
+ "app-harmony": "u",
+ "app-uvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "u",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/mp-html/static/app-plus/mp-html/js/handler.js b/uni_modules/mp-html/static/app-plus/mp-html/js/handler.js
new file mode 100644
index 0000000..1d986bd
--- /dev/null
+++ b/uni_modules/mp-html/static/app-plus/mp-html/js/handler.js
@@ -0,0 +1 @@
+"use strict";function t(t){for(var e=Object.create(null),n=t.attributes.length;n--;)e[t.attributes[n].name]=t.attributes[n].value;return e}function e(){a[1]&&(this.src=a[1],this.onerror=null),this.onclick=null,this.ontouchstart=null,uni.postMessage({data:{action:"onError",source:"img",attrs:t(this)}})}function n(){window.unloadimgs-=1,0===window.unloadimgs&&uni.postMessage({data:{action:"onReady"}})}function o(r,s,c){for(var d=0;d0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;a("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("redirectTo",{url:encodeURI(n)})},getEnv:function(e){window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a("postMessage",e.data||{})}},r=/uni-app/i.test(navigator.userAgent),d=/Html5Plus/i.test(navigator.userAgent),s=/complete|loaded|interactive/;var w=window.my&&navigator.userAgent.indexOf("AlipayClient")>-1;var u=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var g=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var v=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.qa&&/quickapp/i.test(navigator.userAgent);for(var l,_=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},f=[function(e){if(r||d)return window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&s.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),o},function(e){if(v)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(w){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(u)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(g)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(p){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){return document.addEventListener("DOMContentLoaded",e),o}],m=0;m
\ No newline at end of file
diff --git a/uni_modules/uni-dateformat/changelog.md b/uni_modules/uni-dateformat/changelog.md
new file mode 100644
index 0000000..d551d7b
--- /dev/null
+++ b/uni_modules/uni-dateformat/changelog.md
@@ -0,0 +1,10 @@
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-dateformat](https://uniapp.dcloud.io/component/uniui/uni-dateformat)
+## 0.0.5(2021-07-08)
+- 调整 默认时间不再是当前时间,而是显示'-'字符
+## 0.0.4(2021-05-12)
+- 新增 组件示例地址
+## 0.0.3(2021-02-04)
+- 调整为uni_modules目录规范
+- 修复 iOS 平台日期格式化出错的问题
diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
new file mode 100644
index 0000000..e00d559
--- /dev/null
+++ b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
@@ -0,0 +1,200 @@
+// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型
+function pad(str, length = 2) {
+ str += ''
+ while (str.length < length) {
+ str = '0' + str
+ }
+ return str.slice(-length)
+}
+
+const parser = {
+ yyyy: (dateObj) => {
+ return pad(dateObj.year, 4)
+ },
+ yy: (dateObj) => {
+ return pad(dateObj.year)
+ },
+ MM: (dateObj) => {
+ return pad(dateObj.month)
+ },
+ M: (dateObj) => {
+ return dateObj.month
+ },
+ dd: (dateObj) => {
+ return pad(dateObj.day)
+ },
+ d: (dateObj) => {
+ return dateObj.day
+ },
+ hh: (dateObj) => {
+ return pad(dateObj.hour)
+ },
+ h: (dateObj) => {
+ return dateObj.hour
+ },
+ mm: (dateObj) => {
+ return pad(dateObj.minute)
+ },
+ m: (dateObj) => {
+ return dateObj.minute
+ },
+ ss: (dateObj) => {
+ return pad(dateObj.second)
+ },
+ s: (dateObj) => {
+ return dateObj.second
+ },
+ SSS: (dateObj) => {
+ return pad(dateObj.millisecond, 3)
+ },
+ S: (dateObj) => {
+ return dateObj.millisecond
+ },
+}
+
+// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12
+function getDate(time) {
+ if (time instanceof Date) {
+ return time
+ }
+ switch (typeof time) {
+ case 'string':
+ {
+ // 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000
+ if (time.indexOf('T') > -1) {
+ return new Date(time)
+ }
+ return new Date(time.replace(/-/g, '/'))
+ }
+ default:
+ return new Date(time)
+ }
+}
+
+export function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') {
+ if (!date && date !== 0) {
+ return ''
+ }
+ date = getDate(date)
+ const dateObj = {
+ year: date.getFullYear(),
+ month: date.getMonth() + 1,
+ day: date.getDate(),
+ hour: date.getHours(),
+ minute: date.getMinutes(),
+ second: date.getSeconds(),
+ millisecond: date.getMilliseconds()
+ }
+ const tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/
+ let flag = true
+ let result = format
+ while (flag) {
+ flag = false
+ result = result.replace(tokenRegExp, function(matched) {
+ flag = true
+ return parser[matched](dateObj)
+ })
+ }
+ return result
+}
+
+export function friendlyDate(time, {
+ locale = 'zh',
+ threshold = [60000, 3600000],
+ format = 'yyyy/MM/dd hh:mm:ss'
+}) {
+ if (time === '-') {
+ return time
+ }
+ if (!time && time !== 0) {
+ return ''
+ }
+ const localeText = {
+ zh: {
+ year: '年',
+ month: '月',
+ day: '天',
+ hour: '小时',
+ minute: '分钟',
+ second: '秒',
+ ago: '前',
+ later: '后',
+ justNow: '刚刚',
+ soon: '马上',
+ template: '{num}{unit}{suffix}'
+ },
+ en: {
+ year: 'year',
+ month: 'month',
+ day: 'day',
+ hour: 'hour',
+ minute: 'minute',
+ second: 'second',
+ ago: 'ago',
+ later: 'later',
+ justNow: 'just now',
+ soon: 'soon',
+ template: '{num} {unit} {suffix}'
+ }
+ }
+ const text = localeText[locale] || localeText.zh
+ let date = getDate(time)
+ let ms = date.getTime() - Date.now()
+ let absMs = Math.abs(ms)
+ if (absMs < threshold[0]) {
+ return ms < 0 ? text.justNow : text.soon
+ }
+ if (absMs >= threshold[1]) {
+ return formatDate(date, format)
+ }
+ let num
+ let unit
+ let suffix = text.later
+ if (ms < 0) {
+ suffix = text.ago
+ ms = -ms
+ }
+ const seconds = Math.floor((ms) / 1000)
+ const minutes = Math.floor(seconds / 60)
+ const hours = Math.floor(minutes / 60)
+ const days = Math.floor(hours / 24)
+ const months = Math.floor(days / 30)
+ const years = Math.floor(months / 12)
+ switch (true) {
+ case years > 0:
+ num = years
+ unit = text.year
+ break
+ case months > 0:
+ num = months
+ unit = text.month
+ break
+ case days > 0:
+ num = days
+ unit = text.day
+ break
+ case hours > 0:
+ num = hours
+ unit = text.hour
+ break
+ case minutes > 0:
+ num = minutes
+ unit = text.minute
+ break
+ default:
+ num = seconds
+ unit = text.second
+ break
+ }
+
+ if (locale === 'en') {
+ if (num === 1) {
+ num = 'a'
+ } else {
+ unit += 's'
+ }
+ }
+
+ return text.template.replace(/{\s*num\s*}/g, num + '').replace(/{\s*unit\s*}/g, unit).replace(/{\s*suffix\s*}/g,
+ suffix)
+}
diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
new file mode 100644
index 0000000..c5ed030
--- /dev/null
+++ b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
@@ -0,0 +1,88 @@
+
+ {{dateShow}}
+
+
+
+
+
diff --git a/uni_modules/uni-dateformat/package.json b/uni_modules/uni-dateformat/package.json
new file mode 100644
index 0000000..786a670
--- /dev/null
+++ b/uni_modules/uni-dateformat/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-dateformat",
+ "displayName": "uni-dateformat 日期格式化",
+ "version": "1.0.0",
+ "description": "日期格式化组件,可以将日期格式化为1分钟前、刚刚等形式",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "日期格式化",
+ "时间格式化",
+ "格式化时间",
+ ""
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-dateformat/readme.md b/uni_modules/uni-dateformat/readme.md
new file mode 100644
index 0000000..37ddb6e
--- /dev/null
+++ b/uni_modules/uni-dateformat/readme.md
@@ -0,0 +1,11 @@
+
+
+### DateFormat 日期格式化
+> **组件名:uni-dateformat**
+> 代码块: `uDateformat`
+
+
+日期格式化组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-dateformat)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md
new file mode 100644
index 0000000..0261131
--- /dev/null
+++ b/uni_modules/uni-icons/changelog.md
@@ -0,0 +1,42 @@
+## 2.0.10(2024-06-07)
+- 优化 uni-app x 中,size 属性的类型
+## 2.0.9(2024-01-12)
+fix: 修复图标大小默认值错误的问题
+## 2.0.8(2023-12-14)
+- 修复 项目未使用 ts 情况下,打包报错的bug
+## 2.0.7(2023-12-14)
+- 修复 size 属性为 string 时,不加单位导致尺寸异常的bug
+## 2.0.6(2023-12-11)
+- 优化 兼容老版本icon类型,如 top ,bottom 等
+## 2.0.5(2023-12-11)
+- 优化 兼容老版本icon类型,如 top ,bottom 等
+## 2.0.4(2023-12-06)
+- 优化 uni-app x 下示例项目图标排序
+## 2.0.3(2023-12-06)
+- 修复 nvue下引入组件报错的bug
+## 2.0.2(2023-12-05)
+-优化 size 属性支持单位
+## 2.0.1(2023-12-05)
+- 新增 uni-app x 支持定义图标
+## 1.3.5(2022-01-24)
+- 优化 size 属性可以传入不带单位的字符串数值
+## 1.3.4(2022-01-24)
+- 优化 size 支持其他单位
+## 1.3.3(2022-01-17)
+- 修复 nvue 有些图标不显示的bug,兼容老版本图标
+## 1.3.2(2021-12-01)
+- 优化 示例可复制图标名称
+## 1.3.1(2021-11-23)
+- 优化 兼容旧组件 type 值
+## 1.3.0(2021-11-19)
+- 新增 更多图标
+- 优化 自定义图标使用方式
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
+## 1.1.7(2021-11-08)
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.5(2021-05-12)
+- 新增 组件示例地址
+## 1.1.4(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
new file mode 100644
index 0000000..8740559
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
@@ -0,0 +1,91 @@
+
+
+ {{unicode}}
+
+
+
+
+
+
diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
new file mode 100644
index 0000000..7da5356
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
@@ -0,0 +1,110 @@
+
+
+ {{unicode}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css
new file mode 100644
index 0000000..0a6b6fe
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css
@@ -0,0 +1,664 @@
+
+.uniui-cart-filled:before {
+ content: "\e6d0";
+}
+
+.uniui-gift-filled:before {
+ content: "\e6c4";
+}
+
+.uniui-color:before {
+ content: "\e6cf";
+}
+
+.uniui-wallet:before {
+ content: "\e6b1";
+}
+
+.uniui-settings-filled:before {
+ content: "\e6ce";
+}
+
+.uniui-auth-filled:before {
+ content: "\e6cc";
+}
+
+.uniui-shop-filled:before {
+ content: "\e6cd";
+}
+
+.uniui-staff-filled:before {
+ content: "\e6cb";
+}
+
+.uniui-vip-filled:before {
+ content: "\e6c6";
+}
+
+.uniui-plus-filled:before {
+ content: "\e6c7";
+}
+
+.uniui-folder-add-filled:before {
+ content: "\e6c8";
+}
+
+.uniui-color-filled:before {
+ content: "\e6c9";
+}
+
+.uniui-tune-filled:before {
+ content: "\e6ca";
+}
+
+.uniui-calendar-filled:before {
+ content: "\e6c0";
+}
+
+.uniui-notification-filled:before {
+ content: "\e6c1";
+}
+
+.uniui-wallet-filled:before {
+ content: "\e6c2";
+}
+
+.uniui-medal-filled:before {
+ content: "\e6c3";
+}
+
+.uniui-fire-filled:before {
+ content: "\e6c5";
+}
+
+.uniui-refreshempty:before {
+ content: "\e6bf";
+}
+
+.uniui-location-filled:before {
+ content: "\e6af";
+}
+
+.uniui-person-filled:before {
+ content: "\e69d";
+}
+
+.uniui-personadd-filled:before {
+ content: "\e698";
+}
+
+.uniui-arrowthinleft:before {
+ content: "\e6d2";
+}
+
+.uniui-arrowthinup:before {
+ content: "\e6d3";
+}
+
+.uniui-arrowthindown:before {
+ content: "\e6d4";
+}
+
+.uniui-back:before {
+ content: "\e6b9";
+}
+
+.uniui-forward:before {
+ content: "\e6ba";
+}
+
+.uniui-arrow-right:before {
+ content: "\e6bb";
+}
+
+.uniui-arrow-left:before {
+ content: "\e6bc";
+}
+
+.uniui-arrow-up:before {
+ content: "\e6bd";
+}
+
+.uniui-arrow-down:before {
+ content: "\e6be";
+}
+
+.uniui-arrowthinright:before {
+ content: "\e6d1";
+}
+
+.uniui-down:before {
+ content: "\e6b8";
+}
+
+.uniui-bottom:before {
+ content: "\e6b8";
+}
+
+.uniui-arrowright:before {
+ content: "\e6d5";
+}
+
+.uniui-right:before {
+ content: "\e6b5";
+}
+
+.uniui-up:before {
+ content: "\e6b6";
+}
+
+.uniui-top:before {
+ content: "\e6b6";
+}
+
+.uniui-left:before {
+ content: "\e6b7";
+}
+
+.uniui-arrowup:before {
+ content: "\e6d6";
+}
+
+.uniui-eye:before {
+ content: "\e651";
+}
+
+.uniui-eye-filled:before {
+ content: "\e66a";
+}
+
+.uniui-eye-slash:before {
+ content: "\e6b3";
+}
+
+.uniui-eye-slash-filled:before {
+ content: "\e6b4";
+}
+
+.uniui-info-filled:before {
+ content: "\e649";
+}
+
+.uniui-reload:before {
+ content: "\e6b2";
+}
+
+.uniui-micoff-filled:before {
+ content: "\e6b0";
+}
+
+.uniui-map-pin-ellipse:before {
+ content: "\e6ac";
+}
+
+.uniui-map-pin:before {
+ content: "\e6ad";
+}
+
+.uniui-location:before {
+ content: "\e6ae";
+}
+
+.uniui-starhalf:before {
+ content: "\e683";
+}
+
+.uniui-star:before {
+ content: "\e688";
+}
+
+.uniui-star-filled:before {
+ content: "\e68f";
+}
+
+.uniui-calendar:before {
+ content: "\e6a0";
+}
+
+.uniui-fire:before {
+ content: "\e6a1";
+}
+
+.uniui-medal:before {
+ content: "\e6a2";
+}
+
+.uniui-font:before {
+ content: "\e6a3";
+}
+
+.uniui-gift:before {
+ content: "\e6a4";
+}
+
+.uniui-link:before {
+ content: "\e6a5";
+}
+
+.uniui-notification:before {
+ content: "\e6a6";
+}
+
+.uniui-staff:before {
+ content: "\e6a7";
+}
+
+.uniui-vip:before {
+ content: "\e6a8";
+}
+
+.uniui-folder-add:before {
+ content: "\e6a9";
+}
+
+.uniui-tune:before {
+ content: "\e6aa";
+}
+
+.uniui-auth:before {
+ content: "\e6ab";
+}
+
+.uniui-person:before {
+ content: "\e699";
+}
+
+.uniui-email-filled:before {
+ content: "\e69a";
+}
+
+.uniui-phone-filled:before {
+ content: "\e69b";
+}
+
+.uniui-phone:before {
+ content: "\e69c";
+}
+
+.uniui-email:before {
+ content: "\e69e";
+}
+
+.uniui-personadd:before {
+ content: "\e69f";
+}
+
+.uniui-chatboxes-filled:before {
+ content: "\e692";
+}
+
+.uniui-contact:before {
+ content: "\e693";
+}
+
+.uniui-chatbubble-filled:before {
+ content: "\e694";
+}
+
+.uniui-contact-filled:before {
+ content: "\e695";
+}
+
+.uniui-chatboxes:before {
+ content: "\e696";
+}
+
+.uniui-chatbubble:before {
+ content: "\e697";
+}
+
+.uniui-upload-filled:before {
+ content: "\e68e";
+}
+
+.uniui-upload:before {
+ content: "\e690";
+}
+
+.uniui-weixin:before {
+ content: "\e691";
+}
+
+.uniui-compose:before {
+ content: "\e67f";
+}
+
+.uniui-qq:before {
+ content: "\e680";
+}
+
+.uniui-download-filled:before {
+ content: "\e681";
+}
+
+.uniui-pyq:before {
+ content: "\e682";
+}
+
+.uniui-sound:before {
+ content: "\e684";
+}
+
+.uniui-trash-filled:before {
+ content: "\e685";
+}
+
+.uniui-sound-filled:before {
+ content: "\e686";
+}
+
+.uniui-trash:before {
+ content: "\e687";
+}
+
+.uniui-videocam-filled:before {
+ content: "\e689";
+}
+
+.uniui-spinner-cycle:before {
+ content: "\e68a";
+}
+
+.uniui-weibo:before {
+ content: "\e68b";
+}
+
+.uniui-videocam:before {
+ content: "\e68c";
+}
+
+.uniui-download:before {
+ content: "\e68d";
+}
+
+.uniui-help:before {
+ content: "\e679";
+}
+
+.uniui-navigate-filled:before {
+ content: "\e67a";
+}
+
+.uniui-plusempty:before {
+ content: "\e67b";
+}
+
+.uniui-smallcircle:before {
+ content: "\e67c";
+}
+
+.uniui-minus-filled:before {
+ content: "\e67d";
+}
+
+.uniui-micoff:before {
+ content: "\e67e";
+}
+
+.uniui-closeempty:before {
+ content: "\e66c";
+}
+
+.uniui-clear:before {
+ content: "\e66d";
+}
+
+.uniui-navigate:before {
+ content: "\e66e";
+}
+
+.uniui-minus:before {
+ content: "\e66f";
+}
+
+.uniui-image:before {
+ content: "\e670";
+}
+
+.uniui-mic:before {
+ content: "\e671";
+}
+
+.uniui-paperplane:before {
+ content: "\e672";
+}
+
+.uniui-close:before {
+ content: "\e673";
+}
+
+.uniui-help-filled:before {
+ content: "\e674";
+}
+
+.uniui-paperplane-filled:before {
+ content: "\e675";
+}
+
+.uniui-plus:before {
+ content: "\e676";
+}
+
+.uniui-mic-filled:before {
+ content: "\e677";
+}
+
+.uniui-image-filled:before {
+ content: "\e678";
+}
+
+.uniui-locked-filled:before {
+ content: "\e668";
+}
+
+.uniui-info:before {
+ content: "\e669";
+}
+
+.uniui-locked:before {
+ content: "\e66b";
+}
+
+.uniui-camera-filled:before {
+ content: "\e658";
+}
+
+.uniui-chat-filled:before {
+ content: "\e659";
+}
+
+.uniui-camera:before {
+ content: "\e65a";
+}
+
+.uniui-circle:before {
+ content: "\e65b";
+}
+
+.uniui-checkmarkempty:before {
+ content: "\e65c";
+}
+
+.uniui-chat:before {
+ content: "\e65d";
+}
+
+.uniui-circle-filled:before {
+ content: "\e65e";
+}
+
+.uniui-flag:before {
+ content: "\e65f";
+}
+
+.uniui-flag-filled:before {
+ content: "\e660";
+}
+
+.uniui-gear-filled:before {
+ content: "\e661";
+}
+
+.uniui-home:before {
+ content: "\e662";
+}
+
+.uniui-home-filled:before {
+ content: "\e663";
+}
+
+.uniui-gear:before {
+ content: "\e664";
+}
+
+.uniui-smallcircle-filled:before {
+ content: "\e665";
+}
+
+.uniui-map-filled:before {
+ content: "\e666";
+}
+
+.uniui-map:before {
+ content: "\e667";
+}
+
+.uniui-refresh-filled:before {
+ content: "\e656";
+}
+
+.uniui-refresh:before {
+ content: "\e657";
+}
+
+.uniui-cloud-upload:before {
+ content: "\e645";
+}
+
+.uniui-cloud-download-filled:before {
+ content: "\e646";
+}
+
+.uniui-cloud-download:before {
+ content: "\e647";
+}
+
+.uniui-cloud-upload-filled:before {
+ content: "\e648";
+}
+
+.uniui-redo:before {
+ content: "\e64a";
+}
+
+.uniui-images-filled:before {
+ content: "\e64b";
+}
+
+.uniui-undo-filled:before {
+ content: "\e64c";
+}
+
+.uniui-more:before {
+ content: "\e64d";
+}
+
+.uniui-more-filled:before {
+ content: "\e64e";
+}
+
+.uniui-undo:before {
+ content: "\e64f";
+}
+
+.uniui-images:before {
+ content: "\e650";
+}
+
+.uniui-paperclip:before {
+ content: "\e652";
+}
+
+.uniui-settings:before {
+ content: "\e653";
+}
+
+.uniui-search:before {
+ content: "\e654";
+}
+
+.uniui-redo-filled:before {
+ content: "\e655";
+}
+
+.uniui-list:before {
+ content: "\e644";
+}
+
+.uniui-mail-open-filled:before {
+ content: "\e63a";
+}
+
+.uniui-hand-down-filled:before {
+ content: "\e63c";
+}
+
+.uniui-hand-down:before {
+ content: "\e63d";
+}
+
+.uniui-hand-up-filled:before {
+ content: "\e63e";
+}
+
+.uniui-hand-up:before {
+ content: "\e63f";
+}
+
+.uniui-heart-filled:before {
+ content: "\e641";
+}
+
+.uniui-mail-open:before {
+ content: "\e643";
+}
+
+.uniui-heart:before {
+ content: "\e639";
+}
+
+.uniui-loop:before {
+ content: "\e633";
+}
+
+.uniui-pulldown:before {
+ content: "\e632";
+}
+
+.uniui-scan:before {
+ content: "\e62a";
+}
+
+.uniui-bars:before {
+ content: "\e627";
+}
+
+.uniui-checkbox:before {
+ content: "\e62b";
+}
+
+.uniui-checkbox-filled:before {
+ content: "\e62c";
+}
+
+.uniui-shop:before {
+ content: "\e62f";
+}
+
+.uniui-headphones:before {
+ content: "\e630";
+}
+
+.uniui-cart:before {
+ content: "\e631";
+}
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf
new file mode 100644
index 0000000..14696d0
Binary files /dev/null and b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf differ
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts b/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts
new file mode 100644
index 0000000..98e93aa
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts
@@ -0,0 +1,664 @@
+
+export type IconsData = {
+ id : string
+ name : string
+ font_family : string
+ css_prefix_text : string
+ description : string
+ glyphs : Array
+}
+
+export type IconsDataItem = {
+ font_class : string
+ unicode : string
+}
+
+
+export const fontData = [
+ {
+ "font_class": "arrow-down",
+ "unicode": "\ue6be"
+ },
+ {
+ "font_class": "arrow-left",
+ "unicode": "\ue6bc"
+ },
+ {
+ "font_class": "arrow-right",
+ "unicode": "\ue6bb"
+ },
+ {
+ "font_class": "arrow-up",
+ "unicode": "\ue6bd"
+ },
+ {
+ "font_class": "auth",
+ "unicode": "\ue6ab"
+ },
+ {
+ "font_class": "auth-filled",
+ "unicode": "\ue6cc"
+ },
+ {
+ "font_class": "back",
+ "unicode": "\ue6b9"
+ },
+ {
+ "font_class": "bars",
+ "unicode": "\ue627"
+ },
+ {
+ "font_class": "calendar",
+ "unicode": "\ue6a0"
+ },
+ {
+ "font_class": "calendar-filled",
+ "unicode": "\ue6c0"
+ },
+ {
+ "font_class": "camera",
+ "unicode": "\ue65a"
+ },
+ {
+ "font_class": "camera-filled",
+ "unicode": "\ue658"
+ },
+ {
+ "font_class": "cart",
+ "unicode": "\ue631"
+ },
+ {
+ "font_class": "cart-filled",
+ "unicode": "\ue6d0"
+ },
+ {
+ "font_class": "chat",
+ "unicode": "\ue65d"
+ },
+ {
+ "font_class": "chat-filled",
+ "unicode": "\ue659"
+ },
+ {
+ "font_class": "chatboxes",
+ "unicode": "\ue696"
+ },
+ {
+ "font_class": "chatboxes-filled",
+ "unicode": "\ue692"
+ },
+ {
+ "font_class": "chatbubble",
+ "unicode": "\ue697"
+ },
+ {
+ "font_class": "chatbubble-filled",
+ "unicode": "\ue694"
+ },
+ {
+ "font_class": "checkbox",
+ "unicode": "\ue62b"
+ },
+ {
+ "font_class": "checkbox-filled",
+ "unicode": "\ue62c"
+ },
+ {
+ "font_class": "checkmarkempty",
+ "unicode": "\ue65c"
+ },
+ {
+ "font_class": "circle",
+ "unicode": "\ue65b"
+ },
+ {
+ "font_class": "circle-filled",
+ "unicode": "\ue65e"
+ },
+ {
+ "font_class": "clear",
+ "unicode": "\ue66d"
+ },
+ {
+ "font_class": "close",
+ "unicode": "\ue673"
+ },
+ {
+ "font_class": "closeempty",
+ "unicode": "\ue66c"
+ },
+ {
+ "font_class": "cloud-download",
+ "unicode": "\ue647"
+ },
+ {
+ "font_class": "cloud-download-filled",
+ "unicode": "\ue646"
+ },
+ {
+ "font_class": "cloud-upload",
+ "unicode": "\ue645"
+ },
+ {
+ "font_class": "cloud-upload-filled",
+ "unicode": "\ue648"
+ },
+ {
+ "font_class": "color",
+ "unicode": "\ue6cf"
+ },
+ {
+ "font_class": "color-filled",
+ "unicode": "\ue6c9"
+ },
+ {
+ "font_class": "compose",
+ "unicode": "\ue67f"
+ },
+ {
+ "font_class": "contact",
+ "unicode": "\ue693"
+ },
+ {
+ "font_class": "contact-filled",
+ "unicode": "\ue695"
+ },
+ {
+ "font_class": "down",
+ "unicode": "\ue6b8"
+ },
+ {
+ "font_class": "bottom",
+ "unicode": "\ue6b8"
+ },
+ {
+ "font_class": "download",
+ "unicode": "\ue68d"
+ },
+ {
+ "font_class": "download-filled",
+ "unicode": "\ue681"
+ },
+ {
+ "font_class": "email",
+ "unicode": "\ue69e"
+ },
+ {
+ "font_class": "email-filled",
+ "unicode": "\ue69a"
+ },
+ {
+ "font_class": "eye",
+ "unicode": "\ue651"
+ },
+ {
+ "font_class": "eye-filled",
+ "unicode": "\ue66a"
+ },
+ {
+ "font_class": "eye-slash",
+ "unicode": "\ue6b3"
+ },
+ {
+ "font_class": "eye-slash-filled",
+ "unicode": "\ue6b4"
+ },
+ {
+ "font_class": "fire",
+ "unicode": "\ue6a1"
+ },
+ {
+ "font_class": "fire-filled",
+ "unicode": "\ue6c5"
+ },
+ {
+ "font_class": "flag",
+ "unicode": "\ue65f"
+ },
+ {
+ "font_class": "flag-filled",
+ "unicode": "\ue660"
+ },
+ {
+ "font_class": "folder-add",
+ "unicode": "\ue6a9"
+ },
+ {
+ "font_class": "folder-add-filled",
+ "unicode": "\ue6c8"
+ },
+ {
+ "font_class": "font",
+ "unicode": "\ue6a3"
+ },
+ {
+ "font_class": "forward",
+ "unicode": "\ue6ba"
+ },
+ {
+ "font_class": "gear",
+ "unicode": "\ue664"
+ },
+ {
+ "font_class": "gear-filled",
+ "unicode": "\ue661"
+ },
+ {
+ "font_class": "gift",
+ "unicode": "\ue6a4"
+ },
+ {
+ "font_class": "gift-filled",
+ "unicode": "\ue6c4"
+ },
+ {
+ "font_class": "hand-down",
+ "unicode": "\ue63d"
+ },
+ {
+ "font_class": "hand-down-filled",
+ "unicode": "\ue63c"
+ },
+ {
+ "font_class": "hand-up",
+ "unicode": "\ue63f"
+ },
+ {
+ "font_class": "hand-up-filled",
+ "unicode": "\ue63e"
+ },
+ {
+ "font_class": "headphones",
+ "unicode": "\ue630"
+ },
+ {
+ "font_class": "heart",
+ "unicode": "\ue639"
+ },
+ {
+ "font_class": "heart-filled",
+ "unicode": "\ue641"
+ },
+ {
+ "font_class": "help",
+ "unicode": "\ue679"
+ },
+ {
+ "font_class": "help-filled",
+ "unicode": "\ue674"
+ },
+ {
+ "font_class": "home",
+ "unicode": "\ue662"
+ },
+ {
+ "font_class": "home-filled",
+ "unicode": "\ue663"
+ },
+ {
+ "font_class": "image",
+ "unicode": "\ue670"
+ },
+ {
+ "font_class": "image-filled",
+ "unicode": "\ue678"
+ },
+ {
+ "font_class": "images",
+ "unicode": "\ue650"
+ },
+ {
+ "font_class": "images-filled",
+ "unicode": "\ue64b"
+ },
+ {
+ "font_class": "info",
+ "unicode": "\ue669"
+ },
+ {
+ "font_class": "info-filled",
+ "unicode": "\ue649"
+ },
+ {
+ "font_class": "left",
+ "unicode": "\ue6b7"
+ },
+ {
+ "font_class": "link",
+ "unicode": "\ue6a5"
+ },
+ {
+ "font_class": "list",
+ "unicode": "\ue644"
+ },
+ {
+ "font_class": "location",
+ "unicode": "\ue6ae"
+ },
+ {
+ "font_class": "location-filled",
+ "unicode": "\ue6af"
+ },
+ {
+ "font_class": "locked",
+ "unicode": "\ue66b"
+ },
+ {
+ "font_class": "locked-filled",
+ "unicode": "\ue668"
+ },
+ {
+ "font_class": "loop",
+ "unicode": "\ue633"
+ },
+ {
+ "font_class": "mail-open",
+ "unicode": "\ue643"
+ },
+ {
+ "font_class": "mail-open-filled",
+ "unicode": "\ue63a"
+ },
+ {
+ "font_class": "map",
+ "unicode": "\ue667"
+ },
+ {
+ "font_class": "map-filled",
+ "unicode": "\ue666"
+ },
+ {
+ "font_class": "map-pin",
+ "unicode": "\ue6ad"
+ },
+ {
+ "font_class": "map-pin-ellipse",
+ "unicode": "\ue6ac"
+ },
+ {
+ "font_class": "medal",
+ "unicode": "\ue6a2"
+ },
+ {
+ "font_class": "medal-filled",
+ "unicode": "\ue6c3"
+ },
+ {
+ "font_class": "mic",
+ "unicode": "\ue671"
+ },
+ {
+ "font_class": "mic-filled",
+ "unicode": "\ue677"
+ },
+ {
+ "font_class": "micoff",
+ "unicode": "\ue67e"
+ },
+ {
+ "font_class": "micoff-filled",
+ "unicode": "\ue6b0"
+ },
+ {
+ "font_class": "minus",
+ "unicode": "\ue66f"
+ },
+ {
+ "font_class": "minus-filled",
+ "unicode": "\ue67d"
+ },
+ {
+ "font_class": "more",
+ "unicode": "\ue64d"
+ },
+ {
+ "font_class": "more-filled",
+ "unicode": "\ue64e"
+ },
+ {
+ "font_class": "navigate",
+ "unicode": "\ue66e"
+ },
+ {
+ "font_class": "navigate-filled",
+ "unicode": "\ue67a"
+ },
+ {
+ "font_class": "notification",
+ "unicode": "\ue6a6"
+ },
+ {
+ "font_class": "notification-filled",
+ "unicode": "\ue6c1"
+ },
+ {
+ "font_class": "paperclip",
+ "unicode": "\ue652"
+ },
+ {
+ "font_class": "paperplane",
+ "unicode": "\ue672"
+ },
+ {
+ "font_class": "paperplane-filled",
+ "unicode": "\ue675"
+ },
+ {
+ "font_class": "person",
+ "unicode": "\ue699"
+ },
+ {
+ "font_class": "person-filled",
+ "unicode": "\ue69d"
+ },
+ {
+ "font_class": "personadd",
+ "unicode": "\ue69f"
+ },
+ {
+ "font_class": "personadd-filled",
+ "unicode": "\ue698"
+ },
+ {
+ "font_class": "personadd-filled-copy",
+ "unicode": "\ue6d1"
+ },
+ {
+ "font_class": "phone",
+ "unicode": "\ue69c"
+ },
+ {
+ "font_class": "phone-filled",
+ "unicode": "\ue69b"
+ },
+ {
+ "font_class": "plus",
+ "unicode": "\ue676"
+ },
+ {
+ "font_class": "plus-filled",
+ "unicode": "\ue6c7"
+ },
+ {
+ "font_class": "plusempty",
+ "unicode": "\ue67b"
+ },
+ {
+ "font_class": "pulldown",
+ "unicode": "\ue632"
+ },
+ {
+ "font_class": "pyq",
+ "unicode": "\ue682"
+ },
+ {
+ "font_class": "qq",
+ "unicode": "\ue680"
+ },
+ {
+ "font_class": "redo",
+ "unicode": "\ue64a"
+ },
+ {
+ "font_class": "redo-filled",
+ "unicode": "\ue655"
+ },
+ {
+ "font_class": "refresh",
+ "unicode": "\ue657"
+ },
+ {
+ "font_class": "refresh-filled",
+ "unicode": "\ue656"
+ },
+ {
+ "font_class": "refreshempty",
+ "unicode": "\ue6bf"
+ },
+ {
+ "font_class": "reload",
+ "unicode": "\ue6b2"
+ },
+ {
+ "font_class": "right",
+ "unicode": "\ue6b5"
+ },
+ {
+ "font_class": "scan",
+ "unicode": "\ue62a"
+ },
+ {
+ "font_class": "search",
+ "unicode": "\ue654"
+ },
+ {
+ "font_class": "settings",
+ "unicode": "\ue653"
+ },
+ {
+ "font_class": "settings-filled",
+ "unicode": "\ue6ce"
+ },
+ {
+ "font_class": "shop",
+ "unicode": "\ue62f"
+ },
+ {
+ "font_class": "shop-filled",
+ "unicode": "\ue6cd"
+ },
+ {
+ "font_class": "smallcircle",
+ "unicode": "\ue67c"
+ },
+ {
+ "font_class": "smallcircle-filled",
+ "unicode": "\ue665"
+ },
+ {
+ "font_class": "sound",
+ "unicode": "\ue684"
+ },
+ {
+ "font_class": "sound-filled",
+ "unicode": "\ue686"
+ },
+ {
+ "font_class": "spinner-cycle",
+ "unicode": "\ue68a"
+ },
+ {
+ "font_class": "staff",
+ "unicode": "\ue6a7"
+ },
+ {
+ "font_class": "staff-filled",
+ "unicode": "\ue6cb"
+ },
+ {
+ "font_class": "star",
+ "unicode": "\ue688"
+ },
+ {
+ "font_class": "star-filled",
+ "unicode": "\ue68f"
+ },
+ {
+ "font_class": "starhalf",
+ "unicode": "\ue683"
+ },
+ {
+ "font_class": "trash",
+ "unicode": "\ue687"
+ },
+ {
+ "font_class": "trash-filled",
+ "unicode": "\ue685"
+ },
+ {
+ "font_class": "tune",
+ "unicode": "\ue6aa"
+ },
+ {
+ "font_class": "tune-filled",
+ "unicode": "\ue6ca"
+ },
+ {
+ "font_class": "undo",
+ "unicode": "\ue64f"
+ },
+ {
+ "font_class": "undo-filled",
+ "unicode": "\ue64c"
+ },
+ {
+ "font_class": "up",
+ "unicode": "\ue6b6"
+ },
+ {
+ "font_class": "top",
+ "unicode": "\ue6b6"
+ },
+ {
+ "font_class": "upload",
+ "unicode": "\ue690"
+ },
+ {
+ "font_class": "upload-filled",
+ "unicode": "\ue68e"
+ },
+ {
+ "font_class": "videocam",
+ "unicode": "\ue68c"
+ },
+ {
+ "font_class": "videocam-filled",
+ "unicode": "\ue689"
+ },
+ {
+ "font_class": "vip",
+ "unicode": "\ue6a8"
+ },
+ {
+ "font_class": "vip-filled",
+ "unicode": "\ue6c6"
+ },
+ {
+ "font_class": "wallet",
+ "unicode": "\ue6b1"
+ },
+ {
+ "font_class": "wallet-filled",
+ "unicode": "\ue6c2"
+ },
+ {
+ "font_class": "weibo",
+ "unicode": "\ue68b"
+ },
+ {
+ "font_class": "weixin",
+ "unicode": "\ue691"
+ }
+] as IconsDataItem[]
+
+// export const fontData = JSON.parse(fontDataJson)
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js b/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
new file mode 100644
index 0000000..1cd11e1
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
@@ -0,0 +1,649 @@
+
+export const fontData = [
+ {
+ "font_class": "arrow-down",
+ "unicode": "\ue6be"
+ },
+ {
+ "font_class": "arrow-left",
+ "unicode": "\ue6bc"
+ },
+ {
+ "font_class": "arrow-right",
+ "unicode": "\ue6bb"
+ },
+ {
+ "font_class": "arrow-up",
+ "unicode": "\ue6bd"
+ },
+ {
+ "font_class": "auth",
+ "unicode": "\ue6ab"
+ },
+ {
+ "font_class": "auth-filled",
+ "unicode": "\ue6cc"
+ },
+ {
+ "font_class": "back",
+ "unicode": "\ue6b9"
+ },
+ {
+ "font_class": "bars",
+ "unicode": "\ue627"
+ },
+ {
+ "font_class": "calendar",
+ "unicode": "\ue6a0"
+ },
+ {
+ "font_class": "calendar-filled",
+ "unicode": "\ue6c0"
+ },
+ {
+ "font_class": "camera",
+ "unicode": "\ue65a"
+ },
+ {
+ "font_class": "camera-filled",
+ "unicode": "\ue658"
+ },
+ {
+ "font_class": "cart",
+ "unicode": "\ue631"
+ },
+ {
+ "font_class": "cart-filled",
+ "unicode": "\ue6d0"
+ },
+ {
+ "font_class": "chat",
+ "unicode": "\ue65d"
+ },
+ {
+ "font_class": "chat-filled",
+ "unicode": "\ue659"
+ },
+ {
+ "font_class": "chatboxes",
+ "unicode": "\ue696"
+ },
+ {
+ "font_class": "chatboxes-filled",
+ "unicode": "\ue692"
+ },
+ {
+ "font_class": "chatbubble",
+ "unicode": "\ue697"
+ },
+ {
+ "font_class": "chatbubble-filled",
+ "unicode": "\ue694"
+ },
+ {
+ "font_class": "checkbox",
+ "unicode": "\ue62b"
+ },
+ {
+ "font_class": "checkbox-filled",
+ "unicode": "\ue62c"
+ },
+ {
+ "font_class": "checkmarkempty",
+ "unicode": "\ue65c"
+ },
+ {
+ "font_class": "circle",
+ "unicode": "\ue65b"
+ },
+ {
+ "font_class": "circle-filled",
+ "unicode": "\ue65e"
+ },
+ {
+ "font_class": "clear",
+ "unicode": "\ue66d"
+ },
+ {
+ "font_class": "close",
+ "unicode": "\ue673"
+ },
+ {
+ "font_class": "closeempty",
+ "unicode": "\ue66c"
+ },
+ {
+ "font_class": "cloud-download",
+ "unicode": "\ue647"
+ },
+ {
+ "font_class": "cloud-download-filled",
+ "unicode": "\ue646"
+ },
+ {
+ "font_class": "cloud-upload",
+ "unicode": "\ue645"
+ },
+ {
+ "font_class": "cloud-upload-filled",
+ "unicode": "\ue648"
+ },
+ {
+ "font_class": "color",
+ "unicode": "\ue6cf"
+ },
+ {
+ "font_class": "color-filled",
+ "unicode": "\ue6c9"
+ },
+ {
+ "font_class": "compose",
+ "unicode": "\ue67f"
+ },
+ {
+ "font_class": "contact",
+ "unicode": "\ue693"
+ },
+ {
+ "font_class": "contact-filled",
+ "unicode": "\ue695"
+ },
+ {
+ "font_class": "down",
+ "unicode": "\ue6b8"
+ },
+ {
+ "font_class": "bottom",
+ "unicode": "\ue6b8"
+ },
+ {
+ "font_class": "download",
+ "unicode": "\ue68d"
+ },
+ {
+ "font_class": "download-filled",
+ "unicode": "\ue681"
+ },
+ {
+ "font_class": "email",
+ "unicode": "\ue69e"
+ },
+ {
+ "font_class": "email-filled",
+ "unicode": "\ue69a"
+ },
+ {
+ "font_class": "eye",
+ "unicode": "\ue651"
+ },
+ {
+ "font_class": "eye-filled",
+ "unicode": "\ue66a"
+ },
+ {
+ "font_class": "eye-slash",
+ "unicode": "\ue6b3"
+ },
+ {
+ "font_class": "eye-slash-filled",
+ "unicode": "\ue6b4"
+ },
+ {
+ "font_class": "fire",
+ "unicode": "\ue6a1"
+ },
+ {
+ "font_class": "fire-filled",
+ "unicode": "\ue6c5"
+ },
+ {
+ "font_class": "flag",
+ "unicode": "\ue65f"
+ },
+ {
+ "font_class": "flag-filled",
+ "unicode": "\ue660"
+ },
+ {
+ "font_class": "folder-add",
+ "unicode": "\ue6a9"
+ },
+ {
+ "font_class": "folder-add-filled",
+ "unicode": "\ue6c8"
+ },
+ {
+ "font_class": "font",
+ "unicode": "\ue6a3"
+ },
+ {
+ "font_class": "forward",
+ "unicode": "\ue6ba"
+ },
+ {
+ "font_class": "gear",
+ "unicode": "\ue664"
+ },
+ {
+ "font_class": "gear-filled",
+ "unicode": "\ue661"
+ },
+ {
+ "font_class": "gift",
+ "unicode": "\ue6a4"
+ },
+ {
+ "font_class": "gift-filled",
+ "unicode": "\ue6c4"
+ },
+ {
+ "font_class": "hand-down",
+ "unicode": "\ue63d"
+ },
+ {
+ "font_class": "hand-down-filled",
+ "unicode": "\ue63c"
+ },
+ {
+ "font_class": "hand-up",
+ "unicode": "\ue63f"
+ },
+ {
+ "font_class": "hand-up-filled",
+ "unicode": "\ue63e"
+ },
+ {
+ "font_class": "headphones",
+ "unicode": "\ue630"
+ },
+ {
+ "font_class": "heart",
+ "unicode": "\ue639"
+ },
+ {
+ "font_class": "heart-filled",
+ "unicode": "\ue641"
+ },
+ {
+ "font_class": "help",
+ "unicode": "\ue679"
+ },
+ {
+ "font_class": "help-filled",
+ "unicode": "\ue674"
+ },
+ {
+ "font_class": "home",
+ "unicode": "\ue662"
+ },
+ {
+ "font_class": "home-filled",
+ "unicode": "\ue663"
+ },
+ {
+ "font_class": "image",
+ "unicode": "\ue670"
+ },
+ {
+ "font_class": "image-filled",
+ "unicode": "\ue678"
+ },
+ {
+ "font_class": "images",
+ "unicode": "\ue650"
+ },
+ {
+ "font_class": "images-filled",
+ "unicode": "\ue64b"
+ },
+ {
+ "font_class": "info",
+ "unicode": "\ue669"
+ },
+ {
+ "font_class": "info-filled",
+ "unicode": "\ue649"
+ },
+ {
+ "font_class": "left",
+ "unicode": "\ue6b7"
+ },
+ {
+ "font_class": "link",
+ "unicode": "\ue6a5"
+ },
+ {
+ "font_class": "list",
+ "unicode": "\ue644"
+ },
+ {
+ "font_class": "location",
+ "unicode": "\ue6ae"
+ },
+ {
+ "font_class": "location-filled",
+ "unicode": "\ue6af"
+ },
+ {
+ "font_class": "locked",
+ "unicode": "\ue66b"
+ },
+ {
+ "font_class": "locked-filled",
+ "unicode": "\ue668"
+ },
+ {
+ "font_class": "loop",
+ "unicode": "\ue633"
+ },
+ {
+ "font_class": "mail-open",
+ "unicode": "\ue643"
+ },
+ {
+ "font_class": "mail-open-filled",
+ "unicode": "\ue63a"
+ },
+ {
+ "font_class": "map",
+ "unicode": "\ue667"
+ },
+ {
+ "font_class": "map-filled",
+ "unicode": "\ue666"
+ },
+ {
+ "font_class": "map-pin",
+ "unicode": "\ue6ad"
+ },
+ {
+ "font_class": "map-pin-ellipse",
+ "unicode": "\ue6ac"
+ },
+ {
+ "font_class": "medal",
+ "unicode": "\ue6a2"
+ },
+ {
+ "font_class": "medal-filled",
+ "unicode": "\ue6c3"
+ },
+ {
+ "font_class": "mic",
+ "unicode": "\ue671"
+ },
+ {
+ "font_class": "mic-filled",
+ "unicode": "\ue677"
+ },
+ {
+ "font_class": "micoff",
+ "unicode": "\ue67e"
+ },
+ {
+ "font_class": "micoff-filled",
+ "unicode": "\ue6b0"
+ },
+ {
+ "font_class": "minus",
+ "unicode": "\ue66f"
+ },
+ {
+ "font_class": "minus-filled",
+ "unicode": "\ue67d"
+ },
+ {
+ "font_class": "more",
+ "unicode": "\ue64d"
+ },
+ {
+ "font_class": "more-filled",
+ "unicode": "\ue64e"
+ },
+ {
+ "font_class": "navigate",
+ "unicode": "\ue66e"
+ },
+ {
+ "font_class": "navigate-filled",
+ "unicode": "\ue67a"
+ },
+ {
+ "font_class": "notification",
+ "unicode": "\ue6a6"
+ },
+ {
+ "font_class": "notification-filled",
+ "unicode": "\ue6c1"
+ },
+ {
+ "font_class": "paperclip",
+ "unicode": "\ue652"
+ },
+ {
+ "font_class": "paperplane",
+ "unicode": "\ue672"
+ },
+ {
+ "font_class": "paperplane-filled",
+ "unicode": "\ue675"
+ },
+ {
+ "font_class": "person",
+ "unicode": "\ue699"
+ },
+ {
+ "font_class": "person-filled",
+ "unicode": "\ue69d"
+ },
+ {
+ "font_class": "personadd",
+ "unicode": "\ue69f"
+ },
+ {
+ "font_class": "personadd-filled",
+ "unicode": "\ue698"
+ },
+ {
+ "font_class": "personadd-filled-copy",
+ "unicode": "\ue6d1"
+ },
+ {
+ "font_class": "phone",
+ "unicode": "\ue69c"
+ },
+ {
+ "font_class": "phone-filled",
+ "unicode": "\ue69b"
+ },
+ {
+ "font_class": "plus",
+ "unicode": "\ue676"
+ },
+ {
+ "font_class": "plus-filled",
+ "unicode": "\ue6c7"
+ },
+ {
+ "font_class": "plusempty",
+ "unicode": "\ue67b"
+ },
+ {
+ "font_class": "pulldown",
+ "unicode": "\ue632"
+ },
+ {
+ "font_class": "pyq",
+ "unicode": "\ue682"
+ },
+ {
+ "font_class": "qq",
+ "unicode": "\ue680"
+ },
+ {
+ "font_class": "redo",
+ "unicode": "\ue64a"
+ },
+ {
+ "font_class": "redo-filled",
+ "unicode": "\ue655"
+ },
+ {
+ "font_class": "refresh",
+ "unicode": "\ue657"
+ },
+ {
+ "font_class": "refresh-filled",
+ "unicode": "\ue656"
+ },
+ {
+ "font_class": "refreshempty",
+ "unicode": "\ue6bf"
+ },
+ {
+ "font_class": "reload",
+ "unicode": "\ue6b2"
+ },
+ {
+ "font_class": "right",
+ "unicode": "\ue6b5"
+ },
+ {
+ "font_class": "scan",
+ "unicode": "\ue62a"
+ },
+ {
+ "font_class": "search",
+ "unicode": "\ue654"
+ },
+ {
+ "font_class": "settings",
+ "unicode": "\ue653"
+ },
+ {
+ "font_class": "settings-filled",
+ "unicode": "\ue6ce"
+ },
+ {
+ "font_class": "shop",
+ "unicode": "\ue62f"
+ },
+ {
+ "font_class": "shop-filled",
+ "unicode": "\ue6cd"
+ },
+ {
+ "font_class": "smallcircle",
+ "unicode": "\ue67c"
+ },
+ {
+ "font_class": "smallcircle-filled",
+ "unicode": "\ue665"
+ },
+ {
+ "font_class": "sound",
+ "unicode": "\ue684"
+ },
+ {
+ "font_class": "sound-filled",
+ "unicode": "\ue686"
+ },
+ {
+ "font_class": "spinner-cycle",
+ "unicode": "\ue68a"
+ },
+ {
+ "font_class": "staff",
+ "unicode": "\ue6a7"
+ },
+ {
+ "font_class": "staff-filled",
+ "unicode": "\ue6cb"
+ },
+ {
+ "font_class": "star",
+ "unicode": "\ue688"
+ },
+ {
+ "font_class": "star-filled",
+ "unicode": "\ue68f"
+ },
+ {
+ "font_class": "starhalf",
+ "unicode": "\ue683"
+ },
+ {
+ "font_class": "trash",
+ "unicode": "\ue687"
+ },
+ {
+ "font_class": "trash-filled",
+ "unicode": "\ue685"
+ },
+ {
+ "font_class": "tune",
+ "unicode": "\ue6aa"
+ },
+ {
+ "font_class": "tune-filled",
+ "unicode": "\ue6ca"
+ },
+ {
+ "font_class": "undo",
+ "unicode": "\ue64f"
+ },
+ {
+ "font_class": "undo-filled",
+ "unicode": "\ue64c"
+ },
+ {
+ "font_class": "up",
+ "unicode": "\ue6b6"
+ },
+ {
+ "font_class": "top",
+ "unicode": "\ue6b6"
+ },
+ {
+ "font_class": "upload",
+ "unicode": "\ue690"
+ },
+ {
+ "font_class": "upload-filled",
+ "unicode": "\ue68e"
+ },
+ {
+ "font_class": "videocam",
+ "unicode": "\ue68c"
+ },
+ {
+ "font_class": "videocam-filled",
+ "unicode": "\ue689"
+ },
+ {
+ "font_class": "vip",
+ "unicode": "\ue6a8"
+ },
+ {
+ "font_class": "vip-filled",
+ "unicode": "\ue6c6"
+ },
+ {
+ "font_class": "wallet",
+ "unicode": "\ue6b1"
+ },
+ {
+ "font_class": "wallet-filled",
+ "unicode": "\ue6c2"
+ },
+ {
+ "font_class": "weibo",
+ "unicode": "\ue68b"
+ },
+ {
+ "font_class": "weixin",
+ "unicode": "\ue691"
+ }
+]
+
+// export const fontData = JSON.parse(fontDataJson)
diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json
new file mode 100644
index 0000000..6b681b4
--- /dev/null
+++ b/uni_modules/uni-icons/package.json
@@ -0,0 +1,89 @@
+{
+ "id": "uni-icons",
+ "displayName": "uni-icons 图标",
+ "version": "2.0.10",
+ "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "icon",
+ "图标"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.2.14"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y",
+ "app-uvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "y",
+ "快手": "y",
+ "飞书": "y",
+ "京东": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md
new file mode 100644
index 0000000..86234ba
--- /dev/null
+++ b/uni_modules/uni-icons/readme.md
@@ -0,0 +1,8 @@
+## Icons 图标
+> **组件名:uni-icons**
+> 代码块: `uIcons`
+
+用于展示 icons 图标 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md
new file mode 100644
index 0000000..667abdb
--- /dev/null
+++ b/uni_modules/uni-load-more/changelog.md
@@ -0,0 +1,25 @@
+## 1.3.6(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.5(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.4(2024-10-12)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
new file mode 100644
index 0000000..a4f14a5
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "Pull up to show more",
+ "uni-load-more.contentrefresh": "loading...",
+ "uni-load-more.contentnomore": "No more data"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
new file mode 100644
index 0000000..f15d510
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉显示更多",
+ "uni-load-more.contentrefresh": "正在加载...",
+ "uni-load-more.contentnomore": "没有更多数据了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
new file mode 100644
index 0000000..a255c6d
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉顯示更多",
+ "uni-load-more.contentrefresh": "正在加載...",
+ "uni-load-more.contentnomore": "沒有更多數據了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
new file mode 100644
index 0000000..a203417
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ status === 'more' ? contentdownText : status === 'loading' ? contentrefreshText : contentnomoreText }}
+
+
+
+
+
+
diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json
new file mode 100644
index 0000000..cf44bff
--- /dev/null
+++ b/uni_modules/uni-load-more/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "uni-load-more",
+ "displayName": "uni-load-more 加载更多",
+ "version": "1.3.6",
+ "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "加载更多",
+ "load-more"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md
new file mode 100644
index 0000000..54dc1fa
--- /dev/null
+++ b/uni_modules/uni-load-more/readme.md
@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md
new file mode 100644
index 0000000..20b1e8c
--- /dev/null
+++ b/uni_modules/uni-popup/changelog.md
@@ -0,0 +1,100 @@
+## 1.9.10(2025-07-18)
+- 修复 nvue 下弹窗样式错乱的问题 ,更新依赖 uni-transition 组件
+- 更新 示例取消 borderRadius 属性 ,如需内容圆角,用户应该直接在内容插槽中实现
+## 1.9.9(2025-06-11)
+- 修复 uni-popup-dialog 中 setVal 方法报错的问题
+- 修复 uni-popup-dialog 数据双向绑定问题。
+## 1.9.8(2025-04-16)
+- 修复 更新组件示例 ,解决更新数据或保存项目导致弹窗消失的问题
+## 1.9.7(2025-04-14)
+- 修复 uni-popup-dialog 弹出框在vue3中双向绑定问题
+## 1.9.6(2025-01-08)
+- 修复 示例中过期图片地址
+## 1.9.5(2024-10-15)
+- 修复 微信小程序中的getSystemInfo警告
+## 1.9.2(2024-09-21)
+- 修复 uni-popup在android上的重复点击弹出位置不正确的bug
+## 1.9.1(2024-04-02)
+- 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
+## 1.9.0(2024-03-28)
+- 修复 uni-popup-dialog 双向绑定时初始化逻辑修正
+## 1.8.9(2024-03-20)
+- 修复 uni-popup-dialog 数据输入时修正为双向绑定
+## 1.8.8(2024-02-20)
+- 修复 uni-popup 在微信小程序下出现文字向上闪动的bug
+## 1.8.7(2024-02-02)
+- 新增 uni-popup-dialog 新增属性focus:input模式下,是否自动自动聚焦
+## 1.8.6(2024-01-30)
+- 新增 uni-popup-dialog 新增属性maxLength:限制输入框字数
+## 1.8.5(2024-01-26)
+- 新增 uni-popup-dialog 新增属性showClose:控制关闭按钮的显示
+## 1.8.4(2023-11-15)
+- 新增 uni-popup 支持uni-app-x 注意暂时仅支持 `maskClick` `@open` `@close`
+## 1.8.3(2023-04-17)
+- 修复 uni-popup 重复打开时的 bug
+## 1.8.2(2023-02-02)
+- uni-popup-dialog 组件新增 inputType 属性
+## 1.8.1(2022-12-01)
+- 修复 nvue 下 v-show 报错
+## 1.8.0(2022-11-29)
+- 优化 主题样式
+## 1.7.9(2022-04-02)
+- 修复 弹出层内部无法滚动的bug
+## 1.7.8(2022-03-28)
+- 修复 小程序中高度错误的bug
+## 1.7.7(2022-03-17)
+- 修复 快速调用open出现问题的Bug
+## 1.7.6(2022-02-14)
+- 修复 safeArea 属性不能设置为false的bug
+## 1.7.5(2022-01-19)
+- 修复 isMaskClick 失效的bug
+## 1.7.4(2022-01-19)
+- 新增 cancelText \ confirmText 属性 ,可自定义文本
+- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
+- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
+## 1.7.3(2022-01-13)
+- 修复 设置 safeArea 属性不生效的bug
+## 1.7.2(2021-11-26)
+- 优化 组件示例
+## 1.7.1(2021-11-26)
+- 修复 vuedoc 文字错误
+## 1.7.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
+## 1.6.2(2021-08-24)
+- 新增 支持国际化
+## 1.6.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.6.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.5.0(2021-06-23)
+- 新增 mask-click 遮罩层点击事件
+## 1.4.5(2021-06-22)
+- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.4(2021-06-18)
+- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.3(2021-06-08)
+- 修复 错误的 watch 字段
+- 修复 safeArea 属性不生效的问题
+- 修复 点击内容,再点击遮罩无法关闭的Bug
+## 1.4.2(2021-05-12)
+- 新增 组件示例地址
+## 1.4.1(2021-04-29)
+- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
+## 1.4.0 (2021-04-29)
+- 新增 type 属性的 left\right 值,支持左右弹出
+- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
+- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
+- 新增 safeArea 属性,是否适配底部安全区
+- 修复 App\h5\微信小程序底部安全区占位不对的Bug
+- 修复 App 端弹出等待的Bug
+- 优化 提升低配设备性能,优化动画卡顿问题
+- 优化 更简单的组件自定义方式
+## 1.2.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.2.8(2021-02-05)
+- 调整为uni_modules目录规范
+## 1.2.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 PC 端
+- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
new file mode 100644
index 0000000..6ef26a2
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ this.$once('hook:beforeDestroy', () => {
+ document.removeEventListener('keyup', listener)
+ })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
new file mode 100644
index 0000000..12ce2c9
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
new file mode 100644
index 0000000..91370a8
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
new file mode 100644
index 0000000..c8945d5
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
new file mode 100644
index 0000000..7f1bd06
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "cancel",
+ "uni-popup.ok": "ok",
+ "uni-popup.placeholder": "pleace enter",
+ "uni-popup.title": "Hint",
+ "uni-popup.shareTitle": "Share to"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
new file mode 100644
index 0000000..5e3003c
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "确定",
+ "uni-popup.placeholder": "请输入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
new file mode 100644
index 0000000..13e39eb
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "確定",
+ "uni-popup.placeholder": "請輸入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js
new file mode 100644
index 0000000..62dda46
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ // this.$once('hook:beforeDestroy', () => {
+ // document.removeEventListener('keyup', listener)
+ // })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js
new file mode 100644
index 0000000..c4e5781
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/popup.js
@@ -0,0 +1,26 @@
+
+export default {
+ data() {
+ return {
+
+ }
+ },
+ created(){
+ this.popup = this.getParent()
+ },
+ methods:{
+ /**
+ * 获取父元素实例
+ */
+ getParent(name = 'uniPopup') {
+ let parent = this.$parent;
+ let parentName = parent.$options.name;
+ while (parentName !== name) {
+ parent = parent.$parent;
+ if (!parent) return false
+ parentName = parent.$options.name;
+ }
+ return parent;
+ },
+ }
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue b/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
new file mode 100644
index 0000000..5eb8d5b
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
new file mode 100644
index 0000000..657e781
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
@@ -0,0 +1,518 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json
new file mode 100644
index 0000000..ae01918
--- /dev/null
+++ b/uni_modules/uni-popup/package.json
@@ -0,0 +1,107 @@
+{
+ "id": "uni-popup",
+ "displayName": "uni-popup 弹出层",
+ "version": "1.9.10",
+ "description": " Popup 组件,提供常用的弹层",
+ "keywords": [
+ "uni-ui",
+ "弹出层",
+ "弹窗",
+ "popup",
+ "弹框"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "",
+ "uni-app": "^4.06",
+ "uni-app-x": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue",
+ "darkmode": "x",
+ "i18n": "x",
+ "widescreen": "x"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-transition"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "x",
+ "aliyun": "x",
+ "alipay": "x"
+ },
+ "client": {
+ "uni-app": {
+ "vue": {
+ "vue2": "√",
+ "vue3": "√"
+ },
+ "web": {
+ "safari": "√",
+ "chrome": "√"
+ },
+ "app": {
+ "vue": "√",
+ "nvue": "√",
+ "android": "√",
+ "ios": "√",
+ "harmony": "√"
+ },
+ "mp": {
+ "weixin": "√",
+ "alipay": "√",
+ "toutiao": "√",
+ "baidu": "√",
+ "kuaishou": "-",
+ "jd": "-",
+ "harmony": "-",
+ "qq": "√",
+ "lark": "-"
+ },
+ "quickapp": {
+ "huawei": "-",
+ "union": "-"
+ }
+ },
+ "uni-app-x": {
+ "web": {
+ "safari": "√",
+ "chrome": "√"
+ },
+ "app": {
+ "android": "√",
+ "ios": "√",
+ "harmony": "√"
+ },
+ "mp": {
+ "weixin": "√"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md
new file mode 100644
index 0000000..fdad4b3
--- /dev/null
+++ b/uni_modules/uni-popup/readme.md
@@ -0,0 +1,17 @@
+
+
+## Popup 弹出层
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-transition`
+
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
+
+
+
diff --git a/uni_modules/uni-rate/changelog.md b/uni_modules/uni-rate/changelog.md
new file mode 100644
index 0000000..8a98a61
--- /dev/null
+++ b/uni_modules/uni-rate/changelog.md
@@ -0,0 +1,25 @@
+## 1.3.1(2022-02-25)
+- 修复 条件判断 `NaN` 错误的 bug
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-rate](https://uniapp.dcloud.io/component/uniui/uni-rate)
+## 1.2.2(2021-09-10)
+- 优化 默认值修改为 0 颗星
+## 1.2.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.2(2021-05-12)
+- 新增 组件示例地址
+## 1.1.1(2021-04-21)
+- 修复 布局变化后 uni-rate 星星计算不准确的 bug
+- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖
+## 1.1.0(2021-04-16)
+- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug
+
+## 1.0.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+
+## 1.0.8(2021-02-05)
+- 调整为uni_modules目录规范
+- 支持 pc 端
diff --git a/uni_modules/uni-rate/components/uni-rate/uni-rate.vue b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue
new file mode 100644
index 0000000..857f5f9
--- /dev/null
+++ b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-rate/package.json b/uni_modules/uni-rate/package.json
new file mode 100644
index 0000000..64e8e33
--- /dev/null
+++ b/uni_modules/uni-rate/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-rate",
+ "displayName": "uni-rate 评分",
+ "version": "1.3.1",
+ "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "评分"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-rate/readme.md b/uni_modules/uni-rate/readme.md
new file mode 100644
index 0000000..eae7b5c
--- /dev/null
+++ b/uni_modules/uni-rate/readme.md
@@ -0,0 +1,12 @@
+
+
+## Rate 评分
+> **组件名:uni-rate**
+> 代码块: `uRate`
+> 关联组件:`uni-icons`
+
+
+评分组件,多用于购买商品后,对商品进行评价等场景
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md
new file mode 100644
index 0000000..b863bb0
--- /dev/null
+++ b/uni_modules/uni-scss/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
+## 1.0.2(2021-11-22)
+- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
+## 1.0.1(2021-11-22)
+- 修复 vue3中scss语法兼容问题
+## 1.0.0(2021-11-18)
+- init
diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss
new file mode 100644
index 0000000..1744a5f
--- /dev/null
+++ b/uni_modules/uni-scss/index.scss
@@ -0,0 +1 @@
+@import './styles/index.scss';
diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json
new file mode 100644
index 0000000..7cc0ccb
--- /dev/null
+++ b/uni_modules/uni-scss/package.json
@@ -0,0 +1,82 @@
+{
+ "id": "uni-scss",
+ "displayName": "uni-scss 辅助样式",
+ "version": "1.0.3",
+ "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
+ "keywords": [
+ "uni-scss",
+ "uni-ui",
+ "辅助样式"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "category": [
+ "JS SDK",
+ "通用 SDK"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "n",
+ "联盟": "n"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md
new file mode 100644
index 0000000..b7d1c25
--- /dev/null
+++ b/uni_modules/uni-scss/readme.md
@@ -0,0 +1,4 @@
+`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss
new file mode 100644
index 0000000..ffac4fe
--- /dev/null
+++ b/uni_modules/uni-scss/styles/index.scss
@@ -0,0 +1,7 @@
+@import './setting/_variables.scss';
+@import './setting/_border.scss';
+@import './setting/_color.scss';
+@import './setting/_space.scss';
+@import './setting/_radius.scss';
+@import './setting/_text.scss';
+@import './setting/_styles.scss';
diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss
new file mode 100644
index 0000000..12a11c3
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_border.scss
@@ -0,0 +1,3 @@
+.uni-border {
+ border: 1px $uni-border-1 solid;
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss
new file mode 100644
index 0000000..1ededd9
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_color.scss
@@ -0,0 +1,66 @@
+
+// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐
+// @mixin get-styles($k,$c) {
+// @if $k == size or $k == weight{
+// font-#{$k}:#{$c}
+// }@else{
+// #{$k}:#{$c}
+// }
+// }
+$uni-ui-color:(
+ // 主色
+ primary: $uni-primary,
+ primary-disable: $uni-primary-disable,
+ primary-light: $uni-primary-light,
+ // 辅助色
+ success: $uni-success,
+ success-disable: $uni-success-disable,
+ success-light: $uni-success-light,
+ warning: $uni-warning,
+ warning-disable: $uni-warning-disable,
+ warning-light: $uni-warning-light,
+ error: $uni-error,
+ error-disable: $uni-error-disable,
+ error-light: $uni-error-light,
+ info: $uni-info,
+ info-disable: $uni-info-disable,
+ info-light: $uni-info-light,
+ // 中性色
+ main-color: $uni-main-color,
+ base-color: $uni-base-color,
+ secondary-color: $uni-secondary-color,
+ extra-color: $uni-extra-color,
+ // 背景色
+ bg-color: $uni-bg-color,
+ // 边框颜色
+ border-1: $uni-border-1,
+ border-2: $uni-border-2,
+ border-3: $uni-border-3,
+ border-4: $uni-border-4,
+ // 黑色
+ black:$uni-black,
+ // 白色
+ white:$uni-white,
+ // 透明
+ transparent:$uni-transparent
+) !default;
+@each $key, $child in $uni-ui-color {
+ .uni-#{"" + $key} {
+ color: $child;
+ }
+ .uni-#{"" + $key}-bg {
+ background-color: $child;
+ }
+}
+.uni-shadow-sm {
+ box-shadow: $uni-shadow-sm;
+}
+.uni-shadow-base {
+ box-shadow: $uni-shadow-base;
+}
+.uni-shadow-lg {
+ box-shadow: $uni-shadow-lg;
+}
+.uni-mask {
+ background-color:$uni-mask;
+}
diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss
new file mode 100644
index 0000000..9a0428b
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_radius.scss
@@ -0,0 +1,55 @@
+@mixin radius($r,$d:null ,$important: false){
+ $radius-value:map-get($uni-radius, $r) if($important, !important, null);
+ // Key exists within the $uni-radius variable
+ @if (map-has-key($uni-radius, $r) and $d){
+ @if $d == t {
+ border-top-left-radius:$radius-value;
+ border-top-right-radius:$radius-value;
+ }@else if $d == r {
+ border-top-right-radius:$radius-value;
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == b {
+ border-bottom-left-radius:$radius-value;
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == l {
+ border-top-left-radius:$radius-value;
+ border-bottom-left-radius:$radius-value;
+ }@else if $d == tl {
+ border-top-left-radius:$radius-value;
+ }@else if $d == tr {
+ border-top-right-radius:$radius-value;
+ }@else if $d == br {
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == bl {
+ border-bottom-left-radius:$radius-value;
+ }
+ }@else{
+ border-radius:$radius-value;
+ }
+}
+
+@each $key, $child in $uni-radius {
+ @if($key){
+ .uni-radius-#{"" + $key} {
+ @include radius($key)
+ }
+ }@else{
+ .uni-radius {
+ @include radius($key)
+ }
+ }
+}
+
+@each $direction in t, r, b, l,tl, tr, br, bl {
+ @each $key, $child in $uni-radius {
+ @if($key){
+ .uni-radius-#{"" + $direction}-#{"" + $key} {
+ @include radius($key,$direction,false)
+ }
+ }@else{
+ .uni-radius-#{$direction} {
+ @include radius($key,$direction,false)
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss
new file mode 100644
index 0000000..3c89528
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_space.scss
@@ -0,0 +1,56 @@
+
+@mixin fn($space,$direction,$size,$n) {
+ @if $n {
+ #{$space}-#{$direction}: #{$size*$uni-space-root}px
+ } @else {
+ #{$space}-#{$direction}: #{-$size*$uni-space-root}px
+ }
+}
+@mixin get-styles($direction,$i,$space,$n){
+ @if $direction == t {
+ @include fn($space, top,$i,$n);
+ }
+ @if $direction == r {
+ @include fn($space, right,$i,$n);
+ }
+ @if $direction == b {
+ @include fn($space, bottom,$i,$n);
+ }
+ @if $direction == l {
+ @include fn($space, left,$i,$n);
+ }
+ @if $direction == x {
+ @include fn($space, left,$i,$n);
+ @include fn($space, right,$i,$n);
+ }
+ @if $direction == y {
+ @include fn($space, top,$i,$n);
+ @include fn($space, bottom,$i,$n);
+ }
+ @if $direction == a {
+ @if $n {
+ #{$space}:#{$i*$uni-space-root}px;
+ } @else {
+ #{$space}:#{-$i*$uni-space-root}px;
+ }
+ }
+}
+
+@each $orientation in m,p {
+ $space: margin;
+ @if $orientation == m {
+ $space: margin;
+ } @else {
+ $space: padding;
+ }
+ @for $i from 0 through 16 {
+ @each $direction in t, r, b, l, x, y, a {
+ .uni-#{$orientation}#{$direction}-#{$i} {
+ @include get-styles($direction,$i,$space,true);
+ }
+ .uni-#{$orientation}#{$direction}-n#{$i} {
+ @include get-styles($direction,$i,$space,false);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss
new file mode 100644
index 0000000..689afec
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_styles.scss
@@ -0,0 +1,167 @@
+/* #ifndef APP-NVUE */
+
+$-color-white:#fff;
+$-color-black:#000;
+@mixin base-style($color) {
+ color: #fff;
+ background-color: $color;
+ border-color: mix($-color-black, $color, 8%);
+ &:not([hover-class]):active {
+ background: mix($-color-black, $color, 10%);
+ border-color: mix($-color-black, $color, 20%);
+ color: $-color-white;
+ outline: none;
+ }
+}
+@mixin is-color($color) {
+ @include base-style($color);
+ &[loading] {
+ @include base-style($color);
+ &::before {
+ margin-right:5px;
+ }
+ }
+ &[disabled] {
+ &,
+ &[loading],
+ &:not([hover-class]):active {
+ color: $-color-white;
+ border-color: mix(darken($color,10%), $-color-white);
+ background-color: mix($color, $-color-white);
+ }
+ }
+
+}
+@mixin base-plain-style($color) {
+ color:$color;
+ background-color: mix($-color-white, $color, 90%);
+ border-color: mix($-color-white, $color, 70%);
+ &:not([hover-class]):active {
+ background: mix($-color-white, $color, 80%);
+ color: $color;
+ outline: none;
+ border-color: mix($-color-white, $color, 50%);
+ }
+}
+@mixin is-plain($color){
+ &[plain] {
+ @include base-plain-style($color);
+ &[loading] {
+ @include base-plain-style($color);
+ &::before {
+ margin-right:5px;
+ }
+ }
+ &[disabled] {
+ &,
+ &:active {
+ color: mix($-color-white, $color, 40%);
+ background-color: mix($-color-white, $color, 90%);
+ border-color: mix($-color-white, $color, 80%);
+ }
+ }
+ }
+}
+
+
+.uni-btn {
+ margin: 5px;
+ color: #393939;
+ border:1px solid #ccc;
+ font-size: 16px;
+ font-weight: 200;
+ background-color: #F9F9F9;
+ // TODO 暂时处理边框隐藏一边的问题
+ overflow: visible;
+ &::after{
+ border: none;
+ }
+
+ &:not([type]),&[type=default] {
+ color: #999;
+ &[loading] {
+ background: none;
+ &::before {
+ margin-right:5px;
+ }
+ }
+
+
+
+ &[disabled]{
+ color: mix($-color-white, #999, 60%);
+ &,
+ &[loading],
+ &:active {
+ color: mix($-color-white, #999, 60%);
+ background-color: mix($-color-white,$-color-black , 98%);
+ border-color: mix($-color-white, #999, 85%);
+ }
+ }
+
+ &[plain] {
+ color: #999;
+ background: none;
+ border-color: $uni-border-1;
+ &:not([hover-class]):active {
+ background: none;
+ color: mix($-color-white, $-color-black, 80%);
+ border-color: mix($-color-white, $-color-black, 90%);
+ outline: none;
+ }
+ &[disabled]{
+ &,
+ &[loading],
+ &:active {
+ background: none;
+ color: mix($-color-white, #999, 60%);
+ border-color: mix($-color-white, #999, 85%);
+ }
+ }
+ }
+ }
+
+ &:not([hover-class]):active {
+ color: mix($-color-white, $-color-black, 50%);
+ }
+
+ &[size=mini] {
+ font-size: 16px;
+ font-weight: 200;
+ border-radius: 8px;
+ }
+
+
+
+ &.uni-btn-small {
+ font-size: 14px;
+ }
+ &.uni-btn-mini {
+ font-size: 12px;
+ }
+
+ &.uni-btn-radius {
+ border-radius: 999px;
+ }
+ &[type=primary] {
+ @include is-color($uni-primary);
+ @include is-plain($uni-primary)
+ }
+ &[type=success] {
+ @include is-color($uni-success);
+ @include is-plain($uni-success)
+ }
+ &[type=error] {
+ @include is-color($uni-error);
+ @include is-plain($uni-error)
+ }
+ &[type=warning] {
+ @include is-color($uni-warning);
+ @include is-plain($uni-warning)
+ }
+ &[type=info] {
+ @include is-color($uni-info);
+ @include is-plain($uni-info)
+ }
+}
+/* #endif */
diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss
new file mode 100644
index 0000000..a34d08f
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_text.scss
@@ -0,0 +1,24 @@
+@mixin get-styles($k,$c) {
+ @if $k == size or $k == weight{
+ font-#{$k}:#{$c}
+ }@else{
+ #{$k}:#{$c}
+ }
+}
+
+@each $key, $child in $uni-headings {
+ /* #ifndef APP-NVUE */
+ .uni-#{$key} {
+ @each $k, $c in $child {
+ @include get-styles($k,$c)
+ }
+ }
+ /* #endif */
+ /* #ifdef APP-NVUE */
+ .container .uni-#{$key} {
+ @each $k, $c in $child {
+ @include get-styles($k,$c)
+ }
+ }
+ /* #endif */
+}
diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss
new file mode 100644
index 0000000..557d3d7
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_variables.scss
@@ -0,0 +1,146 @@
+// @use "sass:math";
+@import '../tools/functions.scss';
+// 间距基础倍数
+$uni-space-root: 2 !default;
+// 边框半径默认值
+$uni-radius-root:5px !default;
+$uni-radius: () !default;
+// 边框半径断点
+$uni-radius: map-deep-merge(
+ (
+ 0: 0,
+ // TODO 当前版本暂时不支持 sm 属性
+ // 'sm': math.div($uni-radius-root, 2),
+ null: $uni-radius-root,
+ 'lg': $uni-radius-root * 2,
+ 'xl': $uni-radius-root * 6,
+ 'pill': 9999px,
+ 'circle': 50%
+ ),
+ $uni-radius
+);
+// 字体家族
+$body-font-family: 'Roboto', sans-serif !default;
+// 文本
+$heading-font-family: $body-font-family !default;
+$uni-headings: () !default;
+$letterSpacing: -0.01562em;
+$uni-headings: map-deep-merge(
+ (
+ 'h1': (
+ size: 32px,
+ weight: 300,
+ line-height: 50px,
+ // letter-spacing:-0.01562em
+ ),
+ 'h2': (
+ size: 28px,
+ weight: 300,
+ line-height: 40px,
+ // letter-spacing: -0.00833em
+ ),
+ 'h3': (
+ size: 24px,
+ weight: 400,
+ line-height: 32px,
+ // letter-spacing: normal
+ ),
+ 'h4': (
+ size: 20px,
+ weight: 400,
+ line-height: 30px,
+ // letter-spacing: 0.00735em
+ ),
+ 'h5': (
+ size: 16px,
+ weight: 400,
+ line-height: 24px,
+ // letter-spacing: normal
+ ),
+ 'h6': (
+ size: 14px,
+ weight: 500,
+ line-height: 18px,
+ // letter-spacing: 0.0125em
+ ),
+ 'subtitle': (
+ size: 12px,
+ weight: 400,
+ line-height: 20px,
+ // letter-spacing: 0.00937em
+ ),
+ 'body': (
+ font-size: 14px,
+ font-weight: 400,
+ line-height: 22px,
+ // letter-spacing: 0.03125em
+ ),
+ 'caption': (
+ 'size': 12px,
+ 'weight': 400,
+ 'line-height': 20px,
+ // 'letter-spacing': 0.03333em,
+ // 'text-transform': false
+ )
+ ),
+ $uni-headings
+);
+
+
+
+// 主色
+$uni-primary: #2979ff !default;
+$uni-primary-disable:lighten($uni-primary,20%) !default;
+$uni-primary-light: lighten($uni-primary,25%) !default;
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37 !default;
+$uni-success-disable:lighten($uni-success,20%) !default;
+$uni-success-light: lighten($uni-success,25%) !default;
+
+$uni-warning: #f3a73f !default;
+$uni-warning-disable:lighten($uni-warning,20%) !default;
+$uni-warning-light: lighten($uni-warning,25%) !default;
+
+$uni-error: #e43d33 !default;
+$uni-error-disable:lighten($uni-error,20%) !default;
+$uni-error-light: lighten($uni-error,25%) !default;
+
+$uni-info: #8f939c !default;
+$uni-info-disable:lighten($uni-info,20%) !default;
+$uni-info-light: lighten($uni-info,25%) !default;
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a !default; // 主要文字
+$uni-base-color: #6a6a6a !default; // 常规文字
+$uni-secondary-color: #909399 !default; // 次要文字
+$uni-extra-color: #c7c7c7 !default; // 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0 !default;
+$uni-border-2: #EDEDED !default;
+$uni-border-3: #DCDCDC !default;
+$uni-border-4: #B9B9B9 !default;
+
+// 常规色
+$uni-black: #000000 !default;
+$uni-white: #ffffff !default;
+$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
+
+// 背景色
+$uni-bg-color: #f7f7f7 !default;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px !default;
+$uni-spacing-base: 15px !default;
+$uni-spacing-lg: 30px !default;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;
diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss
new file mode 100644
index 0000000..ac6f63e
--- /dev/null
+++ b/uni_modules/uni-scss/styles/tools/functions.scss
@@ -0,0 +1,19 @@
+// 合并 map
+@function map-deep-merge($parent-map, $child-map){
+ $result: $parent-map;
+ @each $key, $child in $child-map {
+ $parent-has-key: map-has-key($result, $key);
+ $parent-value: map-get($result, $key);
+ $parent-type: type-of($parent-value);
+ $child-type: type-of($child);
+ $parent-is-map: $parent-type == map;
+ $child-is-map: $child-type == map;
+
+ @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){
+ $result: map-merge($result, ( $key: $child ));
+ }@else {
+ $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ));
+ }
+ }
+ @return $result;
+};
diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss
new file mode 100644
index 0000000..80ee62f
--- /dev/null
+++ b/uni_modules/uni-scss/theme.scss
@@ -0,0 +1,31 @@
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+// 主色
+$uni-primary: #2979ff;
+// 辅助色
+$uni-success: #4cd964;
+// 警告色
+$uni-warning: #f0ad4e;
+// 错误色
+$uni-error: #dd524d;
+// 描述色
+$uni-info: #909399;
+// 中性色
+$uni-main-color: #303133;
+$uni-base-color: #606266;
+$uni-secondary-color: #909399;
+$uni-extra-color: #C0C4CC;
+// 背景色
+$uni-bg-color: #f5f5f5;
+// 边框颜色
+$uni-border-1: #DCDFE6;
+$uni-border-2: #E4E7ED;
+$uni-border-3: #EBEEF5;
+$uni-border-4: #F2F6FC;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss
new file mode 100644
index 0000000..1c062d4
--- /dev/null
+++ b/uni_modules/uni-scss/variables.scss
@@ -0,0 +1,62 @@
+@import './styles/setting/_variables.scss';
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+
+// 主色
+$uni-primary: #2979ff;
+$uni-primary-disable:mix(#fff,$uni-primary,50%);
+$uni-primary-light: mix(#fff,$uni-primary,80%);
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37;
+$uni-success-disable:mix(#fff,$uni-success,50%);
+$uni-success-light: mix(#fff,$uni-success,80%);
+
+$uni-warning: #f3a73f;
+$uni-warning-disable:mix(#fff,$uni-warning,50%);
+$uni-warning-light: mix(#fff,$uni-warning,80%);
+
+$uni-error: #e43d33;
+$uni-error-disable:mix(#fff,$uni-error,50%);
+$uni-error-light: mix(#fff,$uni-error,80%);
+
+$uni-info: #8f939c;
+$uni-info-disable:mix(#fff,$uni-info,50%);
+$uni-info-light: mix(#fff,$uni-info,80%);
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a; // 主要文字
+$uni-base-color: #6a6a6a; // 常规文字
+$uni-secondary-color: #909399; // 次要文字
+$uni-extra-color: #c7c7c7; // 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0;
+$uni-border-2: #EDEDED;
+$uni-border-3: #DCDCDC;
+$uni-border-4: #B9B9B9;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
+
+// 背景色
+$uni-bg-color: #f7f7f7;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px;
+$uni-spacing-base: 15px;
+$uni-spacing-lg: 30px;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5);
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2);
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5);
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4);
diff --git a/uni_modules/uni-search-bar/changelog.md b/uni_modules/uni-search-bar/changelog.md
new file mode 100644
index 0000000..2c6571c
--- /dev/null
+++ b/uni_modules/uni-search-bar/changelog.md
@@ -0,0 +1,47 @@
+## 1.3.0(2024-04-22)
+- 修复 textColor默认值导致的文字不显示的bug
+## 1.2.9(2024-04-17)
+- 修复 textColor不生效的bug
+## 1.2.8(2024-02-22)
+- 修复 清空按钮emit值错误的bug
+## 1.2.7(2024-02-21)
+- 新增 设置输入框字体颜色:textColor
+## 1.2.6(2024-02-20)
+- 修复 uni-search-bar在支付宝小程序下样式兼容问题
+## 1.2.5(2024-01-31)
+- 修复 uni-search-bar居中问题,现在默认居左,并修复样式偏移问题
+## 1.2.4(2023-05-09)
+- 修复 i18n 国际化不正确的 Bug
+## 1.2.3(2022-05-24)
+- 新增 readonly 属性,组件只读
+## 1.2.2(2022-05-06)
+- 修复 vue3 input 事件不生效的bug
+## 1.2.1(2022-05-06)
+- 修复 多余代码导致的bug
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar)
+## 1.1.2(2021-08-30)
+- 修复 value 属性与 modelValue 属性不兼容的Bug
+## 1.1.1(2021-08-24)
+- 新增 支持国际化
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.9(2021-05-12)
+- 新增 项目示例地址
+## 1.0.8(2021-04-21)
+- 优化 添加依赖 uni-icons, 导入后自动下载依赖
+## 1.0.7(2021-04-15)
+- uni-ui 新增 uni-search-bar 的 focus 事件
+
+## 1.0.6(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+
+## 1.0.5(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持双向绑定
+- 更改 input 事件的返回值,e={value:Number} --> e=value
+- 新增 支持图标插槽
+- 新增 支持 clear、blur 事件
+- 新增 支持 focus 属性
+- 去掉组件背景色
diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json
new file mode 100644
index 0000000..dd083a5
--- /dev/null
+++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json
@@ -0,0 +1,4 @@
+{
+ "uni-search-bar.cancel": "cancel",
+ "uni-search-bar.placeholder": "Search enter content"
+}
\ No newline at end of file
diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json
new file mode 100644
index 0000000..d2a1ced
--- /dev/null
+++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json
@@ -0,0 +1,4 @@
+{
+ "uni-search-bar.cancel": "取消",
+ "uni-search-bar.placeholder": "请输入搜索内容"
+}
diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json
new file mode 100644
index 0000000..f1c96bc
--- /dev/null
+++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json
@@ -0,0 +1,4 @@
+{
+ "uni-search-bar.cancel": "取消",
+ "uni-search-bar.placeholder": "請輸入搜索內容"
+}
diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
new file mode 100644
index 0000000..6b9b9c1
--- /dev/null
+++ b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+ {{ placeholder }}
+
+
+
+
+
+
+ {{cancelTextI18n}}
+
+
+
+
+
+
diff --git a/uni_modules/uni-search-bar/package.json b/uni_modules/uni-search-bar/package.json
new file mode 100644
index 0000000..1730d9d
--- /dev/null
+++ b/uni_modules/uni-search-bar/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uni-search-bar",
+ "displayName": "uni-search-bar 搜索栏",
+ "version": "1.3.0",
+ "description": "搜索栏组件,通常用于搜索商品、文章等",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "搜索框",
+ "搜索栏"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-search-bar/readme.md b/uni_modules/uni-search-bar/readme.md
new file mode 100644
index 0000000..253092f
--- /dev/null
+++ b/uni_modules/uni-search-bar/readme.md
@@ -0,0 +1,14 @@
+
+
+## SearchBar 搜索栏
+
+> **组件名:uni-search-bar**
+> 代码块: `uSearchBar`
+
+
+搜索栏组件
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-tag/changelog.md b/uni_modules/uni-tag/changelog.md
new file mode 100644
index 0000000..ddee87a
--- /dev/null
+++ b/uni_modules/uni-tag/changelog.md
@@ -0,0 +1,23 @@
+## 2.1.1(2024-03-20)
+- 优化 app下边框过窄导致不显示的bug
+## 2.1.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-tag](https://uniapp.dcloud.io/component/uniui/uni-tag)
+## 2.0.0(2021-11-09)
+- 新增 提供组件设计资源,组件样式调整
+- 移除 插槽
+- 移除 type 属性的 royal 选项
+## 1.1.1(2021-08-11)
+- type 不是 default 时,size 为 small 字体大小显示不正确
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-06-18)
+- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug
+## 1.0.6(2021-06-04)
+- 修复 未定义 sass 变量 "$uni-color-royal" 的bug
+## 1.0.5(2021-05-10)
+- 修复 royal 类型无效的bug
+- 修复 uni-tag 宽度不自适应的bug
+- 新增 uni-tag 支持属性 custom-style 自定义样式
+## 1.0.4(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-tag/components/uni-tag/uni-tag.vue b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue
new file mode 100644
index 0000000..7274436
--- /dev/null
+++ b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue
@@ -0,0 +1,252 @@
+
+ {{text}}
+
+
+
+
+
diff --git a/uni_modules/uni-tag/package.json b/uni_modules/uni-tag/package.json
new file mode 100644
index 0000000..71b41eb
--- /dev/null
+++ b/uni_modules/uni-tag/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "uni-tag",
+ "displayName": "uni-tag 标签",
+ "version": "2.1.1",
+ "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "",
+ "tag",
+ "标签"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-tag/readme.md b/uni_modules/uni-tag/readme.md
new file mode 100644
index 0000000..6e78ff5
--- /dev/null
+++ b/uni_modules/uni-tag/readme.md
@@ -0,0 +1,13 @@
+
+
+## Tag 标签
+> **组件名:uni-tag**
+> 代码块: `uTag`
+
+
+用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-transition/changelog.md b/uni_modules/uni-transition/changelog.md
new file mode 100644
index 0000000..01bfb58
--- /dev/null
+++ b/uni_modules/uni-transition/changelog.md
@@ -0,0 +1,31 @@
+## 1.3.6(2025-07-18)
+- 修复 nvue 页面,样式错误问题
+## 1.3.5(2025-06-11)
+- 修复 第一次执行不显示动画的问题
+## 1.3.4(2025-04-16)
+- 修复 页面数据更新到底动画复原的问题
+- 修复 示例页面打开报错的问题
+## 1.3.3(2024-04-23)
+- 修复 当元素会受变量影响自动隐藏的bug
+## 1.3.2(2023-05-04)
+- 修复 NVUE 平台报错的问题
+## 1.3.1(2021-11-23)
+- 修复 init 方法初始化问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
+## 1.2.1(2021-09-27)
+- 修复 init 方法不生效的 Bug
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.1(2021-05-12)
+- 新增 示例地址
+- 修复 示例项目缺少组件的 Bug
+## 1.1.0(2021-04-22)
+- 新增 通过方法自定义动画
+- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
+- 优化 动画触发逻辑,使动画更流畅
+- 优化 支持单独的动画类型
+- 优化 文档示例
+## 1.0.2(2021-02-05)
+- 调整为 uni_modules 目录规范
diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
new file mode 100644
index 0000000..8f89b18
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
@@ -0,0 +1,131 @@
+// const defaultOption = {
+// duration: 300,
+// timingFunction: 'linear',
+// delay: 0,
+// transformOrigin: '50% 50% 0'
+// }
+// #ifdef APP-NVUE
+const nvueAnimation = uni.requireNativePlugin('animation')
+// #endif
+class MPAnimation {
+ constructor(options, _this) {
+ this.options = options
+ // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
+ this.animation = uni.createAnimation({
+ ...options
+ })
+ this.currentStepAnimates = {}
+ this.next = 0
+ this.$ = _this
+
+ }
+
+ _nvuePushAnimates(type, args) {
+ let aniObj = this.currentStepAnimates[this.next]
+ let styles = {}
+ if (!aniObj) {
+ styles = {
+ styles: {},
+ config: {}
+ }
+ } else {
+ styles = aniObj
+ }
+ if (animateTypes1.includes(type)) {
+ if (!styles.styles.transform) {
+ styles.styles.transform = ''
+ }
+ let unit = ''
+ if(type === 'rotate'){
+ unit = 'deg'
+ }
+ styles.styles.transform += `${type}(${args+unit}) `
+ } else {
+ styles.styles[type] = `${args}`
+ }
+ this.currentStepAnimates[this.next] = styles
+ }
+ _animateRun(styles = {}, config = {}) {
+ let ref = this.$.$refs['ani'].ref
+ if (!ref) return
+ return new Promise((resolve, reject) => {
+ nvueAnimation.transition(ref, {
+ styles,
+ ...config
+ }, res => {
+ resolve()
+ })
+ })
+ }
+
+ _nvueNextAnimate(animates, step = 0, fn) {
+ let obj = animates[step]
+ if (obj) {
+ let {
+ styles,
+ config
+ } = obj
+ this._animateRun(styles, config).then(() => {
+ step += 1
+ this._nvueNextAnimate(animates, step, fn)
+ })
+ } else {
+ this.currentStepAnimates = {}
+ typeof fn === 'function' && fn()
+ this.isEnd = true
+ }
+ }
+
+ step(config = {}) {
+ // #ifndef APP-NVUE
+ this.animation.step(config)
+ // #endif
+ // #ifdef APP-NVUE
+ this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
+ this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
+ this.next++
+ // #endif
+ return this
+ }
+
+ run(fn) {
+ // #ifndef APP-NVUE
+ this.$.animationData = this.animation.export()
+ this.$.timer = setTimeout(() => {
+ typeof fn === 'function' && fn()
+ }, this.$.durationTime)
+ // #endif
+ // #ifdef APP-NVUE
+ this.isEnd = false
+ let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
+ if(!ref) return
+ this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
+ this.next = 0
+ // #endif
+ }
+}
+
+
+const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
+ 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
+ 'translateZ'
+]
+const animateTypes2 = ['opacity', 'backgroundColor']
+const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
+animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
+ MPAnimation.prototype[type] = function(...args) {
+ // #ifndef APP-NVUE
+ this.animation[type](...args)
+ // #endif
+ // #ifdef APP-NVUE
+ this._nvuePushAnimates(type, args)
+ // #endif
+ return this
+ }
+})
+
+export function createAnimation(option, _this) {
+ if(!_this) return
+ clearTimeout(_this.timer)
+ return new MPAnimation(option, _this)
+}
diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
new file mode 100644
index 0000000..7677553
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json
new file mode 100644
index 0000000..0542c52
--- /dev/null
+++ b/uni_modules/uni-transition/package.json
@@ -0,0 +1,112 @@
+{
+ "id": "uni-transition",
+ "displayName": "uni-transition 过渡动画",
+ "version": "1.3.6",
+ "description": "元素的简单过渡动画",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "动画",
+ "过渡",
+ "过渡动画"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "",
+ "uni-app": "^4.12",
+ "uni-app-x": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue",
+ "darkmode": "x",
+ "i18n": "x",
+ "widescreen": "x"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "x",
+ "aliyun": "x",
+ "alipay": "x"
+ },
+ "client": {
+ "uni-app": {
+ "vue": {
+ "vue2": "√",
+ "vue3": "√"
+ },
+ "web": {
+ "safari": "√",
+ "chrome": "√"
+ },
+ "app": {
+ "vue": "√",
+ "nvue": "√",
+ "android": "√",
+ "ios": "√",
+ "harmony": "√"
+ },
+ "mp": {
+ "weixin": {
+ },
+ "alipay": {
+ },
+ "toutiao": {
+ },
+ "baidu": {
+ },
+ "kuaishou": {
+ },
+ "jd": {
+ },
+ "harmony": "-",
+ "qq": "√",
+ "lark": "-"
+ },
+ "quickapp": {
+ "huawei": "√",
+ "union": "√"
+ }
+ },
+ "uni-app-x": {
+ "web": {
+ "safari": "-",
+ "chrome": "-"
+ },
+ "app": {
+ "android": "-",
+ "ios": "-",
+ "harmony": "-"
+ },
+ "mp": {
+ "weixin": "-"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md
new file mode 100644
index 0000000..2f8a77e
--- /dev/null
+++ b/uni_modules/uni-transition/readme.md
@@ -0,0 +1,11 @@
+
+
+## Transition 过渡动画
+> **组件名:uni-transition**
+> 代码块: `uTransition`
+
+
+元素过渡动画
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uv-empty/changelog.md b/uni_modules/uv-empty/changelog.md
new file mode 100644
index 0000000..a1cc2ad
--- /dev/null
+++ b/uni_modules/uv-empty/changelog.md
@@ -0,0 +1,13 @@
+## 1.0.5(2023-12-20)
+1. 优化
+## 1.0.4(2023-08-04)
+1. icon支持base64图片
+## 1.0.3(2023-07-17)
+1. 修复 uv-empty 恢复设置mode属性的内置图标
+## 1.0.2(2023-07-03)
+去除插槽判断,避免某些平台不显示的BUG
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-empty 内容为空
diff --git a/uni_modules/uv-empty/components/uv-empty/props.js b/uni_modules/uv-empty/components/uv-empty/props.js
new file mode 100644
index 0000000..26c282d
--- /dev/null
+++ b/uni_modules/uv-empty/components/uv-empty/props.js
@@ -0,0 +1,60 @@
+export default {
+ props: {
+ // 内置图标名称,或图片路径,建议绝对路径
+ icon: {
+ type: String,
+ default: ''
+ },
+ // 提示文字
+ text: {
+ type: String,
+ default: ''
+ },
+ // 文字颜色
+ textColor: {
+ type: String,
+ default: '#c0c4cc'
+ },
+ // 文字大小
+ textSize: {
+ type: [String, Number],
+ default: 14
+ },
+ // 图标的颜色
+ iconColor: {
+ type: String,
+ default: '#c0c4cc'
+ },
+ // 图标的大小
+ iconSize: {
+ type: [String, Number],
+ default: 90
+ },
+ // 选择预置的图标类型
+ mode: {
+ type: String,
+ default: 'data'
+ },
+ // 图标宽度,单位px
+ width: {
+ type: [String, Number],
+ default: 160
+ },
+ // 图标高度,单位px
+ height: {
+ type: [String, Number],
+ default: 160
+ },
+ // 是否显示组件
+ show: {
+ type: Boolean,
+ default: true
+ },
+ // 组件距离上一个元素之间的距离,默认px单位
+ marginTop: {
+ type: [String, Number],
+ default: 0
+ },
+ ...uni.$uv?.props?.empty
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-empty/components/uv-empty/uv-empty.vue b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue
new file mode 100644
index 0000000..22a9264
--- /dev/null
+++ b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue
@@ -0,0 +1,126 @@
+
+
+
+
+ {{text ? text : icons[mode]}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uv-empty/package.json b/uni_modules/uv-empty/package.json
new file mode 100644
index 0000000..e10f451
--- /dev/null
+++ b/uni_modules/uv-empty/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uv-empty",
+ "displayName": "uv-empty 内容为空 全面兼容vue3+2、app、h5、小程序等多端",
+ "version": "1.0.5",
+ "description": "该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个 没有内容 的场景, 我们精心挑选了十几个场景的图标,方便您使用。",
+ "keywords": [
+ "empty",
+ "uvui",
+ "uv-ui",
+ "空数据",
+ "暂无数据"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools",
+ "uv-icon"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-empty/readme.md b/uni_modules/uv-empty/readme.md
new file mode 100644
index 0000000..ecef14d
--- /dev/null
+++ b/uni_modules/uv-empty/readme.md
@@ -0,0 +1,19 @@
+## Empty 内容为空
+
+> **组件名:uv-empty**
+
+该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。
+
+# 查看文档
+
+## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP)
+
+### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+
+
+
+
+
+
+#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群
\ No newline at end of file
diff --git a/uni_modules/uv-icon/changelog.md b/uni_modules/uv-icon/changelog.md
new file mode 100644
index 0000000..c610827
--- /dev/null
+++ b/uni_modules/uv-icon/changelog.md
@@ -0,0 +1,31 @@
+## 1.0.13(2023-12-06)
+1. 优化
+## 1.0.12(2023-12-06)
+1. 阻止事件冒泡处理
+## 1.0.11(2023-10-29)
+1. imgMode默认值改成aspectFit
+## 1.0.10(2023-08-13)
+1. 优化nvue,方便自定义图标
+## 1.0.9(2023-07-28)
+1. 修改几个对应错误图标的BUG
+## 1.0.8(2023-07-24)
+1. 优化 支持base64图片
+## 1.0.7(2023-07-17)
+1. 修复 uv-icon 恢复uv-empty相关的图标
+## 1.0.6(2023-07-13)
+1. 修复icon设置name属性对应图标错误的BUG
+## 1.0.5(2023-07-04)
+1. 更新图标,删除一些不常用的图标
+2. 删除base64,修改成ttf文件引入读取图标
+3. 自定义图标文档说明:https://www.uvui.cn/guide/customIcon.html
+## 1.0.4(2023-07-03)
+1. 修复主题颜色在APP不生效的BUG
+## 1.0.3(2023-05-24)
+1. 将线上ttf字体包替换成base64,避免加载时或者网络差时候显示白色方块
+## 1.0.2(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.1(2023-05-10)
+1. 修复小程序中异常显示
+## 1.0.0(2023-05-04)
+新发版
diff --git a/uni_modules/uv-icon/components/uv-icon/icons.js b/uni_modules/uv-icon/components/uv-icon/icons.js
new file mode 100644
index 0000000..8469a2d
--- /dev/null
+++ b/uni_modules/uv-icon/components/uv-icon/icons.js
@@ -0,0 +1,160 @@
+export default {
+ 'uvicon-level': 'e68f',
+ 'uvicon-checkbox-mark': 'e659',
+ 'uvicon-folder': 'e694',
+ 'uvicon-movie': 'e67c',
+ 'uvicon-star-fill': 'e61e',
+ 'uvicon-star': 'e618',
+ 'uvicon-phone-fill': 'e6ac',
+ 'uvicon-phone': 'e6ba',
+ 'uvicon-apple-fill': 'e635',
+ 'uvicon-backspace': 'e64d',
+ 'uvicon-attach': 'e640',
+ 'uvicon-empty-data': 'e671',
+ 'uvicon-empty-address': 'e68a',
+ 'uvicon-empty-favor': 'e662',
+ 'uvicon-empty-car': 'e657',
+ 'uvicon-empty-order': 'e66b',
+ 'uvicon-empty-list': 'e672',
+ 'uvicon-empty-search': 'e677',
+ 'uvicon-empty-permission': 'e67d',
+ 'uvicon-empty-news': 'e67e',
+ 'uvicon-empty-history': 'e685',
+ 'uvicon-empty-coupon': 'e69b',
+ 'uvicon-empty-page': 'e60e',
+ 'uvicon-empty-wifi-off': 'e6cc',
+ 'uvicon-reload': 'e627',
+ 'uvicon-order': 'e695',
+ 'uvicon-server-man': 'e601',
+ 'uvicon-search': 'e632',
+ 'uvicon-more-dot-fill': 'e66f',
+ 'uvicon-scan': 'e631',
+ 'uvicon-map': 'e665',
+ 'uvicon-map-fill': 'e6a8',
+ 'uvicon-tags': 'e621',
+ 'uvicon-tags-fill': 'e613',
+ 'uvicon-eye': 'e664',
+ 'uvicon-eye-fill': 'e697',
+ 'uvicon-eye-off': 'e69c',
+ 'uvicon-eye-off-outline': 'e688',
+ 'uvicon-mic': 'e66d',
+ 'uvicon-mic-off': 'e691',
+ 'uvicon-calendar': 'e65c',
+ 'uvicon-trash': 'e623',
+ 'uvicon-trash-fill': 'e6ce',
+ 'uvicon-play-left': 'e6bf',
+ 'uvicon-play-right': 'e6b3',
+ 'uvicon-minus': 'e614',
+ 'uvicon-plus': 'e625',
+ 'uvicon-info-circle': 'e69f',
+ 'uvicon-info-circle-fill': 'e6a7',
+ 'uvicon-question-circle': 'e622',
+ 'uvicon-question-circle-fill': 'e6bc',
+ 'uvicon-close': 'e65a',
+ 'uvicon-checkmark': 'e64a',
+ 'uvicon-checkmark-circle': 'e643',
+ 'uvicon-checkmark-circle-fill': 'e668',
+ 'uvicon-setting': 'e602',
+ 'uvicon-setting-fill': 'e6d0',
+ 'uvicon-heart': 'e6a2',
+ 'uvicon-heart-fill': 'e68b',
+ 'uvicon-camera': 'e642',
+ 'uvicon-camera-fill': 'e650',
+ 'uvicon-more-circle': 'e69e',
+ 'uvicon-more-circle-fill': 'e684',
+ 'uvicon-chat': 'e656',
+ 'uvicon-chat-fill': 'e63f',
+ 'uvicon-bag': 'e647',
+ 'uvicon-error-circle': 'e66e',
+ 'uvicon-error-circle-fill': 'e655',
+ 'uvicon-close-circle': 'e64e',
+ 'uvicon-close-circle-fill': 'e666',
+ 'uvicon-share': 'e629',
+ 'uvicon-share-fill': 'e6bb',
+ 'uvicon-share-square': 'e6c4',
+ 'uvicon-shopping-cart': 'e6cb',
+ 'uvicon-shopping-cart-fill': 'e630',
+ 'uvicon-bell': 'e651',
+ 'uvicon-bell-fill': 'e604',
+ 'uvicon-list': 'e690',
+ 'uvicon-list-dot': 'e6a9',
+ 'uvicon-zhifubao-circle-fill': 'e617',
+ 'uvicon-weixin-circle-fill': 'e6cd',
+ 'uvicon-weixin-fill': 'e620',
+ 'uvicon-qq-fill': 'e608',
+ 'uvicon-qq-circle-fill': 'e6b9',
+ 'uvicon-moments-circel-fill': 'e6c2',
+ 'uvicon-moments': 'e6a0',
+ 'uvicon-car': 'e64f',
+ 'uvicon-car-fill': 'e648',
+ 'uvicon-warning-fill': 'e6c7',
+ 'uvicon-warning': 'e6c1',
+ 'uvicon-clock-fill': 'e64b',
+ 'uvicon-clock': 'e66c',
+ 'uvicon-edit-pen': 'e65d',
+ 'uvicon-edit-pen-fill': 'e679',
+ 'uvicon-email': 'e673',
+ 'uvicon-email-fill': 'e683',
+ 'uvicon-minus-circle': 'e6a5',
+ 'uvicon-plus-circle': 'e603',
+ 'uvicon-plus-circle-fill': 'e611',
+ 'uvicon-file-text': 'e687',
+ 'uvicon-file-text-fill': 'e67f',
+ 'uvicon-pushpin': 'e6d1',
+ 'uvicon-pushpin-fill': 'e6b6',
+ 'uvicon-grid': 'e68c',
+ 'uvicon-grid-fill': 'e698',
+ 'uvicon-play-circle': 'e6af',
+ 'uvicon-play-circle-fill': 'e62a',
+ 'uvicon-pause-circle-fill': 'e60c',
+ 'uvicon-pause': 'e61c',
+ 'uvicon-pause-circle': 'e696',
+ 'uvicon-gift-fill': 'e6b0',
+ 'uvicon-gift': 'e680',
+ 'uvicon-kefu-ermai': 'e660',
+ 'uvicon-server-fill': 'e610',
+ 'uvicon-coupon-fill': 'e64c',
+ 'uvicon-coupon': 'e65f',
+ 'uvicon-integral': 'e693',
+ 'uvicon-integral-fill': 'e6b1',
+ 'uvicon-home-fill': 'e68e',
+ 'uvicon-home': 'e67b',
+ 'uvicon-account': 'e63a',
+ 'uvicon-account-fill': 'e653',
+ 'uvicon-thumb-down-fill': 'e628',
+ 'uvicon-thumb-down': 'e60a',
+ 'uvicon-thumb-up': 'e612',
+ 'uvicon-thumb-up-fill': 'e62c',
+ 'uvicon-lock-fill': 'e6a6',
+ 'uvicon-lock-open': 'e68d',
+ 'uvicon-lock-opened-fill': 'e6a1',
+ 'uvicon-lock': 'e69d',
+ 'uvicon-red-packet': 'e6c3',
+ 'uvicon-photo-fill': 'e6b4',
+ 'uvicon-photo': 'e60d',
+ 'uvicon-volume-off-fill': 'e6c8',
+ 'uvicon-volume-off': 'e6bd',
+ 'uvicon-volume-fill': 'e624',
+ 'uvicon-volume': 'e605',
+ 'uvicon-download': 'e670',
+ 'uvicon-arrow-up-fill': 'e636',
+ 'uvicon-arrow-down-fill': 'e638',
+ 'uvicon-play-left-fill': 'e6ae',
+ 'uvicon-play-right-fill': 'e6ad',
+ 'uvicon-arrow-downward': 'e634',
+ 'uvicon-arrow-leftward': 'e63b',
+ 'uvicon-arrow-rightward': 'e644',
+ 'uvicon-arrow-upward': 'e641',
+ 'uvicon-arrow-down': 'e63e',
+ 'uvicon-arrow-right': 'e63c',
+ 'uvicon-arrow-left': 'e646',
+ 'uvicon-arrow-up': 'e633',
+ 'uvicon-skip-back-left': 'e6c5',
+ 'uvicon-skip-forward-right': 'e61f',
+ 'uvicon-arrow-left-double': 'e637',
+ 'uvicon-man': 'e675',
+ 'uvicon-woman': 'e626',
+ 'uvicon-en': 'e6b8',
+ 'uvicon-twitte': 'e607',
+ 'uvicon-twitter-circle-fill': 'e6cf'
+}
\ No newline at end of file
diff --git a/uni_modules/uv-icon/components/uv-icon/props.js b/uni_modules/uv-icon/components/uv-icon/props.js
new file mode 100644
index 0000000..7668cf9
--- /dev/null
+++ b/uni_modules/uv-icon/components/uv-icon/props.js
@@ -0,0 +1,90 @@
+export default {
+ props: {
+ // 图标类名
+ name: {
+ type: String,
+ default: ''
+ },
+ // 图标颜色,可接受主题色
+ color: {
+ type: String,
+ default: '#606266'
+ },
+ // 字体大小,单位px
+ size: {
+ type: [String, Number],
+ default: '16px'
+ },
+ // 是否显示粗体
+ bold: {
+ type: Boolean,
+ default: false
+ },
+ // 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
+ index: {
+ type: [String, Number],
+ default: null
+ },
+ // 触摸图标时的类名
+ hoverClass: {
+ type: String,
+ default: ''
+ },
+ // 自定义扩展前缀,方便用户扩展自己的图标库
+ customPrefix: {
+ type: String,
+ default: 'uvicon'
+ },
+ // 图标右边或者下面的文字
+ label: {
+ type: [String, Number],
+ default: ''
+ },
+ // label的位置,只能右边或者下边
+ labelPos: {
+ type: String,
+ default: 'right'
+ },
+ // label的大小
+ labelSize: {
+ type: [String, Number],
+ default: '15px'
+ },
+ // label的颜色
+ labelColor: {
+ type: String,
+ default: '#606266'
+ },
+ // label与图标的距离
+ space: {
+ type: [String, Number],
+ default: '3px'
+ },
+ // 图片的mode
+ imgMode: {
+ type: String,
+ default: 'aspectFit'
+ },
+ // 用于显示图片小图标时,图片的宽度
+ width: {
+ type: [String, Number],
+ default: ''
+ },
+ // 用于显示图片小图标时,图片的高度
+ height: {
+ type: [String, Number],
+ default: ''
+ },
+ // 用于解决某些情况下,让图标垂直居中的用途
+ top: {
+ type: [String, Number],
+ default: 0
+ },
+ // 是否阻止事件传播
+ stop: {
+ type: Boolean,
+ default: false
+ },
+ ...uni.$uv?.props?.icon
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-icon/components/uv-icon/uv-icon.vue b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue
new file mode 100644
index 0000000..d61c9e5
--- /dev/null
+++ b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue
@@ -0,0 +1,226 @@
+
+
+
+ {{icon}}
+
+ {{ label }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uv-icon/components/uv-icon/uvicons.ttf b/uni_modules/uv-icon/components/uv-icon/uvicons.ttf
new file mode 100644
index 0000000..9aedef8
Binary files /dev/null and b/uni_modules/uv-icon/components/uv-icon/uvicons.ttf differ
diff --git a/uni_modules/uv-icon/package.json b/uni_modules/uv-icon/package.json
new file mode 100644
index 0000000..0a838d5
--- /dev/null
+++ b/uni_modules/uv-icon/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "uv-icon",
+ "displayName": "uv-icon 图标 全面兼容vue3+2、app、h5、小程序等多端",
+ "version": "1.0.13",
+ "description": "基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。可自定义颜色、大小。",
+ "keywords": [
+ "uv-ui,uvui,uv-icon,icon,图标,字体图标"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uv-ui-tools"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-icon/readme.md b/uni_modules/uv-icon/readme.md
new file mode 100644
index 0000000..d526e1a
--- /dev/null
+++ b/uni_modules/uv-icon/readme.md
@@ -0,0 +1,15 @@
+## uv-icon 图标库
+
+> **组件名:uv-icon**
+
+基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。
+
+# 查看文档
+
+## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+
+
+#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群
diff --git a/uni_modules/uv-ui-tools/changelog.md b/uni_modules/uv-ui-tools/changelog.md
new file mode 100644
index 0000000..998373e
--- /dev/null
+++ b/uni_modules/uv-ui-tools/changelog.md
@@ -0,0 +1,76 @@
+## 1.1.25(2024-01-20)
+1.1.20版本更新
+## 1.1.24(2023-12-21)
+1. luch-request更新
+## 1.1.23(2023-12-12)
+1. 1.1.19版本
+## 1.1.22(2023-11-28)
+1. 优化
+## 1.1.21(2023-11-10)
+1. 1.1.17版本
+## 1.1.20(2023-10-30)
+1. 1.1.16版本
+## 1.1.19(2023-10-13)
+1. 兼容vue3
+## 1.1.18(2023-10-12)
+1. 1.1.15版本
+## 1.1.17(2023-09-27)
+1. 1.1.14版本发布
+## 1.1.16(2023-09-15)
+1. 1.1.13版本发布
+## 1.1.15(2023-09-15)
+1. 更新button.js相关按钮支持open-type="agreePrivacyAuthorization"
+## 1.1.14(2023-09-14)
+1. 优化dayjs
+## 1.1.13(2023-09-13)
+1. 优化,$uv中增加unit参数,方便组件中使用
+## 1.1.12(2023-09-10)
+1. 升级版本
+## 1.1.11(2023-09-04)
+1. 1.1.11版本
+## 1.1.10(2023-08-31)
+1. 修复customStyle和customClass存在冲突的问题
+## 1.1.9(2023-08-27)
+1. 版本升级
+2. 优化
+## 1.1.8(2023-08-24)
+1. 版本升级
+## 1.1.7(2023-08-22)
+1. 版本升级
+## 1.1.6(2023-08-18)
+uvui版本:1.1.6
+## 1.0.15(2023-08-14)
+1. 更新uvui版本号
+## 1.0.13(2023-08-06)
+1. 优化
+## 1.0.12(2023-08-06)
+1. 修改版本号
+## 1.0.11(2023-08-06)
+1. 路由增加events参数
+2. 路由拦截修复
+## 1.0.10(2023-08-01)
+1. 优化
+## 1.0.9(2023-06-28)
+优化openType.js
+## 1.0.8(2023-06-15)
+1. 修改支付宝报错的BUG
+## 1.0.7(2023-06-07)
+1. 解决微信小程序使用uvui提示 Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors
+2. 解决上述提示,需要在uni.scss配置$uvui-nvue-style: false; 然后在APP.vue下面引入uvui内置的基础样式:@import '@/uni_modules/uv-ui-tools/index.scss';
+## 1.0.6(2023-06-04)
+1. uv-ui-tools 优化工具组件,兼容更多功能
+2. 小程序分享功能优化等
+## 1.0.5(2023-06-02)
+1. 修改扩展使用mixin中方法的问题
+## 1.0.4(2023-05-23)
+1. 兼容百度小程序修改bem函数
+## 1.0.3(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.2(2023-05-10)
+1. 增加Http请求封装
+2. 优化
+## 1.0.1(2023-05-04)
+1. 修改名称及备注
+## 1.0.0(2023-05-04)
+1. uv-ui工具集首次发布
diff --git a/uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue b/uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue
new file mode 100644
index 0000000..baf45e9
--- /dev/null
+++ b/uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/uni_modules/uv-ui-tools/index.js b/uni_modules/uv-ui-tools/index.js
new file mode 100644
index 0000000..71a8b66
--- /dev/null
+++ b/uni_modules/uv-ui-tools/index.js
@@ -0,0 +1,79 @@
+// 全局挂载引入http相关请求拦截插件
+import Request from './libs/luch-request'
+
+// 引入全局mixin
+import mixin from './libs/mixin/mixin.js'
+// 小程序特有的mixin
+import mpMixin from './libs/mixin/mpMixin.js'
+// #ifdef MP
+import mpShare from './libs/mixin/mpShare.js'
+// #endif
+
+// 路由封装
+import route from './libs/util/route.js'
+// 公共工具函数
+import * as index from './libs/function/index.js'
+// 防抖方法
+import debounce from './libs/function/debounce.js'
+// 节流方法
+import throttle from './libs/function/throttle.js'
+// 规则检验
+import * as test from './libs/function/test.js'
+
+// 颜色渐变相关,colorGradient-颜色渐变,hexToRgb-十六进制颜色转rgb颜色,rgbToHex-rgb转十六进制
+import * as colorGradient from './libs/function/colorGradient.js'
+
+// 配置信息
+import config from './libs/config/config.js'
+// 平台
+import platform from './libs/function/platform'
+
+const $uv = {
+ route,
+ config,
+ test,
+ date: index.timeFormat, // 另名date
+ ...index,
+ colorGradient: colorGradient.colorGradient,
+ hexToRgb: colorGradient.hexToRgb,
+ rgbToHex: colorGradient.rgbToHex,
+ colorToRgba: colorGradient.colorToRgba,
+ http: new Request(),
+ debounce,
+ throttle,
+ platform,
+ mixin,
+ mpMixin
+}
+uni.$uv = $uv;
+const install = (Vue,options={}) => {
+ // #ifndef APP-NVUE
+ const cloneMixin = index.deepClone(mixin);
+ delete cloneMixin?.props?.customClass;
+ delete cloneMixin?.props?.customStyle;
+ Vue.mixin(cloneMixin);
+ // #ifdef MP
+ if(options.mpShare){
+ Vue.mixin(mpShare);
+ }
+ // #endif
+ // #endif
+ // #ifdef VUE2
+ // 时间格式化,同时两个名称,date和timeFormat
+ Vue.filter('timeFormat', (timestamp, format) => uni.$uv.timeFormat(timestamp, format));
+ Vue.filter('date', (timestamp, format) => uni.$uv.timeFormat(timestamp, format));
+ // 将多久以前的方法,注入到全局过滤器
+ Vue.filter('timeFrom', (timestamp, format) => uni.$uv.timeFrom(timestamp, format));
+ // 同时挂载到uni和Vue.prototype中
+ // #ifndef APP-NVUE
+ // 只有vue,挂载到Vue.prototype才有意义,因为nvue中全局Vue.prototype和Vue.mixin是无效的
+ Vue.prototype.$uv = $uv;
+ // #endif
+ // #endif
+ // #ifdef VUE3
+ Vue.config.globalProperties.$uv = $uv;
+ // #endif
+}
+export default {
+ install
+}
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/index.scss b/uni_modules/uv-ui-tools/index.scss
new file mode 100644
index 0000000..8d05b8d
--- /dev/null
+++ b/uni_modules/uv-ui-tools/index.scss
@@ -0,0 +1,7 @@
+// 引入公共基础类
+@import "./libs/css/common.scss";
+
+// 非nvue的样式
+/* #ifndef APP-NVUE */
+@import "./libs/css/vue.scss";
+/* #endif */
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/libs/config/config.js b/uni_modules/uv-ui-tools/libs/config/config.js
new file mode 100644
index 0000000..f18ae74
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/config/config.js
@@ -0,0 +1,34 @@
+// 此版本发布于2024-01-20
+const version = '1.1.20'
+
+// 开发环境才提示,生产环境不会提示
+if (process.env.NODE_ENV === 'development') {
+ console.log(`\n %c uvui V${version} https://www.uvui.cn/ \n\n`, 'color: #ffffff; background: #3c9cff; padding:5px 0; border-radius: 5px;');
+}
+
+export default {
+ v: version,
+ version,
+ // 主题名称
+ type: [
+ 'primary',
+ 'success',
+ 'info',
+ 'error',
+ 'warning'
+ ],
+ // 颜色部分,本来可以通过scss的:export导出供js使用,但是奈何nvue不支持
+ color: {
+ 'uv-primary': '#2979ff',
+ 'uv-warning': '#ff9900',
+ 'uv-success': '#19be6b',
+ 'uv-error': '#fa3534',
+ 'uv-info': '#909399',
+ 'uv-main-color': '#303133',
+ 'uv-content-color': '#606266',
+ 'uv-tips-color': '#909399',
+ 'uv-light-color': '#c0c4cc'
+ },
+ // 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx
+ unit: 'px'
+}
diff --git a/uni_modules/uv-ui-tools/libs/css/color.scss b/uni_modules/uv-ui-tools/libs/css/color.scss
new file mode 100644
index 0000000..ce65743
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/css/color.scss
@@ -0,0 +1,32 @@
+$uv-main-color: #303133 !default;
+$uv-content-color: #606266 !default;
+$uv-tips-color: #909193 !default;
+$uv-light-color: #c0c4cc !default;
+$uv-border-color: #dadbde !default;
+$uv-bg-color: #f3f4f6 !default;
+$uv-disabled-color: #c8c9cc !default;
+
+$uv-primary: #3c9cff !default;
+$uv-primary-dark: #398ade !default;
+$uv-primary-disabled: #9acafc !default;
+$uv-primary-light: #ecf5ff !default;
+
+$uv-warning: #f9ae3d !default;
+$uv-warning-dark: #f1a532 !default;
+$uv-warning-disabled: #f9d39b !default;
+$uv-warning-light: #fdf6ec !default;
+
+$uv-success: #5ac725 !default;
+$uv-success-dark: #53c21d !default;
+$uv-success-disabled: #a9e08f !default;
+$uv-success-light: #f5fff0;
+
+$uv-error: #f56c6c !default;
+$uv-error-dark: #e45656 !default;
+$uv-error-disabled: #f7b2b2 !default;
+$uv-error-light: #fef0f0 !default;
+
+$uv-info: #909399 !default;
+$uv-info-dark: #767a82 !default;
+$uv-info-disabled: #c4c6c9 !default;
+$uv-info-light: #f4f4f5 !default;
diff --git a/uni_modules/uv-ui-tools/libs/css/common.scss b/uni_modules/uv-ui-tools/libs/css/common.scss
new file mode 100644
index 0000000..7ab99f8
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/css/common.scss
@@ -0,0 +1,100 @@
+// 超出行数,自动显示行尾省略号,最多5行
+// 来自uvui的温馨提示:当您在控制台看到此报错,说明需要在App.vue的style标签加上【lang="scss"】
+@for $i from 1 through 5 {
+ .uv-line-#{$i} {
+ /* #ifdef APP-NVUE */
+ // nvue下,可以直接使用lines属性,这是weex特有样式
+ lines: $i;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ flex: 1;
+ /* #endif */
+
+ /* #ifndef APP-NVUE */
+ // vue下,单行和多行显示省略号需要单独处理
+ @if $i == '1' {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ } @else {
+ display: -webkit-box!important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ -webkit-line-clamp: $i;
+ -webkit-box-orient: vertical!important;
+ }
+ /* #endif */
+ }
+}
+$uv-bordercolor: #dadbde;
+@if variable-exists(uv-border-color) {
+ $uv-bordercolor: $uv-border-color;
+}
+
+// 此处加上!important并非随意乱用,而是因为目前*.nvue页面编译到H5时,
+// App.vue的样式会被uni-app的view元素的自带border属性覆盖,导致无效
+// 综上,这是uni-app的缺陷导致我们为了多端兼容,而必须要加上!important
+// 移动端兼容性较好,直接使用0.5px去实现细边框,不使用伪元素形式实现
+.uv-border {
+ border-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-style: solid;
+}
+
+.uv-border-top {
+ border-top-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-top-style: solid;
+}
+
+.uv-border-left {
+ border-left-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-left-style: solid;
+}
+
+.uv-border-right {
+ border-right-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-right-style: solid;
+}
+
+.uv-border-bottom {
+ border-bottom-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-bottom-style: solid;
+}
+
+.uv-border-top-bottom {
+ border-top-width: 0.5px!important;
+ border-bottom-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-top-style: solid;
+ border-bottom-style: solid;
+}
+
+// 去除button的所有默认样式,让其表现跟普通的view、text元素一样
+.uv-reset-button {
+ padding: 0;
+ background-color: transparent;
+ /* #ifndef APP-PLUS */
+ font-size: inherit;
+ line-height: inherit;
+ color: inherit;
+ /* #endif */
+ /* #ifdef APP-NVUE */
+ border-width: 0;
+ /* #endif */
+}
+
+/* #ifndef APP-NVUE */
+.uv-reset-button::after {
+ border: none;
+}
+/* #endif */
+
+.uv-hover-class {
+ opacity: 0.7;
+}
+
diff --git a/uni_modules/uv-ui-tools/libs/css/components.scss b/uni_modules/uv-ui-tools/libs/css/components.scss
new file mode 100644
index 0000000..81ce15d
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/css/components.scss
@@ -0,0 +1,23 @@
+@mixin flex($direction: row) {
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ flex-direction: $direction;
+}
+
+/* #ifndef APP-NVUE */
+// 由于uvui是基于nvue环境进行开发的,此环境中普通元素默认为flex-direction: column;
+// 所以在非nvue中,需要对元素进行重置为flex-direction: column; 否则可能会表现异常
+$uvui-nvue-style: true !default;
+@if $uvui-nvue-style == true {
+ view, scroll-view, swiper-item {
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 0;
+ flex-grow: 0;
+ flex-basis: auto;
+ align-items: stretch;
+ align-content: flex-start;
+ }
+}
+/* #endif */
diff --git a/uni_modules/uv-ui-tools/libs/css/variable.scss b/uni_modules/uv-ui-tools/libs/css/variable.scss
new file mode 100644
index 0000000..63903c9
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/css/variable.scss
@@ -0,0 +1,111 @@
+// 超出行数,自动显示行尾省略号,最多5行
+// 来自uvui的温馨提示:当您在控制台看到此报错,说明需要在App.vue的style标签加上【lang="scss"】
+@if variable-exists(show-lines) {
+ @for $i from 1 through 5 {
+ .uv-line-#{$i} {
+ /* #ifdef APP-NVUE */
+ // nvue下,可以直接使用lines属性,这是weex特有样式
+ lines: $i;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ flex: 1;
+ /* #endif */
+
+ /* #ifndef APP-NVUE */
+ // vue下,单行和多行显示省略号需要单独处理
+ @if $i == '1' {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ } @else {
+ display: -webkit-box!important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ word-break: break-all;
+ -webkit-line-clamp: $i;
+ -webkit-box-orient: vertical!important;
+ }
+ /* #endif */
+ }
+ }
+}
+@if variable-exists(show-border) {
+ $uv-bordercolor: #dadbde;
+ @if variable-exists(uv-border-color) {
+ $uv-bordercolor: $uv-border-color;
+ }
+ // 此处加上!important并非随意乱用,而是因为目前*.nvue页面编译到H5时,
+ // App.vue的样式会被uni-app的view元素的自带border属性覆盖,导致无效
+ // 综上,这是uni-app的缺陷导致我们为了多端兼容,而必须要加上!important
+ // 移动端兼容性较好,直接使用0.5px去实现细边框,不使用伪元素形式实现
+ @if variable-exists(show-border-surround) {
+ .uv-border {
+ border-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-style: solid;
+ }
+ }
+ @if variable-exists(show-border-top) {
+ .uv-border-top {
+ border-top-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-top-style: solid;
+ }
+ }
+ @if variable-exists(show-border-left) {
+ .uv-border-left {
+ border-left-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-left-style: solid;
+ }
+ }
+ @if variable-exists(show-border-right) {
+ .uv-border-right {
+ border-right-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-right-style: solid;
+ }
+ }
+ @if variable-exists(show-border-bottom) {
+ .uv-border-bottom {
+ border-bottom-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-bottom-style: solid;
+ }
+ }
+ @if variable-exists(show-border-top-bottom) {
+ .uv-border-top-bottom {
+ border-top-width: 0.5px!important;
+ border-bottom-width: 0.5px!important;
+ border-color: $uv-bordercolor!important;
+ border-top-style: solid;
+ border-bottom-style: solid;
+ }
+ }
+}
+@if variable-exists(show-reset-button) {
+ // 去除button的所有默认样式,让其表现跟普通的view、text元素一样
+ .uv-reset-button {
+ padding: 0;
+ background-color: transparent;
+ /* #ifndef APP-PLUS */
+ font-size: inherit;
+ line-height: inherit;
+ color: inherit;
+ /* #endif */
+ /* #ifdef APP-NVUE */
+ border-width: 0;
+ /* #endif */
+ }
+
+ /* #ifndef APP-NVUE */
+ .uv-reset-button::after {
+ border: none;
+ }
+ /* #endif */
+}
+@if variable-exists(show-hover) {
+ .uv-hover-class {
+ opacity: 0.7;
+ }
+}
diff --git a/uni_modules/uv-ui-tools/libs/css/vue.scss b/uni_modules/uv-ui-tools/libs/css/vue.scss
new file mode 100644
index 0000000..bdbefdd
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/css/vue.scss
@@ -0,0 +1,40 @@
+// 历遍生成4个方向的底部安全区
+@each $d in top, right, bottom, left {
+ .uv-safe-area-inset-#{$d} {
+ padding-#{$d}: 0;
+ padding-#{$d}: constant(safe-area-inset-#{$d});
+ padding-#{$d}: env(safe-area-inset-#{$d});
+ }
+}
+
+//提升H5端uni.toast()的层级,避免被uvui的modal等遮盖
+/* #ifdef H5 */
+uni-toast {
+ z-index: 10090;
+}
+uni-toast .uni-toast {
+ z-index: 10090;
+}
+/* #endif */
+
+// 隐藏scroll-view的滚动条
+::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ -webkit-appearance: none;
+ background: transparent;
+}
+
+$uvui-nvue-style: true !default;
+@if $uvui-nvue-style == false {
+ view, scroll-view, swiper-item {
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 0;
+ flex-grow: 0;
+ flex-basis: auto;
+ align-items: stretch;
+ align-content: flex-start;
+ }
+}
diff --git a/uni_modules/uv-ui-tools/libs/function/colorGradient.js b/uni_modules/uv-ui-tools/libs/function/colorGradient.js
new file mode 100644
index 0000000..55c188f
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/colorGradient.js
@@ -0,0 +1,134 @@
+/**
+ * 求两个颜色之间的渐变值
+ * @param {string} startColor 开始的颜色
+ * @param {string} endColor 结束的颜色
+ * @param {number} step 颜色等分的份额
+ * */
+function colorGradient(startColor = 'rgb(0, 0, 0)', endColor = 'rgb(255, 255, 255)', step = 10) {
+ const startRGB = hexToRgb(startColor, false) // 转换为rgb数组模式
+ const startR = startRGB[0]
+ const startG = startRGB[1]
+ const startB = startRGB[2]
+
+ const endRGB = hexToRgb(endColor, false)
+ const endR = endRGB[0]
+ const endG = endRGB[1]
+ const endB = endRGB[2]
+
+ const sR = (endR - startR) / step // 总差值
+ const sG = (endG - startG) / step
+ const sB = (endB - startB) / step
+ const colorArr = []
+ for (let i = 0; i < step; i++) {
+ // 计算每一步的hex值
+ let hex = rgbToHex(`rgb(${Math.round((sR * i + startR))},${Math.round((sG * i + startG))},${Math.round((sB
+ * i + startB))})`)
+ // 确保第一个颜色值为startColor的值
+ if (i === 0) hex = rgbToHex(startColor)
+ // 确保最后一个颜色值为endColor的值
+ if (i === step - 1) hex = rgbToHex(endColor)
+ colorArr.push(hex)
+ }
+ return colorArr
+}
+
+// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
+function hexToRgb(sColor, str = true) {
+ const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/
+ sColor = String(sColor).toLowerCase()
+ if (sColor && reg.test(sColor)) {
+ if (sColor.length === 4) {
+ let sColorNew = '#'
+ for (let i = 1; i < 4; i += 1) {
+ sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))
+ }
+ sColor = sColorNew
+ }
+ // 处理六位的颜色值
+ const sColorChange = []
+ for (let i = 1; i < 7; i += 2) {
+ sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`))
+ }
+ if (!str) {
+ return sColorChange
+ }
+ return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`
+ } if (/^(rgb|RGB)/.test(sColor)) {
+ const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',')
+ return arr.map((val) => Number(val))
+ }
+ return sColor
+}
+
+// 将rgb表示方式转换为hex表示方式
+function rgbToHex(rgb) {
+ const _this = rgb
+ const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/
+ if (/^(rgb|RGB)/.test(_this)) {
+ const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',')
+ let strHex = '#'
+ for (let i = 0; i < aColor.length; i++) {
+ let hex = Number(aColor[i]).toString(16)
+ hex = String(hex).length == 1 ? `${0}${hex}` : hex // 保证每个rgb的值为2位
+ if (hex === '0') {
+ hex += hex
+ }
+ strHex += hex
+ }
+ if (strHex.length !== 7) {
+ strHex = _this
+ }
+ return strHex
+ } if (reg.test(_this)) {
+ const aNum = _this.replace(/#/, '').split('')
+ if (aNum.length === 6) {
+ return _this
+ } if (aNum.length === 3) {
+ let numHex = '#'
+ for (let i = 0; i < aNum.length; i += 1) {
+ numHex += (aNum[i] + aNum[i])
+ }
+ return numHex
+ }
+ } else {
+ return _this
+ }
+}
+
+/**
+* JS颜色十六进制转换为rgb或rgba,返回的格式为 rgba(255,255,255,0.5)字符串
+* sHex为传入的十六进制的色值
+* alpha为rgba的透明度
+*/
+function colorToRgba(color, alpha) {
+ color = rgbToHex(color)
+ // 十六进制颜色值的正则表达式
+ const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/
+ /* 16进制颜色转为RGB格式 */
+ let sColor = String(color).toLowerCase()
+ if (sColor && reg.test(sColor)) {
+ if (sColor.length === 4) {
+ let sColorNew = '#'
+ for (let i = 1; i < 4; i += 1) {
+ sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))
+ }
+ sColor = sColorNew
+ }
+ // 处理六位的颜色值
+ const sColorChange = []
+ for (let i = 1; i < 7; i += 2) {
+ sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`))
+ }
+ // return sColorChange.join(',')
+ return `rgba(${sColorChange.join(',')},${alpha})`
+ }
+
+ return sColor
+}
+
+export {
+ colorGradient,
+ hexToRgb,
+ rgbToHex,
+ colorToRgba
+}
diff --git a/uni_modules/uv-ui-tools/libs/function/debounce.js b/uni_modules/uv-ui-tools/libs/function/debounce.js
new file mode 100644
index 0000000..ad3996b
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/debounce.js
@@ -0,0 +1,29 @@
+let timeout = null
+
+/**
+ * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数
+ *
+ * @param {Function} func 要执行的回调函数
+ * @param {Number} wait 延时的时间
+ * @param {Boolean} immediate 是否立即执行
+ * @return null
+ */
+function debounce(func, wait = 500, immediate = false) {
+ // 清除定时器
+ if (timeout !== null) clearTimeout(timeout)
+ // 立即执行,此类情况一般用不到
+ if (immediate) {
+ const callNow = !timeout
+ timeout = setTimeout(() => {
+ timeout = null
+ }, wait)
+ if (callNow) typeof func === 'function' && func()
+ } else {
+ // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法
+ timeout = setTimeout(() => {
+ typeof func === 'function' && func()
+ }, wait)
+ }
+}
+
+export default debounce
diff --git a/uni_modules/uv-ui-tools/libs/function/digit.js b/uni_modules/uv-ui-tools/libs/function/digit.js
new file mode 100644
index 0000000..c8260a0
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/digit.js
@@ -0,0 +1,167 @@
+let _boundaryCheckingState = true; // 是否进行越界检查的全局开关
+
+/**
+ * 把错误的数据转正
+ * @private
+ * @example strip(0.09999999999999998)=0.1
+ */
+function strip(num, precision = 15) {
+ return +parseFloat(Number(num).toPrecision(precision));
+}
+
+/**
+ * Return digits length of a number
+ * @private
+ * @param {*number} num Input number
+ */
+function digitLength(num) {
+ // Get digit length of e
+ const eSplit = num.toString().split(/[eE]/);
+ const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);
+ return len > 0 ? len : 0;
+}
+
+/**
+ * 把小数转成整数,如果是小数则放大成整数
+ * @private
+ * @param {*number} num 输入数
+ */
+function float2Fixed(num) {
+ if (num.toString().indexOf('e') === -1) {
+ return Number(num.toString().replace('.', ''));
+ }
+ const dLen = digitLength(num);
+ return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);
+}
+
+/**
+ * 检测数字是否越界,如果越界给出提示
+ * @private
+ * @param {*number} num 输入数
+ */
+function checkBoundary(num) {
+ if (_boundaryCheckingState) {
+ if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
+ console.warn(`${num} 超出了精度限制,结果可能不正确`);
+ }
+ }
+}
+
+/**
+ * 把递归操作扁平迭代化
+ * @param {number[]} arr 要操作的数字数组
+ * @param {function} operation 迭代操作
+ * @private
+ */
+function iteratorOperation(arr, operation) {
+ const [num1, num2, ...others] = arr;
+ let res = operation(num1, num2);
+
+ others.forEach((num) => {
+ res = operation(res, num);
+ });
+
+ return res;
+}
+
+/**
+ * 高精度乘法
+ * @export
+ */
+export function times(...nums) {
+ if (nums.length > 2) {
+ return iteratorOperation(nums, times);
+ }
+
+ const [num1, num2] = nums;
+ const num1Changed = float2Fixed(num1);
+ const num2Changed = float2Fixed(num2);
+ const baseNum = digitLength(num1) + digitLength(num2);
+ const leftValue = num1Changed * num2Changed;
+
+ checkBoundary(leftValue);
+
+ return leftValue / Math.pow(10, baseNum);
+}
+
+/**
+ * 高精度加法
+ * @export
+ */
+export function plus(...nums) {
+ if (nums.length > 2) {
+ return iteratorOperation(nums, plus);
+ }
+
+ const [num1, num2] = nums;
+ // 取最大的小数位
+ const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
+ // 把小数都转为整数然后再计算
+ return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;
+}
+
+/**
+ * 高精度减法
+ * @export
+ */
+export function minus(...nums) {
+ if (nums.length > 2) {
+ return iteratorOperation(nums, minus);
+ }
+
+ const [num1, num2] = nums;
+ const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));
+ return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;
+}
+
+/**
+ * 高精度除法
+ * @export
+ */
+export function divide(...nums) {
+ if (nums.length > 2) {
+ return iteratorOperation(nums, divide);
+ }
+
+ const [num1, num2] = nums;
+ const num1Changed = float2Fixed(num1);
+ const num2Changed = float2Fixed(num2);
+ checkBoundary(num1Changed);
+ checkBoundary(num2Changed);
+ // 重要,这里必须用strip进行修正
+ return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));
+}
+
+/**
+ * 四舍五入
+ * @export
+ */
+export function round(num, ratio) {
+ const base = Math.pow(10, ratio);
+ let result = divide(Math.round(Math.abs(times(num, base))), base);
+ if (num < 0 && result !== 0) {
+ result = times(result, -1);
+ }
+ // 位数不足则补0
+ return result;
+}
+
+/**
+ * 是否进行边界检查,默认开启
+ * @param flag 标记开关,true 为开启,false 为关闭,默认为 true
+ * @export
+ */
+export function enableBoundaryChecking(flag = true) {
+ _boundaryCheckingState = flag;
+}
+
+
+export default {
+ times,
+ plus,
+ minus,
+ divide,
+ round,
+ enableBoundaryChecking,
+};
+
diff --git a/uni_modules/uv-ui-tools/libs/function/index.js b/uni_modules/uv-ui-tools/libs/function/index.js
new file mode 100644
index 0000000..b35e0ab
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/index.js
@@ -0,0 +1,734 @@
+import { number, empty } from './test.js'
+import { round } from './digit.js'
+/**
+ * @description 如果value小于min,取min;如果value大于max,取max
+ * @param {number} min
+ * @param {number} max
+ * @param {number} value
+ */
+function range(min = 0, max = 0, value = 0) {
+ return Math.max(min, Math.min(max, Number(value)))
+}
+
+/**
+ * @description 用于获取用户传递值的px值 如果用户传递了"xxpx"或者"xxrpx",取出其数值部分,如果是"xxxrpx"还需要用过uni.upx2px进行转换
+ * @param {number|string} value 用户传递值的px值
+ * @param {boolean} unit
+ * @returns {number|string}
+ */
+function getPx(value, unit = false) {
+ if (number(value)) {
+ return unit ? `${value}px` : Number(value)
+ }
+ // 如果带有rpx,先取出其数值部分,再转为px值
+ if (/(rpx|upx)$/.test(value)) {
+ return unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value)))
+ }
+ return unit ? `${parseInt(value)}px` : parseInt(value)
+}
+
+/**
+ * @description 进行延时,以达到可以简写代码的目的 比如: await uni.$uv.sleep(20)将会阻塞20ms
+ * @param {number} value 堵塞时间 单位ms 毫秒
+ * @returns {Promise} 返回promise
+ */
+function sleep(value = 30) {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ resolve()
+ }, value)
+ })
+}
+/**
+ * @description 运行期判断平台
+ * @returns {string} 返回所在平台(小写)
+ * @link 运行期判断平台 https://uniapp.dcloud.io/frame?id=判断平台
+ */
+function os() {
+ return uni.getSystemInfoSync().platform.toLowerCase()
+}
+/**
+ * @description 获取系统信息同步接口
+ * @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync
+ */
+function sys() {
+ return uni.getSystemInfoSync()
+}
+
+/**
+ * @description 取一个区间数
+ * @param {Number} min 最小值
+ * @param {Number} max 最大值
+ */
+function random(min, max) {
+ if (min >= 0 && max > 0 && max >= min) {
+ const gab = max - min + 1
+ return Math.floor(Math.random() * gab + min)
+ }
+ return 0
+}
+
+/**
+ * @param {Number} len uuid的长度
+ * @param {Boolean} firstU 将返回的首字母置为"u"
+ * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
+ */
+function guid(len = 32, firstU = true, radix = null) {
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+ const uuid = []
+ radix = radix || chars.length
+
+ if (len) {
+ // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
+ for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
+ } else {
+ let r
+ // rfc4122标准要求返回的uuid中,某些位为固定的字符
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
+ uuid[14] = '4'
+
+ for (let i = 0; i < 36; i++) {
+ if (!uuid[i]) {
+ r = 0 | Math.random() * 16
+ uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]
+ }
+ }
+ }
+ // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
+ if (firstU) {
+ uuid.shift()
+ return `u${uuid.join('')}`
+ }
+ return uuid.join('')
+}
+
+/**
+* @description 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
+ this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
+ 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
+ 值(默认为undefined),就是查找最顶层的$parent
+* @param {string|undefined} name 父组件的参数名
+*/
+function $parent(name = undefined) {
+ let parent = this.$parent
+ // 通过while历遍,这里主要是为了H5需要多层解析的问题
+ while (parent) {
+ // 父组件
+ if (parent.$options && parent.$options.name !== name) {
+ // 如果组件的name不相等,继续上一级寻找
+ parent = parent.$parent
+ } else {
+ return parent
+ }
+ }
+ return false
+}
+
+/**
+ * @description 样式转换
+ * 对象转字符串,或者字符串转对象
+ * @param {object | string} customStyle 需要转换的目标
+ * @param {String} target 转换的目的,object-转为对象,string-转为字符串
+ * @returns {object|string}
+ */
+function addStyle(customStyle, target = 'object') {
+ // 字符串转字符串,对象转对象情形,直接返回
+ if (empty(customStyle) || typeof(customStyle) === 'object' && target === 'object' || target === 'string' &&
+ typeof(customStyle) === 'string') {
+ return customStyle
+ }
+ // 字符串转对象
+ if (target === 'object') {
+ // 去除字符串样式中的两端空格(中间的空格不能去掉,比如padding: 20px 0如果去掉了就错了),空格是无用的
+ customStyle = trim(customStyle)
+ // 根据";"将字符串转为数组形式
+ const styleArray = customStyle.split(';')
+ const style = {}
+ // 历遍数组,拼接成对象
+ for (let i = 0; i < styleArray.length; i++) {
+ // 'font-size:20px;color:red;',如此最后字符串有";"的话,会导致styleArray最后一个元素为空字符串,这里需要过滤
+ if (styleArray[i]) {
+ const item = styleArray[i].split(':')
+ style[trim(item[0])] = trim(item[1])
+ }
+ }
+ return style
+ }
+ // 这里为对象转字符串形式
+ let string = ''
+ for (const i in customStyle) {
+ // 驼峰转为中划线的形式,否则css内联样式,无法识别驼峰样式属性名
+ const key = i.replace(/([A-Z])/g, '-$1').toLowerCase()
+ string += `${key}:${customStyle[i]};`
+ }
+ // 去除两端空格
+ return trim(string)
+}
+
+/**
+ * @description 添加单位,如果有rpx,upx,%,px等单位结尾或者值为auto,直接返回,否则加上px单位结尾
+ * @param {string|number} value 需要添加单位的值
+ * @param {string} unit 添加的单位名 比如px
+ */
+function addUnit(value = 'auto', unit = uni?.$uv?.config?.unit ? uni?.$uv?.config?.unit : 'px') {
+ value = String(value)
+ // 用uvui内置验证规则中的number判断是否为数值
+ return number(value) ? `${value}${unit}` : value
+}
+
+/**
+ * @description 深度克隆
+ * @param {object} obj 需要深度克隆的对象
+ * @param cache 缓存
+ * @returns {*} 克隆后的对象或者原值(不是对象)
+ */
+function deepClone(obj, cache = new WeakMap()) {
+ if (obj === null || typeof obj !== 'object') return obj;
+ if (cache.has(obj)) return cache.get(obj);
+ let clone;
+ if (obj instanceof Date) {
+ clone = new Date(obj.getTime());
+ } else if (obj instanceof RegExp) {
+ clone = new RegExp(obj);
+ } else if (obj instanceof Map) {
+ clone = new Map(Array.from(obj, ([key, value]) => [key, deepClone(value, cache)]));
+ } else if (obj instanceof Set) {
+ clone = new Set(Array.from(obj, value => deepClone(value, cache)));
+ } else if (Array.isArray(obj)) {
+ clone = obj.map(value => deepClone(value, cache));
+ } else if (Object.prototype.toString.call(obj) === '[object Object]') {
+ clone = Object.create(Object.getPrototypeOf(obj));
+ cache.set(obj, clone);
+ for (const [key, value] of Object.entries(obj)) {
+ clone[key] = deepClone(value, cache);
+ }
+ } else {
+ clone = Object.assign({}, obj);
+ }
+ cache.set(obj, clone);
+ return clone;
+}
+
+/**
+ * @description JS对象深度合并
+ * @param {object} target 需要拷贝的对象
+ * @param {object} source 拷贝的来源对象
+ * @returns {object|boolean} 深度合并后的对象或者false(入参有不是对象)
+ */
+function deepMerge(target = {}, source = {}) {
+ target = deepClone(target)
+ if (typeof target !== 'object' || target === null || typeof source !== 'object' || source === null) return target;
+ const merged = Array.isArray(target) ? target.slice() : Object.assign({}, target);
+ for (const prop in source) {
+ if (!source.hasOwnProperty(prop)) continue;
+ const sourceValue = source[prop];
+ const targetValue = merged[prop];
+ if (sourceValue instanceof Date) {
+ merged[prop] = new Date(sourceValue);
+ } else if (sourceValue instanceof RegExp) {
+ merged[prop] = new RegExp(sourceValue);
+ } else if (sourceValue instanceof Map) {
+ merged[prop] = new Map(sourceValue);
+ } else if (sourceValue instanceof Set) {
+ merged[prop] = new Set(sourceValue);
+ } else if (typeof sourceValue === 'object' && sourceValue !== null) {
+ merged[prop] = deepMerge(targetValue, sourceValue);
+ } else {
+ merged[prop] = sourceValue;
+ }
+ }
+ return merged;
+}
+
+/**
+ * @description error提示
+ * @param {*} err 错误内容
+ */
+function error(err) {
+ // 开发环境才提示,生产环境不会提示
+ if (process.env.NODE_ENV === 'development') {
+ console.error(`uvui提示:${err}`)
+ }
+}
+
+/**
+ * @description 打乱数组
+ * @param {array} array 需要打乱的数组
+ * @returns {array} 打乱后的数组
+ */
+function randomArray(array = []) {
+ // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0
+ return array.sort(() => Math.random() - 0.5)
+}
+
+// padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
+// 所以这里做一个兼容polyfill的兼容处理
+if (!String.prototype.padStart) {
+ // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
+ String.prototype.padStart = function(maxLength, fillString = ' ') {
+ if (Object.prototype.toString.call(fillString) !== '[object String]') {
+ throw new TypeError(
+ 'fillString must be String'
+ )
+ }
+ const str = this
+ // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
+ if (str.length >= maxLength) return String(str)
+
+ const fillLength = maxLength - str.length
+ let times = Math.ceil(fillLength / fillString.length)
+ while (times >>= 1) {
+ fillString += fillString
+ if (times === 1) {
+ fillString += fillString
+ }
+ }
+ return fillString.slice(0, fillLength) + str
+ }
+}
+
+/**
+ * @description 格式化时间
+ * @param {String|Number} dateTime 需要格式化的时间戳
+ * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 默认yyyy-mm-dd
+ * @returns {string} 返回格式化后的字符串
+ */
+function timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') {
+ let date
+ // 若传入时间为假值,则取当前时间
+ if (!dateTime) {
+ date = new Date()
+ }
+ // 若为unix秒时间戳,则转为毫秒时间戳(逻辑有点奇怪,但不敢改,以保证历史兼容)
+ else if (/^\d{10}$/.test(dateTime?.toString().trim())) {
+ date = new Date(dateTime * 1000)
+ }
+ // 若用户传入字符串格式时间戳,new Date无法解析,需做兼容
+ else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
+ date = new Date(Number(dateTime))
+ }
+ // 处理平台性差异,在Safari/Webkit中,new Date仅支持/作为分割符的字符串时间
+ // 处理 '2022-07-10 01:02:03',跳过 '2022-07-10T01:02:03'
+ else if (typeof dateTime === 'string' && dateTime.includes('-') && !dateTime.includes('T')) {
+ date = new Date(dateTime.replace(/-/g, '/'))
+ }
+ // 其他都认为符合 RFC 2822 规范
+ else {
+ date = new Date(dateTime)
+ }
+
+ const timeSource = {
+ 'y': date.getFullYear().toString(), // 年
+ 'm': (date.getMonth() + 1).toString().padStart(2, '0'), // 月
+ 'd': date.getDate().toString().padStart(2, '0'), // 日
+ 'h': date.getHours().toString().padStart(2, '0'), // 时
+ 'M': date.getMinutes().toString().padStart(2, '0'), // 分
+ 's': date.getSeconds().toString().padStart(2, '0') // 秒
+ // 有其他格式化字符需求可以继续添加,必须转化成字符串
+ }
+
+ for (const key in timeSource) {
+ const [ret] = new RegExp(`${key}+`).exec(formatStr) || []
+ if (ret) {
+ // 年可能只需展示两位
+ const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0
+ formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))
+ }
+ }
+
+ return formatStr
+}
+
+/**
+ * @description 时间戳转为多久之前
+ * @param {String|Number} timestamp 时间戳
+ * @param {String|Boolean} format
+ * 格式化规则如果为时间格式字符串,超出一定时间范围,返回固定的时间格式;
+ * 如果为布尔值false,无论什么时间,都返回多久以前的格式
+ * @returns {string} 转化后的内容
+ */
+function timeFrom(timestamp = null, format = 'yyyy-mm-dd') {
+ if (timestamp == null) timestamp = Number(new Date())
+ timestamp = parseInt(timestamp)
+ // 判断用户输入的时间戳是秒还是毫秒,一般前端js获取的时间戳是毫秒(13位),后端传过来的为秒(10位)
+ if (timestamp.toString().length == 10) timestamp *= 1000
+ let timer = (new Date()).getTime() - timestamp
+ timer = parseInt(timer / 1000)
+ // 如果小于5分钟,则返回"刚刚",其他以此类推
+ let tips = ''
+ switch (true) {
+ case timer < 300:
+ tips = '刚刚'
+ break
+ case timer >= 300 && timer < 3600:
+ tips = `${parseInt(timer / 60)}分钟前`
+ break
+ case timer >= 3600 && timer < 86400:
+ tips = `${parseInt(timer / 3600)}小时前`
+ break
+ case timer >= 86400 && timer < 2592000:
+ tips = `${parseInt(timer / 86400)}天前`
+ break
+ default:
+ // 如果format为false,则无论什么时间戳,都显示xx之前
+ if (format === false) {
+ if (timer >= 2592000 && timer < 365 * 86400) {
+ tips = `${parseInt(timer / (86400 * 30))}个月前`
+ } else {
+ tips = `${parseInt(timer / (86400 * 365))}年前`
+ }
+ } else {
+ tips = timeFormat(timestamp, format)
+ }
+ }
+ return tips
+}
+
+/**
+ * @description 去除空格
+ * @param String str 需要去除空格的字符串
+ * @param String pos both(左右)|left|right|all 默认both
+ */
+function trim(str, pos = 'both') {
+ str = String(str)
+ if (pos == 'both') {
+ return str.replace(/^\s+|\s+$/g, '')
+ }
+ if (pos == 'left') {
+ return str.replace(/^\s*/, '')
+ }
+ if (pos == 'right') {
+ return str.replace(/(\s*$)/g, '')
+ }
+ if (pos == 'all') {
+ return str.replace(/\s+/g, '')
+ }
+ return str
+}
+
+/**
+ * @description 对象转url参数
+ * @param {object} data,对象
+ * @param {Boolean} isPrefix,是否自动加上"?"
+ * @param {string} arrayFormat 规则 indices|brackets|repeat|comma
+ */
+function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {
+ const prefix = isPrefix ? '?' : ''
+ const _result = []
+ if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets'
+ for (const key in data) {
+ const value = data[key]
+ // 去掉为空的参数
+ if (['', undefined, null].indexOf(value) >= 0) {
+ continue
+ }
+ // 如果值为数组,另行处理
+ if (value.constructor === Array) {
+ // e.g. {ids: [1, 2, 3]}
+ switch (arrayFormat) {
+ case 'indices':
+ // 结果: ids[0]=1&ids[1]=2&ids[2]=3
+ for (let i = 0; i < value.length; i++) {
+ _result.push(`${key}[${i}]=${value[i]}`)
+ }
+ break
+ case 'brackets':
+ // 结果: ids[]=1&ids[]=2&ids[]=3
+ value.forEach((_value) => {
+ _result.push(`${key}[]=${_value}`)
+ })
+ break
+ case 'repeat':
+ // 结果: ids=1&ids=2&ids=3
+ value.forEach((_value) => {
+ _result.push(`${key}=${_value}`)
+ })
+ break
+ case 'comma':
+ // 结果: ids=1,2,3
+ let commaStr = ''
+ value.forEach((_value) => {
+ commaStr += (commaStr ? ',' : '') + _value
+ })
+ _result.push(`${key}=${commaStr}`)
+ break
+ default:
+ value.forEach((_value) => {
+ _result.push(`${key}[]=${_value}`)
+ })
+ }
+ } else {
+ _result.push(`${key}=${value}`)
+ }
+ }
+ return _result.length ? prefix + _result.join('&') : ''
+}
+
+/**
+ * 显示消息提示框
+ * @param {String} title 提示的内容,长度与 icon 取值有关。
+ * @param {Number} duration 提示的延迟时间,单位毫秒,默认:2000
+ */
+function toast(title, duration = 2000) {
+ uni.showToast({
+ title: String(title),
+ icon: 'none',
+ duration
+ })
+}
+
+/**
+ * @description 根据主题type值,获取对应的图标
+ * @param {String} type 主题名称,primary|info|error|warning|success
+ * @param {boolean} fill 是否使用fill填充实体的图标
+ */
+function type2icon(type = 'success', fill = false) {
+ // 如果非预置值,默认为success
+ if (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success'
+ let iconName = ''
+ // 目前(2019-12-12),info和primary使用同一个图标
+ switch (type) {
+ case 'primary':
+ iconName = 'info-circle'
+ break
+ case 'info':
+ iconName = 'info-circle'
+ break
+ case 'error':
+ iconName = 'close-circle'
+ break
+ case 'warning':
+ iconName = 'error-circle'
+ break
+ case 'success':
+ iconName = 'checkmark-circle'
+ break
+ default:
+ iconName = 'checkmark-circle'
+ }
+ // 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的
+ if (fill) iconName += '-fill'
+ return iconName
+}
+
+/**
+ * @description 数字格式化
+ * @param {number|string} number 要格式化的数字
+ * @param {number} decimals 保留几位小数
+ * @param {string} decimalPoint 小数点符号
+ * @param {string} thousandsSeparator 千分位符号
+ * @returns {string} 格式化后的数字
+ */
+function priceFormat(number, decimals = 0, decimalPoint = '.', thousandsSeparator = ',') {
+ number = (`${number}`).replace(/[^0-9+-Ee.]/g, '')
+ const n = !isFinite(+number) ? 0 : +number
+ const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
+ const sep = (typeof thousandsSeparator === 'undefined') ? ',' : thousandsSeparator
+ const dec = (typeof decimalPoint === 'undefined') ? '.' : decimalPoint
+ let s = ''
+
+ s = (prec ? round(n, prec) + '' : `${Math.round(n)}`).split('.')
+ const re = /(-?\d+)(\d{3})/
+ while (re.test(s[0])) {
+ s[0] = s[0].replace(re, `$1${sep}$2`)
+ }
+
+ if ((s[1] || '').length < prec) {
+ s[1] = s[1] || ''
+ s[1] += new Array(prec - s[1].length + 1).join('0')
+ }
+ return s.join(dec)
+}
+
+/**
+ * @description 获取duration值
+ * 如果带有ms或者s直接返回,如果大于一定值,认为是ms单位,小于一定值,认为是s单位
+ * 比如以30位阈值,那么300大于30,可以理解为用户想要的是300ms,而不是想花300s去执行一个动画
+ * @param {String|number} value 比如: "1s"|"100ms"|1|100
+ * @param {boolean} unit 提示: 如果是false 默认返回number
+ * @return {string|number}
+ */
+function getDuration(value, unit = true) {
+ const valueNum = parseInt(value)
+ if (unit) {
+ if (/s$/.test(value)) return value
+ return value > 30 ? `${value}ms` : `${value}s`
+ }
+ if (/ms$/.test(value)) return valueNum
+ if (/s$/.test(value)) return valueNum > 30 ? valueNum : valueNum * 1000
+ return valueNum
+}
+
+/**
+ * @description 日期的月或日补零操作
+ * @param {String} value 需要补零的值
+ */
+function padZero(value) {
+ return `00${value}`.slice(-2)
+}
+
+/**
+ * @description 在uv-form的子组件内容发生变化,或者失去焦点时,尝试通知uv-form执行校验方法
+ * @param {*} instance
+ * @param {*} event
+ */
+function formValidate(instance, event) {
+ const formItem = $parent.call(instance, 'uv-form-item')
+ const form = $parent.call(instance, 'uv-form')
+ // 如果发生变化的input或者textarea等,其父组件中有uv-form-item或者uv-form等,就执行form的validate方法
+ // 同时将form-item的pros传递给form,让其进行精确对象验证
+ if (formItem && form) {
+ form.validateField(formItem.prop, () => {}, event)
+ }
+}
+
+/**
+ * @description 获取某个对象下的属性,用于通过类似'a.b.c'的形式去获取一个对象的的属性的形式
+ * @param {object} obj 对象
+ * @param {string} key 需要获取的属性字段
+ * @returns {*}
+ */
+function getProperty(obj, key) {
+ if (!obj) {
+ return
+ }
+ if (typeof key !== 'string' || key === '') {
+ return ''
+ }
+ if (key.indexOf('.') !== -1) {
+ const keys = key.split('.')
+ let firstObj = obj[keys[0]] || {}
+
+ for (let i = 1; i < keys.length; i++) {
+ if (firstObj) {
+ firstObj = firstObj[keys[i]]
+ }
+ }
+ return firstObj
+ }
+ return obj[key]
+}
+
+/**
+ * @description 设置对象的属性值,如果'a.b.c'的形式进行设置
+ * @param {object} obj 对象
+ * @param {string} key 需要设置的属性
+ * @param {string} value 设置的值
+ */
+function setProperty(obj, key, value) {
+ if (!obj) {
+ return
+ }
+ // 递归赋值
+ const inFn = function(_obj, keys, v) {
+ // 最后一个属性key
+ if (keys.length === 1) {
+ _obj[keys[0]] = v
+ return
+ }
+ // 0~length-1个key
+ while (keys.length > 1) {
+ const k = keys[0]
+ if (!_obj[k] || (typeof _obj[k] !== 'object')) {
+ _obj[k] = {}
+ }
+ const key = keys.shift()
+ // 自调用判断是否存在属性,不存在则自动创建对象
+ inFn(_obj[k], keys, v)
+ }
+ }
+
+ if (typeof key !== 'string' || key === '') {
+
+ } else if (key.indexOf('.') !== -1) { // 支持多层级赋值操作
+ const keys = key.split('.')
+ inFn(obj, keys, value)
+ } else {
+ obj[key] = value
+ }
+}
+
+/**
+ * @description 获取当前页面路径
+ */
+function page() {
+ const pages = getCurrentPages();
+ const route = pages[pages.length - 1]?.route;
+ // 某些特殊情况下(比如页面进行redirectTo时的一些时机),pages可能为空数组
+ return `/${route ? route : ''}`
+}
+
+/**
+ * @description 获取当前路由栈实例数组
+ */
+function pages() {
+ const pages = getCurrentPages()
+ return pages
+}
+
+/**
+ * 获取页面历史栈指定层实例
+ * @param back {number} [0] - 0或者负数,表示获取历史栈的哪一层,0表示获取当前页面实例,-1 表示获取上一个页面实例。默认0。
+ */
+function getHistoryPage(back = 0) {
+ const pages = getCurrentPages()
+ const len = pages.length
+ return pages[len - 1 + back]
+}
+
+
+
+/**
+ * @description 修改uvui内置属性值
+ * @param {object} props 修改内置props属性
+ * @param {object} config 修改内置config属性
+ * @param {object} color 修改内置color属性
+ * @param {object} zIndex 修改内置zIndex属性
+ */
+function setConfig({
+ props = {},
+ config = {},
+ color = {},
+ zIndex = {}
+}) {
+ const {
+ deepMerge,
+ } = uni.$uv
+ uni.$uv.config = deepMerge(uni.$uv.config, config)
+ uni.$uv.props = deepMerge(uni.$uv.props, props)
+ uni.$uv.color = deepMerge(uni.$uv.color, color)
+ uni.$uv.zIndex = deepMerge(uni.$uv.zIndex, zIndex)
+}
+
+export {
+ range,
+ getPx,
+ sleep,
+ os,
+ sys,
+ random,
+ guid,
+ $parent,
+ addStyle,
+ addUnit,
+ deepClone,
+ deepMerge,
+ error,
+ randomArray,
+ timeFormat,
+ timeFrom,
+ trim,
+ queryParams,
+ toast,
+ type2icon,
+ priceFormat,
+ getDuration,
+ padZero,
+ formValidate,
+ getProperty,
+ setProperty,
+ page,
+ pages,
+ getHistoryPage,
+ setConfig
+}
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/libs/function/platform.js b/uni_modules/uv-ui-tools/libs/function/platform.js
new file mode 100644
index 0000000..d6b926e
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/platform.js
@@ -0,0 +1,75 @@
+/**
+ * 注意:
+ * 此部分内容,在vue-cli模式下,需要在vue.config.js加入如下内容才有效:
+ * module.exports = {
+ * transpileDependencies: ['uview-v2']
+ * }
+ */
+
+let platform = 'none'
+
+// #ifdef VUE3
+platform = 'vue3'
+// #endif
+
+// #ifdef VUE2
+platform = 'vue2'
+// #endif
+
+// #ifdef APP-PLUS
+platform = 'plus'
+// #endif
+
+// #ifdef APP-NVUE
+platform = 'nvue'
+// #endif
+
+// #ifdef H5
+platform = 'h5'
+// #endif
+
+// #ifdef MP-WEIXIN
+platform = 'weixin'
+// #endif
+
+// #ifdef MP-ALIPAY
+platform = 'alipay'
+// #endif
+
+// #ifdef MP-BAIDU
+platform = 'baidu'
+// #endif
+
+// #ifdef MP-TOUTIAO
+platform = 'toutiao'
+// #endif
+
+// #ifdef MP-QQ
+platform = 'qq'
+// #endif
+
+// #ifdef MP-KUAISHOU
+platform = 'kuaishou'
+// #endif
+
+// #ifdef MP-360
+platform = '360'
+// #endif
+
+// #ifdef MP
+platform = 'mp'
+// #endif
+
+// #ifdef QUICKAPP-WEBVIEW
+platform = 'quickapp-webview'
+// #endif
+
+// #ifdef QUICKAPP-WEBVIEW-HUAWEI
+platform = 'quickapp-webview-huawei'
+// #endif
+
+// #ifdef QUICKAPP-WEBVIEW-UNION
+platform = 'quckapp-webview-union'
+// #endif
+
+export default platform
diff --git a/uni_modules/uv-ui-tools/libs/function/test.js b/uni_modules/uv-ui-tools/libs/function/test.js
new file mode 100644
index 0000000..7c8b747
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/test.js
@@ -0,0 +1,287 @@
+/**
+ * 验证电子邮箱格式
+ */
+function email(value) {
+ return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value)
+}
+
+/**
+ * 验证手机格式
+ */
+function mobile(value) {
+ return /^1([3589]\d|4[5-9]|6[1-2,4-7]|7[0-8])\d{8}$/.test(value)
+}
+
+/**
+ * 验证URL格式
+ */
+function url(value) {
+ return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/
+ .test(value)
+}
+
+/**
+ * 验证日期格式
+ */
+function date(value) {
+ if (!value) return false
+ // 判断是否数值或者字符串数值(意味着为时间戳),转为数值,否则new Date无法识别字符串时间戳
+ if (number(value)) value = +value
+ return !/Invalid|NaN/.test(new Date(value).toString())
+}
+
+/**
+ * 验证ISO类型的日期格式
+ */
+function dateISO(value) {
+ return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)
+}
+
+/**
+ * 验证十进制数字
+ */
+function number(value) {
+ return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value)
+}
+
+/**
+ * 验证字符串
+ */
+function string(value) {
+ return typeof value === 'string'
+}
+
+/**
+ * 验证整数
+ */
+function digits(value) {
+ return /^\d+$/.test(value)
+}
+
+/**
+ * 验证身份证号码
+ */
+function idCard(value) {
+ return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
+ value
+ )
+}
+
+/**
+ * 是否车牌号
+ */
+function carNo(value) {
+ // 新能源车牌
+ const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
+ // 旧车牌
+ const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
+ if (value.length === 7) {
+ return creg.test(value)
+ } if (value.length === 8) {
+ return xreg.test(value)
+ }
+ return false
+}
+
+/**
+ * 金额,只允许2位小数
+ */
+function amount(value) {
+ // 金额,只允许保留两位小数
+ return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value)
+}
+
+/**
+ * 中文
+ */
+function chinese(value) {
+ const reg = /^[\u4e00-\u9fa5]+$/gi
+ return reg.test(value)
+}
+
+/**
+ * 只能输入字母
+ */
+function letter(value) {
+ return /^[a-zA-Z]*$/.test(value)
+}
+
+/**
+ * 只能是字母或者数字
+ */
+function enOrNum(value) {
+ // 英文或者数字
+ const reg = /^[0-9a-zA-Z]*$/g
+ return reg.test(value)
+}
+
+/**
+ * 验证是否包含某个值
+ */
+function contains(value, param) {
+ return value.indexOf(param) >= 0
+}
+
+/**
+ * 验证一个值范围[min, max]
+ */
+function range(value, param) {
+ return value >= param[0] && value <= param[1]
+}
+
+/**
+ * 验证一个长度范围[min, max]
+ */
+function rangeLength(value, param) {
+ return value.length >= param[0] && value.length <= param[1]
+}
+
+/**
+ * 是否固定电话
+ */
+function landline(value) {
+ const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
+ return reg.test(value)
+}
+
+/**
+ * 判断是否为空
+ */
+function empty(value) {
+ switch (typeof value) {
+ case 'undefined':
+ return true
+ case 'string':
+ if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true
+ break
+ case 'boolean':
+ if (!value) return true
+ break
+ case 'number':
+ if (value === 0 || isNaN(value)) return true
+ break
+ case 'object':
+ if (value === null || value.length === 0) return true
+ for (const i in value) {
+ return false
+ }
+ return true
+ }
+ return false
+}
+
+/**
+ * 是否json字符串
+ */
+function jsonString(value) {
+ if (typeof value === 'string') {
+ try {
+ const obj = JSON.parse(value)
+ if (typeof obj === 'object' && obj) {
+ return true
+ }
+ return false
+ } catch (e) {
+ return false
+ }
+ }
+ return false
+}
+
+/**
+ * 是否数组
+ */
+function array(value) {
+ if (typeof Array.isArray === 'function') {
+ return Array.isArray(value)
+ }
+ return Object.prototype.toString.call(value) === '[object Array]'
+}
+
+/**
+ * 是否对象
+ */
+function object(value) {
+ return Object.prototype.toString.call(value) === '[object Object]'
+}
+
+/**
+ * 是否短信验证码
+ */
+function code(value, len = 6) {
+ return new RegExp(`^\\d{${len}}$`).test(value)
+}
+
+/**
+ * 是否函数方法
+ * @param {Object} value
+ */
+function func(value) {
+ return typeof value === 'function'
+}
+
+/**
+ * 是否promise对象
+ * @param {Object} value
+ */
+function promise(value) {
+ return object(value) && func(value.then) && func(value.catch)
+}
+
+/** 是否图片格式
+ * @param {Object} value
+ */
+function image(value) {
+ const newValue = value.split('?')[0]
+ const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i
+ return IMAGE_REGEXP.test(newValue)
+}
+
+/**
+ * 是否视频格式
+ * @param {Object} value
+ */
+function video(value) {
+ const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i
+ return VIDEO_REGEXP.test(value)
+}
+
+/**
+ * 是否为正则对象
+ * @param {Object}
+ * @return {Boolean}
+ */
+function regExp(o) {
+ return o && Object.prototype.toString.call(o) === '[object RegExp]'
+}
+
+export {
+ email,
+ mobile,
+ url,
+ date,
+ dateISO,
+ number,
+ digits,
+ idCard,
+ carNo,
+ amount,
+ chinese,
+ letter,
+ enOrNum,
+ contains,
+ range,
+ rangeLength,
+ empty,
+ jsonString,
+ landline,
+ object,
+ array,
+ code,
+ func,
+ promise,
+ video,
+ image,
+ regExp,
+ string
+}
diff --git a/uni_modules/uv-ui-tools/libs/function/throttle.js b/uni_modules/uv-ui-tools/libs/function/throttle.js
new file mode 100644
index 0000000..2f33611
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/function/throttle.js
@@ -0,0 +1,30 @@
+let timer; let
+ flag
+/**
+ * 节流原理:在一定时间内,只能触发一次
+ *
+ * @param {Function} func 要执行的回调函数
+ * @param {Number} wait 延时的时间
+ * @param {Boolean} immediate 是否立即执行
+ * @return null
+ */
+function throttle(func, wait = 500, immediate = true) {
+ if (immediate) {
+ if (!flag) {
+ flag = true
+ // 如果是立即执行,则在wait毫秒内开始时执行
+ typeof func === 'function' && func()
+ timer = setTimeout(() => {
+ flag = false
+ }, wait)
+ }
+ } else if (!flag) {
+ flag = true
+ // 如果是非立即执行,则在wait毫秒内的结束处执行
+ timer = setTimeout(() => {
+ flag = false
+ typeof func === 'function' && func()
+ }, wait)
+ }
+}
+export default throttle
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js b/uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js
new file mode 100644
index 0000000..31a5cfc
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js
@@ -0,0 +1,132 @@
+import buildURL from '../helpers/buildURL'
+import buildFullPath from '../core/buildFullPath'
+import settle from '../core/settle'
+import {isUndefined} from "../utils"
+
+/**
+ * 返回可选值存在的配置
+ * @param {Array} keys - 可选值数组
+ * @param {Object} config2 - 配置
+ * @return {{}} - 存在的配置项
+ */
+const mergeKeys = (keys, config2) => {
+ let config = {}
+ keys.forEach(prop => {
+ if (!isUndefined(config2[prop])) {
+ config[prop] = config2[prop]
+ }
+ })
+ return config
+}
+export default (config) => {
+ return new Promise((resolve, reject) => {
+ let fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params, config.paramsSerializer)
+ const _config = {
+ url: fullPath,
+ header: config.header,
+ complete: (response) => {
+ config.fullPath = fullPath
+ response.config = config
+ response.rawData = response.data
+ try {
+ let jsonParseHandle = false
+ const forcedJSONParsingType = typeof config.forcedJSONParsing
+ if (forcedJSONParsingType === 'boolean') {
+ jsonParseHandle = config.forcedJSONParsing
+ } else if (forcedJSONParsingType === 'object') {
+ const includesMethod = config.forcedJSONParsing.include || []
+ jsonParseHandle = includesMethod.includes(config.method)
+ }
+
+ // 对可能字符串不是json 的情况容错
+ if (jsonParseHandle && typeof response.data === 'string') {
+ response.data = JSON.parse(response.data)
+ }
+ // eslint-disable-next-line no-empty
+ } catch (e) {
+ }
+ settle(resolve, reject, response)
+ }
+ }
+ let requestTask
+ if (config.method === 'UPLOAD') {
+ delete _config.header['content-type']
+ delete _config.header['Content-Type']
+ let otherConfig = {
+ // #ifdef MP-ALIPAY
+ fileType: config.fileType,
+ // #endif
+ filePath: config.filePath,
+ name: config.name
+ }
+ const optionalKeys = [
+ // #ifdef APP-PLUS || H5
+ 'files',
+ // #endif
+ // #ifdef H5
+ 'file',
+ // #endif
+ // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
+ 'timeout',
+ // #endif
+ 'formData'
+ ]
+ requestTask = uni.uploadFile({..._config, ...otherConfig, ...mergeKeys(optionalKeys, config)})
+ } else if (config.method === 'DOWNLOAD') {
+ const optionalKeys = [
+ // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
+ 'timeout',
+ // #endif
+ // #ifdef MP
+ 'filePath',
+ // #endif
+ ]
+ requestTask = uni.downloadFile({..._config, ...mergeKeys(optionalKeys, config)})
+ } else {
+ const optionalKeys = [
+ 'data',
+ 'method',
+ // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
+ 'timeout',
+ // #endif
+ 'dataType',
+ // #ifndef MP-ALIPAY
+ 'responseType',
+ // #endif
+ // #ifdef APP-PLUS
+ 'sslVerify',
+ // #endif
+ // #ifdef H5
+ 'withCredentials',
+ // #endif
+ // #ifdef APP-PLUS
+ 'firstIpv4',
+ // #endif
+ // #ifdef MP-WEIXIN
+ 'enableHttp2',
+ 'enableQuic',
+ // #endif
+ // #ifdef MP-TOUTIAO || MP-WEIXIN
+ 'enableCache',
+ // #endif
+ // #ifdef MP-WEIXIN
+ 'enableHttpDNS',
+ 'httpDNSServiceId',
+ 'enableChunked',
+ 'forceCellularNetwork',
+ // #endif
+ // #ifdef MP-ALIPAY
+ 'enableCookie',
+ // #endif
+ // #ifdef MP-BAIDU
+ 'cloudCache',
+ 'defer'
+ // #endif
+ ]
+ requestTask = uni.request({..._config, ...mergeKeys(optionalKeys, config)})
+ }
+ if (config.getTask) {
+ config.getTask(requestTask, config)
+ }
+ })
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js b/uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js
new file mode 100644
index 0000000..3ea0d5e
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js
@@ -0,0 +1,51 @@
+'use strict'
+
+
+function InterceptorManager() {
+ this.handlers = []
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected) {
+ this.handlers.push({
+ fulfilled: fulfilled,
+ rejected: rejected
+ })
+ return this.handlers.length - 1
+}
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+ if (this.handlers[id]) {
+ this.handlers[id] = null
+ }
+}
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+ this.handlers.forEach(h => {
+ if (h !== null) {
+ fn(h)
+ }
+ })
+}
+
+export default InterceptorManager
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/Request.js b/uni_modules/uv-ui-tools/libs/luch-request/core/Request.js
new file mode 100644
index 0000000..96c89a8
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/Request.js
@@ -0,0 +1,201 @@
+/**
+ * @Class Request
+ * @description luch-request http请求插件
+ * @Author lu-ch
+ * @Email webwork.s@qq.com
+ * 文档: https://www.quanzhan.co/luch-request/
+ * github: https://github.com/lei-mu/luch-request
+ * DCloud: http://ext.dcloud.net.cn/plugin?id=392
+ */
+
+
+import dispatchRequest from './dispatchRequest'
+import InterceptorManager from './InterceptorManager'
+import mergeConfig from './mergeConfig'
+import defaults from './defaults'
+import { isPlainObject } from '../utils'
+import clone from '../utils/clone'
+
+export default class Request {
+ /**
+ * @param {Object} arg - 全局配置
+ * @param {String} arg.baseURL - 全局根路径
+ * @param {Object} arg.header - 全局header
+ * @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
+ * @param {String} arg.dataType = [json] - 全局默认的dataType
+ * @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
+ * @param {Object} arg.custom - 全局默认的自定义参数
+ * @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
+ * @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
+ * @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
+ * @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
+ * @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
+ */
+ constructor(arg = {}) {
+ if (!isPlainObject(arg)) {
+ arg = {}
+ console.warn('设置全局参数必须接收一个Object')
+ }
+ this.config = clone({...defaults, ...arg})
+ this.interceptors = {
+ request: new InterceptorManager(),
+ response: new InterceptorManager()
+ }
+ }
+
+ /**
+ * @Function
+ * @param {Request~setConfigCallback} f - 设置全局默认配置
+ */
+ setConfig(f) {
+ this.config = f(this.config)
+ }
+
+ middleware(config) {
+ config = mergeConfig(this.config, config)
+ let chain = [dispatchRequest, undefined]
+ let promise = Promise.resolve(config)
+
+ this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+ chain.unshift(interceptor.fulfilled, interceptor.rejected)
+ })
+
+ this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+ chain.push(interceptor.fulfilled, interceptor.rejected)
+ })
+
+ while (chain.length) {
+ promise = promise.then(chain.shift(), chain.shift())
+ }
+
+ return promise
+ }
+
+ /**
+ * @Function
+ * @param {Object} config - 请求配置项
+ * @prop {String} options.url - 请求路径
+ * @prop {Object} options.data - 请求参数
+ * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
+ * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
+ * @prop {Object} [options.header = config.header] - 请求header
+ * @prop {Object} [options.method = config.method] - 请求方法
+ * @returns {Promise}
+ */
+ request(config = {}) {
+ return this.middleware(config)
+ }
+
+ get(url, options = {}) {
+ return this.middleware({
+ url,
+ method: 'GET',
+ ...options
+ })
+ }
+
+ post(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'POST',
+ ...options
+ })
+ }
+
+ // #ifndef MP-ALIPAY || MP-KUAISHOU || MP-JD
+ put(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'PUT',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU
+ delete(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'DELETE',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef H5 || MP-WEIXIN
+ connect(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'CONNECT',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef H5 || MP-WEIXIN || MP-BAIDU
+ head(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'HEAD',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU
+ options(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'OPTIONS',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef H5 || MP-WEIXIN
+ trace(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'TRACE',
+ ...options
+ })
+ }
+
+ // #endif
+
+ upload(url, config = {}) {
+ config.url = url
+ config.method = 'UPLOAD'
+ return this.middleware(config)
+ }
+
+ download(url, config = {}) {
+ config.url = url
+ config.method = 'DOWNLOAD'
+ return this.middleware(config)
+ }
+
+ get version () {
+ return '3.1.0'
+ }
+}
+
+
+/**
+ * setConfig回调
+ * @return {Object} - 返回操作后的config
+ * @callback Request~setConfigCallback
+ * @param {Object} config - 全局默认config
+ */
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js b/uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js
new file mode 100644
index 0000000..f2852f4
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js
@@ -0,0 +1,20 @@
+'use strict'
+
+import isAbsoluteURL from '../helpers/isAbsoluteURL'
+import combineURLs from '../helpers/combineURLs'
+
+/**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ * @returns {string} The combined full path
+ */
+export default function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL)
+ }
+ return requestedURL
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js b/uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js
new file mode 100644
index 0000000..db74609
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js
@@ -0,0 +1,33 @@
+/**
+ * 默认的全局配置
+ */
+
+
+export default {
+ baseURL: '',
+ header: {},
+ method: 'GET',
+ dataType: 'json',
+ paramsSerializer: null,
+ // #ifndef MP-ALIPAY
+ responseType: 'text',
+ // #endif
+ custom: {},
+ // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
+ timeout: 60000,
+ // #endif
+ // #ifdef APP-PLUS
+ sslVerify: true,
+ // #endif
+ // #ifdef H5
+ withCredentials: false,
+ // #endif
+ // #ifdef APP-PLUS
+ firstIpv4: false,
+ // #endif
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300
+ },
+ // 是否尝试将响应数据json化
+ forcedJSONParsing: true
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js b/uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js
new file mode 100644
index 0000000..c5f2c85
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js
@@ -0,0 +1,6 @@
+import adapter from '../adapters/index'
+
+
+export default (config) => {
+ return adapter(config)
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js b/uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js
new file mode 100644
index 0000000..99c8ecd
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js
@@ -0,0 +1,126 @@
+import {deepMerge, isUndefined} from '../utils'
+
+/**
+ * 合并局部配置优先的配置,如果局部有该配置项则用局部,如果全局有该配置项则用全局
+ * @param {Array} keys - 配置项
+ * @param {Object} globalsConfig - 当前的全局配置
+ * @param {Object} config2 - 局部配置
+ * @return {{}}
+ */
+const mergeKeys = (keys, globalsConfig, config2) => {
+ let config = {}
+ keys.forEach(prop => {
+ if (!isUndefined(config2[prop])) {
+ config[prop] = config2[prop]
+ } else if (!isUndefined(globalsConfig[prop])) {
+ config[prop] = globalsConfig[prop]
+ }
+ })
+ return config
+}
+/**
+ *
+ * @param globalsConfig - 当前实例的全局配置
+ * @param config2 - 当前的局部配置
+ * @return - 合并后的配置
+ */
+export default (globalsConfig, config2 = {}) => {
+ const method = config2.method || globalsConfig.method || 'GET'
+ let config = {
+ baseURL: config2.baseURL || globalsConfig.baseURL || '',
+ method: method,
+ url: config2.url || '',
+ params: config2.params || {},
+ custom: {...(globalsConfig.custom || {}), ...(config2.custom || {})},
+ header: deepMerge(globalsConfig.header || {}, config2.header || {})
+ }
+ const defaultToConfig2Keys = ['getTask', 'validateStatus', 'paramsSerializer', 'forcedJSONParsing']
+ config = {...config, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2)}
+
+ // eslint-disable-next-line no-empty
+ if (method === 'DOWNLOAD') {
+ const downloadKeys = [
+ // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
+ 'timeout',
+ // #endif
+ // #ifdef MP
+ 'filePath',
+ // #endif
+ ]
+ config = {...config, ...mergeKeys(downloadKeys, globalsConfig, config2)}
+ } else if (method === 'UPLOAD') {
+ delete config.header['content-type']
+ delete config.header['Content-Type']
+ const uploadKeys = [
+ // #ifdef APP-PLUS || H5
+ 'files',
+ // #endif
+ // #ifdef MP-ALIPAY
+ 'fileType',
+ // #endif
+ // #ifdef H5
+ 'file',
+ // #endif
+ 'filePath',
+ 'name',
+ // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
+ 'timeout',
+ // #endif
+ 'formData',
+ ]
+ uploadKeys.forEach(prop => {
+ if (!isUndefined(config2[prop])) {
+ config[prop] = config2[prop]
+ }
+ })
+ // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
+ if (isUndefined(config.timeout) && !isUndefined(globalsConfig.timeout)) {
+ config['timeout'] = globalsConfig['timeout']
+ }
+ // #endif
+ } else {
+ const defaultsKeys = [
+ 'data',
+ // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
+ 'timeout',
+ // #endif
+ 'dataType',
+ // #ifndef MP-ALIPAY
+ 'responseType',
+ // #endif
+ // #ifdef APP-PLUS
+ 'sslVerify',
+ // #endif
+ // #ifdef H5
+ 'withCredentials',
+ // #endif
+ // #ifdef APP-PLUS
+ 'firstIpv4',
+ // #endif
+ // #ifdef MP-WEIXIN
+ 'enableHttp2',
+ 'enableQuic',
+ // #endif
+ // #ifdef MP-TOUTIAO || MP-WEIXIN
+ 'enableCache',
+ // #endif
+ // #ifdef MP-WEIXIN
+ 'enableHttpDNS',
+ 'httpDNSServiceId',
+ 'enableChunked',
+ 'forceCellularNetwork',
+ // #endif
+ // #ifdef MP-ALIPAY
+ 'enableCookie',
+ // #endif
+ // #ifdef MP-BAIDU
+ 'cloudCache',
+ 'defer'
+ // #endif
+
+ ]
+ config = {...config, ...mergeKeys(defaultsKeys, globalsConfig, config2)}
+ }
+
+ return config
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/core/settle.js b/uni_modules/uv-ui-tools/libs/luch-request/core/settle.js
new file mode 100644
index 0000000..b2f1659
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/core/settle.js
@@ -0,0 +1,16 @@
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+export default function settle(resolve, reject, response) {
+ const validateStatus = response.config.validateStatus
+ const status = response.statusCode
+ if (status && (!validateStatus || validateStatus(status))) {
+ resolve(response)
+ } else {
+ reject(response)
+ }
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js b/uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js
new file mode 100644
index 0000000..e90b908
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js
@@ -0,0 +1,64 @@
+'use strict'
+
+import * as utils from './../utils'
+
+function encode(val) {
+ return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']')
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+export default function buildURL(url, params, paramsSerializer) {
+ /*eslint no-param-reassign:0*/
+ if (!params) {
+ return url
+ }
+
+ var serializedParams
+ if (paramsSerializer) {
+ serializedParams = paramsSerializer(params)
+ } else if (utils.isURLSearchParams(params)) {
+ serializedParams = params.toString()
+ } else {
+ var parts = []
+
+ utils.forEach(params, function serialize(val, key) {
+ if (val === null || typeof val === 'undefined') {
+ return
+ }
+
+ if (utils.isArray(val)) {
+ key = key + '[]'
+ } else {
+ val = [val]
+ }
+
+ utils.forEach(val, function parseValue(v) {
+ if (utils.isDate(v)) {
+ v = v.toISOString()
+ } else if (utils.isObject(v)) {
+ v = JSON.stringify(v)
+ }
+ parts.push(encode(key) + '=' + encode(v))
+ })
+ })
+
+ serializedParams = parts.join('&')
+ }
+
+ if (serializedParams) {
+ var hashmarkIndex = url.indexOf('#')
+ if (hashmarkIndex !== -1) {
+ url = url.slice(0, hashmarkIndex)
+ }
+
+ url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams
+ }
+
+ return url
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js b/uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js
new file mode 100644
index 0000000..7b9d1ef
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js
@@ -0,0 +1,14 @@
+'use strict'
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+export default function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+ : baseURL
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js b/uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js
new file mode 100644
index 0000000..2a82517
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js
@@ -0,0 +1,14 @@
+'use strict'
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+export default function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
+ // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+ // by any combination of letters, digits, plus, period, or hyphen.
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url)
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/index.d.ts b/uni_modules/uv-ui-tools/libs/luch-request/index.d.ts
new file mode 100644
index 0000000..62d3fb9
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/index.d.ts
@@ -0,0 +1,197 @@
+export type HttpTask = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask;
+
+export type HttpRequestTask = UniApp.RequestTask;
+
+export type HttpUploadTask = UniApp.UploadTask;
+
+export type HttpDownloadTask = UniApp.DownloadTask;
+
+export type HttpMethod =
+ "GET"
+ | "POST"
+ | "PUT"
+ | "DELETE"
+ | "CONNECT"
+ | "HEAD"
+ | "OPTIONS"
+ | "TRACE"
+ | "UPLOAD"
+ | "DOWNLOAD";
+
+export type HttpRequestHeader = Record;
+
+export type HttpParams = Record;
+
+export type HttpData = Record;
+
+export type HttpResponseType = 'arraybuffer' | 'text';
+
+export type HttpCustom = Record;
+
+export type HttpFileType = 'image' | 'video' | 'audio';
+
+export type HttpFormData = Record;
+
+export type HttpResponseHeader = Record & {
+ "set-cookie"?: string[]
+};
+
+export interface HttpRequestConfig {
+ /** @desc 请求服务器接口地址 */
+ url?: string;
+ /** @desc 请求方式,默认为 GET */
+ method?: HttpMethod;
+ /** @desc 请求基地址 */
+ baseURL?: string;
+ /** @desc 请求头信息,不能设置 Referer,App、H5 端会自动带上 cookie,且 H5 端不可手动修改 */
+ header?: HttpRequestHeader;
+ /** @desc 请求查询参数,自动拼接为查询字符串 */
+ params?: HttpParams;
+ /** @desc 请求体参数 */
+ data?: HttpData;
+ /** @desc 超时时间,单位 ms,默认为 60000,仅 H5 (HBuilderX 2.9.9+)、APP (HBuilderX 2.9.9+)、微信小程序 (2.10.0)、支付宝小程序支持 */
+ timeout?: number;
+ /** @desc 跨域请求时是否携带凭证 (cookies),默认为 false,仅 H5 (HBuilderX 2.6.15+) 支持 */
+ withCredentials?: boolean;
+ /** @desc 设置响应的数据类型,支付宝小程序不支持 */
+ responseType?: HttpResponseType;
+ /** @desc 全局自定义验证器 */
+ validateStatus?: ((statusCode: number) => boolean) | null;
+
+
+ /** params 参数自定义处理 */
+ paramsSerializer?: (params: AnyObject) => string | void;
+
+ /** @desc 默认为 json,如果设为 json,会尝试对返回的数据做一次 JSON.parse */
+ dataType?: string;
+ /** @desc DNS 解析时是否优先使用 ipv4,默认为 false,仅 App-Android (HBuilderX 2.8.0+) 支持 */
+ firstIpv4?: boolean;
+ /** @desc 是否验证 SSL 证书,默认为 true,仅 App-Android (HBuilderX 2.3.3+) 支持 */
+ sslVerify?: boolean;
+
+ /** @desc 开启 http2;微信小程序 */
+ enableHttp2?: boolean;
+
+ /** @desc 开启 quic;微信小程序 */
+ enableQuic?: boolean;
+ /** @desc 开启 cache;微信小程序、字节跳动小程序 2.31.0+ */
+ enableCache?: boolean;
+ /** @desc 开启 httpDNS;微信小程序 */
+ enableHttpDNS?: boolean;
+ /** @desc httpDNS 服务商;微信小程序 */
+ httpDNSServiceId?: string;
+ /** @desc 开启 transfer-encoding chunked;微信小程序 */
+ enableChunked?: boolean;
+ /** @desc wifi下使用移动网络发送请求;微信小程序 */
+ forceCellularNetwork?: boolean;
+ /** @desc 开启后可在headers中编辑cookie;支付宝小程序 10.2.33+ */
+ enableCookie?: boolean;
+ /** @desc 是否开启云加速;百度小程序 3.310.11+ */
+ cloudCache?: boolean | object;
+ /** @desc 控制当前请求是否延时至首屏内容渲染后发送;百度小程序 3.310.11+ */
+ defer?: boolean;
+
+ /** @desc 自定义参数 */
+ custom?: HttpCustom;
+
+ /** @desc 返回当前请求的 task 和 options,不要在这里修改 options */
+ getTask?: (task: T, options: HttpRequestConfig) => void;
+
+ /** @desc 需要上传的文件列表,使用 files 时,filePath 和 name 不生效,仅支持 App、H5 (2.6.15+) */
+ files?: { name?: string; file?: File; uri: string; }[];
+ /** @desc 文件类型,仅支付宝小程序支持且为必填项 */
+ fileType?: HttpFileType;
+ /** @desc 要上传的文件对象,仅 H5 (2.6.15+) 支持 */
+ file?: File;
+ /** @desc 要上传文件资源的路径,使用 files 时,filePath 和 name 不生效 */
+ filePath?: string;
+ /** @desc 文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件二进制内容,使用 files 时,filePath 和 name 不生效 */
+ name?: string;
+ /** @desc 请求中其他额外的 form data */
+ formData?: HttpFormData;
+}
+
+export interface HttpResponse {
+ data: T;
+ statusCode: number;
+ header: HttpResponseHeader;
+ config: HttpRequestConfig;
+ cookies: string[];
+ errMsg: string;
+ rawData: any;
+}
+
+export interface HttpUploadResponse {
+ data: T;
+ statusCode: number;
+ config: HttpRequestConfig;
+ errMsg: string;
+ rawData: any;
+}
+
+export interface HttpDownloadResponse extends HttpResponse {
+ tempFilePath: string;
+ apFilePath?: string;
+ filePath?: string;
+ fileContent?: string;
+}
+
+export interface HttpError {
+ data?: T;
+ statusCode?: number;
+ header?: HttpResponseHeader;
+ config: HttpRequestConfig;
+ cookies?: string[];
+ errMsg: string;
+}
+
+export interface HttpPromise extends Promise> {
+}
+
+export interface HttpInterceptorManager {
+ use(onFulfilled?: (value: V) => V | Promise, onRejected?: (error: E) => T | Promise): void;
+
+ eject(id: number): void;
+}
+
+export abstract class HttpRequestAbstract {
+ constructor(config?: HttpRequestConfig);
+
+ interceptors: {
+ request: HttpInterceptorManager;
+ response: HttpInterceptorManager;
+ }
+
+ request, D = HttpRequestTask>(config: HttpRequestConfig): Promise;
+
+ get, D = HttpRequestTask>(url: string, config?: HttpRequestConfig): Promise;
+
+ delete, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ head, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ options, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ post, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ put, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ config: HttpRequestConfig;
+
+ setConfig(onSend: (config: HttpRequestConfig) => HttpRequestConfig): void;
+
+ connect, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ trace, D = HttpRequestTask>(url: string, data?: HttpData, config?: HttpRequestConfig): Promise;
+
+ upload, D = HttpUploadTask>(url: string, config?: HttpRequestConfig): Promise;
+
+ download, D = HttpDownloadTask>(url: string, config?: HttpRequestConfig): Promise;
+
+ middleware, D = HttpTask>(config: HttpRequestConfig): Promise;
+}
+
+declare class HttpRequest extends HttpRequestAbstract {
+}
+
+export default HttpRequest;
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/index.js b/uni_modules/uv-ui-tools/libs/luch-request/index.js
new file mode 100644
index 0000000..d8fe348
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/index.js
@@ -0,0 +1,2 @@
+import Request from './core/Request'
+export default Request
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/utils.js b/uni_modules/uv-ui-tools/libs/luch-request/utils.js
new file mode 100644
index 0000000..0b5bf21
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/utils.js
@@ -0,0 +1,135 @@
+'use strict'
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+export function isArray (val) {
+ return toString.call(val) === '[object Array]'
+}
+
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+export function isObject (val) {
+ return val !== null && typeof val === 'object'
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+export function isDate (val) {
+ return toString.call(val) === '[object Date]'
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+export function isURLSearchParams (val) {
+ return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams
+}
+
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+export function forEach (obj, fn) {
+ // Don't bother if no value provided
+ if (obj === null || typeof obj === 'undefined') {
+ return
+ }
+
+ // Force an array if not already something iterable
+ if (typeof obj !== 'object') {
+ /*eslint no-param-reassign:0*/
+ obj = [obj]
+ }
+
+ if (isArray(obj)) {
+ // Iterate over array values
+ for (var i = 0, l = obj.length; i < l; i++) {
+ fn.call(null, obj[i], i, obj)
+ }
+ } else {
+ // Iterate over object keys
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ fn.call(null, obj[key], key, obj)
+ }
+ }
+ }
+}
+
+/**
+ * 是否为boolean 值
+ * @param val
+ * @returns {boolean}
+ */
+export function isBoolean(val) {
+ return typeof val === 'boolean'
+}
+
+/**
+ * 是否为真正的对象{} new Object
+ * @param {any} obj - 检测的对象
+ * @returns {boolean}
+ */
+export function isPlainObject(obj) {
+ return Object.prototype.toString.call(obj) === '[object Object]'
+}
+
+
+
+/**
+ * Function equal to merge with the difference being that no reference
+ * to original objects is kept.
+ *
+ * @see merge
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+export function deepMerge(/* obj1, obj2, obj3, ... */) {
+ let result = {}
+ function assignValue(val, key) {
+ if (typeof result[key] === 'object' && typeof val === 'object') {
+ result[key] = deepMerge(result[key], val)
+ } else if (typeof val === 'object') {
+ result[key] = deepMerge({}, val)
+ } else {
+ result[key] = val
+ }
+ }
+ for (let i = 0, l = arguments.length; i < l; i++) {
+ forEach(arguments[i], assignValue)
+ }
+ return result
+}
+
+export function isUndefined (val) {
+ return typeof val === 'undefined'
+}
diff --git a/uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js b/uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js
new file mode 100644
index 0000000..2fee704
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js
@@ -0,0 +1,264 @@
+/* eslint-disable */
+var clone = (function() {
+ 'use strict';
+
+ function _instanceof(obj, type) {
+ return type != null && obj instanceof type;
+ }
+
+ var nativeMap;
+ try {
+ nativeMap = Map;
+ } catch(_) {
+ // maybe a reference error because no `Map`. Give it a dummy value that no
+ // value will ever be an instanceof.
+ nativeMap = function() {};
+ }
+
+ var nativeSet;
+ try {
+ nativeSet = Set;
+ } catch(_) {
+ nativeSet = function() {};
+ }
+
+ var nativePromise;
+ try {
+ nativePromise = Promise;
+ } catch(_) {
+ nativePromise = function() {};
+ }
+
+ /**
+ * Clones (copies) an Object using deep copying.
+ *
+ * This function supports circular references by default, but if you are certain
+ * there are no circular references in your object, you can save some CPU time
+ * by calling clone(obj, false).
+ *
+ * Caution: if `circular` is false and `parent` contains circular references,
+ * your program may enter an infinite loop and crash.
+ *
+ * @param `parent` - the object to be cloned
+ * @param `circular` - set to true if the object to be cloned may contain
+ * circular references. (optional - true by default)
+ * @param `depth` - set to a number if the object is only to be cloned to
+ * a particular depth. (optional - defaults to Infinity)
+ * @param `prototype` - sets the prototype to be used when cloning an object.
+ * (optional - defaults to parent prototype).
+ * @param `includeNonEnumerable` - set to true if the non-enumerable properties
+ * should be cloned as well. Non-enumerable properties on the prototype
+ * chain will be ignored. (optional - false by default)
+ */
+ function clone(parent, circular, depth, prototype, includeNonEnumerable) {
+ if (typeof circular === 'object') {
+ depth = circular.depth;
+ prototype = circular.prototype;
+ includeNonEnumerable = circular.includeNonEnumerable;
+ circular = circular.circular;
+ }
+ // maintain two arrays for circular references, where corresponding parents
+ // and children have the same index
+ var allParents = [];
+ var allChildren = [];
+
+ var useBuffer = typeof Buffer != 'undefined';
+
+ if (typeof circular == 'undefined')
+ circular = true;
+
+ if (typeof depth == 'undefined')
+ depth = Infinity;
+
+ // recurse this function so we don't reset allParents and allChildren
+ function _clone(parent, depth) {
+ // cloning null always returns null
+ if (parent === null)
+ return null;
+
+ if (depth === 0)
+ return parent;
+
+ var child;
+ var proto;
+ if (typeof parent != 'object') {
+ return parent;
+ }
+
+ if (_instanceof(parent, nativeMap)) {
+ child = new nativeMap();
+ } else if (_instanceof(parent, nativeSet)) {
+ child = new nativeSet();
+ } else if (_instanceof(parent, nativePromise)) {
+ child = new nativePromise(function (resolve, reject) {
+ parent.then(function(value) {
+ resolve(_clone(value, depth - 1));
+ }, function(err) {
+ reject(_clone(err, depth - 1));
+ });
+ });
+ } else if (clone.__isArray(parent)) {
+ child = [];
+ } else if (clone.__isRegExp(parent)) {
+ child = new RegExp(parent.source, __getRegExpFlags(parent));
+ if (parent.lastIndex) child.lastIndex = parent.lastIndex;
+ } else if (clone.__isDate(parent)) {
+ child = new Date(parent.getTime());
+ } else if (useBuffer && Buffer.isBuffer(parent)) {
+ if (Buffer.from) {
+ // Node.js >= 5.10.0
+ child = Buffer.from(parent);
+ } else {
+ // Older Node.js versions
+ child = new Buffer(parent.length);
+ parent.copy(child);
+ }
+ return child;
+ } else if (_instanceof(parent, Error)) {
+ child = Object.create(parent);
+ } else {
+ if (typeof prototype == 'undefined') {
+ proto = Object.getPrototypeOf(parent);
+ child = Object.create(proto);
+ }
+ else {
+ child = Object.create(prototype);
+ proto = prototype;
+ }
+ }
+
+ if (circular) {
+ var index = allParents.indexOf(parent);
+
+ if (index != -1) {
+ return allChildren[index];
+ }
+ allParents.push(parent);
+ allChildren.push(child);
+ }
+
+ if (_instanceof(parent, nativeMap)) {
+ parent.forEach(function(value, key) {
+ var keyChild = _clone(key, depth - 1);
+ var valueChild = _clone(value, depth - 1);
+ child.set(keyChild, valueChild);
+ });
+ }
+ if (_instanceof(parent, nativeSet)) {
+ parent.forEach(function(value) {
+ var entryChild = _clone(value, depth - 1);
+ child.add(entryChild);
+ });
+ }
+
+ for (var i in parent) {
+ var attrs = Object.getOwnPropertyDescriptor(parent, i);
+ if (attrs) {
+ child[i] = _clone(parent[i], depth - 1);
+ }
+
+ try {
+ var objProperty = Object.getOwnPropertyDescriptor(parent, i);
+ if (objProperty.set === 'undefined') {
+ // no setter defined. Skip cloning this property
+ continue;
+ }
+ child[i] = _clone(parent[i], depth - 1);
+ } catch(e){
+ if (e instanceof TypeError) {
+ // when in strict mode, TypeError will be thrown if child[i] property only has a getter
+ // we can't do anything about this, other than inform the user that this property cannot be set.
+ continue
+ } else if (e instanceof ReferenceError) {
+ //this may happen in non strict mode
+ continue
+ }
+ }
+
+ }
+
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(parent);
+ for (var i = 0; i < symbols.length; i++) {
+ // Don't need to worry about cloning a symbol because it is a primitive,
+ // like a number or string.
+ var symbol = symbols[i];
+ var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);
+ if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
+ continue;
+ }
+ child[symbol] = _clone(parent[symbol], depth - 1);
+ Object.defineProperty(child, symbol, descriptor);
+ }
+ }
+
+ if (includeNonEnumerable) {
+ var allPropertyNames = Object.getOwnPropertyNames(parent);
+ for (var i = 0; i < allPropertyNames.length; i++) {
+ var propertyName = allPropertyNames[i];
+ var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);
+ if (descriptor && descriptor.enumerable) {
+ continue;
+ }
+ child[propertyName] = _clone(parent[propertyName], depth - 1);
+ Object.defineProperty(child, propertyName, descriptor);
+ }
+ }
+
+ return child;
+ }
+
+ return _clone(parent, depth);
+ }
+
+ /**
+ * Simple flat clone using prototype, accepts only objects, usefull for property
+ * override on FLAT configuration object (no nested props).
+ *
+ * USE WITH CAUTION! This may not behave as you wish if you do not know how this
+ * works.
+ */
+ clone.clonePrototype = function clonePrototype(parent) {
+ if (parent === null)
+ return null;
+
+ var c = function () {};
+ c.prototype = parent;
+ return new c();
+ };
+
+// private utility functions
+
+ function __objToStr(o) {
+ return Object.prototype.toString.call(o);
+ }
+ clone.__objToStr = __objToStr;
+
+ function __isDate(o) {
+ return typeof o === 'object' && __objToStr(o) === '[object Date]';
+ }
+ clone.__isDate = __isDate;
+
+ function __isArray(o) {
+ return typeof o === 'object' && __objToStr(o) === '[object Array]';
+ }
+ clone.__isArray = __isArray;
+
+ function __isRegExp(o) {
+ return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
+ }
+ clone.__isRegExp = __isRegExp;
+
+ function __getRegExpFlags(re) {
+ var flags = '';
+ if (re.global) flags += 'g';
+ if (re.ignoreCase) flags += 'i';
+ if (re.multiline) flags += 'm';
+ return flags;
+ }
+ clone.__getRegExpFlags = __getRegExpFlags;
+
+ return clone;
+})();
+
+export default clone
diff --git a/uni_modules/uv-ui-tools/libs/mixin/button.js b/uni_modules/uv-ui-tools/libs/mixin/button.js
new file mode 100644
index 0000000..0c019c2
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/mixin/button.js
@@ -0,0 +1,13 @@
+export default {
+ props: {
+ lang: String,
+ sessionFrom: String,
+ sendMessageTitle: String,
+ sendMessagePath: String,
+ sendMessageImg: String,
+ showMessageCard: Boolean,
+ appParameter: String,
+ formType: String,
+ openType: String
+ }
+}
diff --git a/uni_modules/uv-ui-tools/libs/mixin/mixin.js b/uni_modules/uv-ui-tools/libs/mixin/mixin.js
new file mode 100644
index 0000000..0dd3b03
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/mixin/mixin.js
@@ -0,0 +1,172 @@
+import * as index from '../function/index.js';
+import * as test from '../function/test.js';
+import route from '../util/route.js';
+import debounce from '../function/debounce.js';
+import throttle from '../function/throttle.js';
+export default {
+ // 定义每个组件都可能需要用到的外部样式以及类名
+ props: {
+ // 每个组件都有的父组件传递的样式,可以为字符串或者对象形式
+ customStyle: {
+ type: [Object, String],
+ default: () => ({})
+ },
+ customClass: {
+ type: String,
+ default: ''
+ },
+ // 跳转的页面路径
+ url: {
+ type: String,
+ default: ''
+ },
+ // 页面跳转的类型
+ linkType: {
+ type: String,
+ default: 'navigateTo'
+ }
+ },
+ data() {
+ return {}
+ },
+ onLoad() {
+ // getRect挂载到$uv上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出
+ this.$uv.getRect = this.$uvGetRect
+ },
+ created() {
+ // 组件当中,只有created声明周期,为了能在组件使用,故也在created中将方法挂载到$uv
+ this.$uv.getRect = this.$uvGetRect
+ },
+ computed: {
+ $uv() {
+ return {
+ ...index,
+ test,
+ route,
+ debounce,
+ throttle,
+ unit: uni?.$uv?.config?.unit
+ }
+ },
+ /**
+ * 生成bem规则类名
+ * 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
+ * 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
+ * @param {String} name 组件名称
+ * @param {Array} fixed 一直会存在的类名
+ * @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
+ * @returns {Array|string}
+ */
+ bem() {
+ return function(name, fixed, change) {
+ // 类名前缀
+ const prefix = `uv-${name}--`
+ const classes = {}
+ if (fixed) {
+ fixed.map((item) => {
+ // 这里的类名,会一直存在
+ classes[prefix + this[item]] = true
+ })
+ }
+ if (change) {
+ change.map((item) => {
+ // 这里的类名,会根据this[item]的值为true或者false,而进行添加或者移除某一个类
+ this[item] ? (classes[prefix + item] = this[item]) : (delete classes[prefix + item])
+ })
+ }
+ return Object.keys(classes)
+ // 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
+ // #ifdef MP-ALIPAY || MP-TOUTIAO || MP-LARK || MP-BAIDU
+ .join(' ')
+ // #endif
+ }
+ }
+ },
+ methods: {
+ // 跳转某一个页面
+ openPage(urlKey = 'url') {
+ const url = this[urlKey]
+ if (url) {
+ // 执行类似uni.navigateTo的方法
+ uni[this.linkType]({
+ url
+ })
+ }
+ },
+ // 查询节点信息
+ // 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
+ // 解决办法为在组件根部再套一个没有任何作用的view元素
+ $uvGetRect(selector, all) {
+ return new Promise((resolve) => {
+ uni.createSelectorQuery()
+ .in(this)[all ? 'selectAll' : 'select'](selector)
+ .boundingClientRect((rect) => {
+ if (all && Array.isArray(rect) && rect.length) {
+ resolve(rect)
+ }
+ if (!all && rect) {
+ resolve(rect)
+ }
+ })
+ .exec()
+ })
+ },
+ getParentData(parentName = '') {
+ // 避免在created中去定义parent变量
+ if (!this.parent) this.parent = {}
+ // 这里的本质原理是,通过获取父组件实例(也即类似uv-radio的父组件uv-radio-group的this)
+ // 将父组件this中对应的参数,赋值给本组件(uv-radio的this)的parentData对象中对应的属性
+ // 之所以需要这么做,是因为所有端中,头条小程序不支持通过this.parent.xxx去监听父组件参数的变化
+ // 此处并不会自动更新子组件的数据,而是依赖父组件uv-radio-group去监听data的变化,手动调用更新子组件的方法去重新获取
+ this.parent = this.$uv.$parent.call(this, parentName)
+ if (this.parent.children) {
+ // 如果父组件的children不存在本组件的实例,才将本实例添加到父组件的children中
+ this.parent.children.indexOf(this) === -1 && this.parent.children.push(this)
+ }
+ if (this.parent && this.parentData) {
+ // 历遍parentData中的属性,将parent中的同名属性赋值给parentData
+ Object.keys(this.parentData).map((key) => {
+ this.parentData[key] = this.parent[key]
+ })
+ }
+ },
+ // 阻止事件冒泡
+ preventEvent(e) {
+ e && typeof(e.stopPropagation) === 'function' && e.stopPropagation()
+ },
+ // 空操作
+ noop(e) {
+ this.preventEvent(e)
+ }
+ },
+ onReachBottom() {
+ uni.$emit('uvOnReachBottom')
+ },
+ beforeDestroy() {
+ // 判断当前页面是否存在parent和chldren,一般在checkbox和checkbox-group父子联动的场景会有此情况
+ // 组件销毁时,移除子组件在父组件children数组中的实例,释放资源,避免数据混乱
+ if (this.parent && test.array(this.parent.children)) {
+ // 组件销毁时,移除父组件中的children数组中对应的实例
+ const childrenList = this.parent.children
+ childrenList.map((child, index) => {
+ // 如果相等,则移除
+ if (child === this) {
+ childrenList.splice(index, 1)
+ }
+ })
+ }
+ },
+ // 兼容vue3
+ unmounted() {
+ if (this.parent && test.array(this.parent.children)) {
+ // 组件销毁时,移除父组件中的children数组中对应的实例
+ const childrenList = this.parent.children
+ childrenList.map((child, index) => {
+ // 如果相等,则移除
+ if (child === this) {
+ childrenList.splice(index, 1)
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js b/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js
new file mode 100644
index 0000000..90b6903
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js
@@ -0,0 +1,8 @@
+export default {
+ // #ifdef MP-WEIXIN
+ // 将自定义节点设置成虚拟的(去掉自定义组件包裹层),更加接近Vue组件的表现,能更好的使用flex属性
+ options: {
+ virtualHost: true
+ }
+ // #endif
+}
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/libs/mixin/mpShare.js b/uni_modules/uv-ui-tools/libs/mixin/mpShare.js
new file mode 100644
index 0000000..c9695a0
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/mixin/mpShare.js
@@ -0,0 +1,13 @@
+export default {
+ onLoad() {
+ // 设置默认的转发参数
+ uni.$uv.mpShare = {
+ title: '', // 默认为小程序名称
+ path: '', // 默认为当前页面路径
+ imageUrl: '' // 默认为当前页面的截图
+ }
+ },
+ onShareAppMessage() {
+ return uni.$uv.mpShare
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/libs/mixin/openType.js b/uni_modules/uv-ui-tools/libs/mixin/openType.js
new file mode 100644
index 0000000..1b94b7e
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/mixin/openType.js
@@ -0,0 +1,47 @@
+export default {
+ props: {
+ openType: String
+ },
+ emits: ['getphonenumber','getuserinfo','error','opensetting','launchapp','contact','chooseavatar','addgroupapp','chooseaddress','subscribe','login','im'],
+ methods: {
+ onGetPhoneNumber(event) {
+ this.$emit('getphonenumber', event.detail)
+ },
+ onGetUserInfo(event) {
+ this.$emit('getuserinfo', event.detail)
+ },
+ onError(event) {
+ this.$emit('error', event.detail)
+ },
+ onOpenSetting(event) {
+ this.$emit('opensetting', event.detail)
+ },
+ onLaunchApp(event) {
+ this.$emit('launchapp', event.detail)
+ },
+ onContact(event) {
+ this.$emit('contact', event.detail)
+ },
+ onChooseavatar(event) {
+ this.$emit('chooseavatar', event.detail)
+ },
+ onAgreeprivacyauthorization(event) {
+ this.$emit('agreeprivacyauthorization', event.detail)
+ },
+ onAddgroupapp(event) {
+ this.$emit('addgroupapp', event.detail)
+ },
+ onChooseaddress(event) {
+ this.$emit('chooseaddress', event.detail)
+ },
+ onSubscribe(event) {
+ this.$emit('subscribe', event.detail)
+ },
+ onLogin(event) {
+ this.$emit('login', event.detail)
+ },
+ onIm(event) {
+ this.$emit('im', event.detail)
+ }
+ }
+}
diff --git a/uni_modules/uv-ui-tools/libs/mixin/touch.js b/uni_modules/uv-ui-tools/libs/mixin/touch.js
new file mode 100644
index 0000000..0ecbd88
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/mixin/touch.js
@@ -0,0 +1,59 @@
+const MIN_DISTANCE = 10
+
+function getDirection(x, y) {
+ if (x > y && x > MIN_DISTANCE) {
+ return 'horizontal'
+ }
+ if (y > x && y > MIN_DISTANCE) {
+ return 'vertical'
+ }
+ return ''
+}
+
+export default {
+ methods: {
+ getTouchPoint(e) {
+ if (!e) {
+ return {
+ x: 0,
+ y: 0
+ }
+ } if (e.touches && e.touches[0]) {
+ return {
+ x: e.touches[0].pageX,
+ y: e.touches[0].pageY
+ }
+ } if (e.changedTouches && e.changedTouches[0]) {
+ return {
+ x: e.changedTouches[0].pageX,
+ y: e.changedTouches[0].pageY
+ }
+ }
+ return {
+ x: e.clientX || 0,
+ y: e.clientY || 0
+ }
+ },
+ resetTouchStatus() {
+ this.direction = ''
+ this.deltaX = 0
+ this.deltaY = 0
+ this.offsetX = 0
+ this.offsetY = 0
+ },
+ touchStart(event) {
+ this.resetTouchStatus()
+ const touch = this.getTouchPoint(event)
+ this.startX = touch.x
+ this.startY = touch.y
+ },
+ touchMove(event) {
+ const touch = this.getTouchPoint(event)
+ this.deltaX = touch.x - this.startX
+ this.deltaY = touch.y - this.startY
+ this.offsetX = Math.abs(this.deltaX)
+ this.offsetY = Math.abs(this.deltaY)
+ this.direction = this.direction || getDirection(this.offsetX, this.offsetY)
+ }
+ }
+}
diff --git a/uni_modules/uv-ui-tools/libs/util/dayjs.js b/uni_modules/uv-ui-tools/libs/util/dayjs.js
new file mode 100644
index 0000000..c84ab68
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/util/dayjs.js
@@ -0,0 +1,216 @@
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+
+var require_dayjs_min = __commonJS({
+ "uvuidayjs"(exports, module) {
+ !function(t, e) {
+ "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e();
+ }(exports, function() {
+ "use strict";
+ var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", f = "month", h = "quarter", c = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t2) {
+ var e2 = ["th", "st", "nd", "rd"], n2 = t2 % 100;
+ return "[" + t2 + (e2[(n2 - 20) % 10] || e2[n2] || e2[0]) + "]";
+ } }, m = function(t2, e2, n2) {
+ var r2 = String(t2);
+ return !r2 || r2.length >= e2 ? t2 : "" + Array(e2 + 1 - r2.length).join(n2) + t2;
+ }, v = { s: m, z: function(t2) {
+ var e2 = -t2.utcOffset(), n2 = Math.abs(e2), r2 = Math.floor(n2 / 60), i2 = n2 % 60;
+ return (e2 <= 0 ? "+" : "-") + m(r2, 2, "0") + ":" + m(i2, 2, "0");
+ }, m: function t2(e2, n2) {
+ if (e2.date() < n2.date())
+ return -t2(n2, e2);
+ var r2 = 12 * (n2.year() - e2.year()) + (n2.month() - e2.month()), i2 = e2.clone().add(r2, f), s2 = n2 - i2 < 0, u2 = e2.clone().add(r2 + (s2 ? -1 : 1), f);
+ return +(-(r2 + (n2 - i2) / (s2 ? i2 - u2 : u2 - i2)) || 0);
+ }, a: function(t2) {
+ return t2 < 0 ? Math.ceil(t2) || 0 : Math.floor(t2);
+ }, p: function(t2) {
+ return { M: f, y: c, w: o, d: a, D: d, h: u, m: s, s: i, ms: r, Q: h }[t2] || String(t2 || "").toLowerCase().replace(/s$/, "");
+ }, u: function(t2) {
+ return void 0 === t2;
+ } }, g = "en", D = {};
+ D[g] = M;
+ var p = function(t2) {
+ return t2 instanceof _;
+ }, S = function t2(e2, n2, r2) {
+ var i2;
+ if (!e2)
+ return g;
+ if ("string" == typeof e2) {
+ var s2 = e2.toLowerCase();
+ D[s2] && (i2 = s2), n2 && (D[s2] = n2, i2 = s2);
+ var u2 = e2.split("-");
+ if (!i2 && u2.length > 1)
+ return t2(u2[0]);
+ } else {
+ var a2 = e2.name;
+ D[a2] = e2, i2 = a2;
+ }
+ return !r2 && i2 && (g = i2), i2 || !r2 && g;
+ }, w = function(t2, e2) {
+ if (p(t2))
+ return t2.clone();
+ var n2 = "object" == typeof e2 ? e2 : {};
+ return n2.date = t2, n2.args = arguments, new _(n2);
+ }, O = v;
+ O.l = S, O.i = p, O.w = function(t2, e2) {
+ return w(t2, { locale: e2.$L, utc: e2.$u, x: e2.$x, $offset: e2.$offset });
+ };
+ var _ = function() {
+ function M2(t2) {
+ this.$L = S(t2.locale, null, true), this.parse(t2);
+ }
+ var m2 = M2.prototype;
+ return m2.parse = function(t2) {
+ this.$d = function(t3) {
+ var e2 = t3.date, n2 = t3.utc;
+ if (null === e2)
+ return new Date(NaN);
+ if (O.u(e2))
+ return new Date();
+ if (e2 instanceof Date)
+ return new Date(e2);
+ if ("string" == typeof e2 && !/Z$/i.test(e2)) {
+ var r2 = e2.match($);
+ if (r2) {
+ var i2 = r2[2] - 1 || 0, s2 = (r2[7] || "0").substring(0, 3);
+ return n2 ? new Date(Date.UTC(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2)) : new Date(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2);
+ }
+ }
+ return new Date(e2);
+ }(t2), this.$x = t2.x || {}, this.init();
+ }, m2.init = function() {
+ var t2 = this.$d;
+ this.$y = t2.getFullYear(), this.$M = t2.getMonth(), this.$D = t2.getDate(), this.$W = t2.getDay(), this.$H = t2.getHours(), this.$m = t2.getMinutes(), this.$s = t2.getSeconds(), this.$ms = t2.getMilliseconds();
+ }, m2.$utils = function() {
+ return O;
+ }, m2.isValid = function() {
+ return !(this.$d.toString() === l);
+ }, m2.isSame = function(t2, e2) {
+ var n2 = w(t2);
+ return this.startOf(e2) <= n2 && n2 <= this.endOf(e2);
+ }, m2.isAfter = function(t2, e2) {
+ return w(t2) < this.startOf(e2);
+ }, m2.isBefore = function(t2, e2) {
+ return this.endOf(e2) < w(t2);
+ }, m2.$g = function(t2, e2, n2) {
+ return O.u(t2) ? this[e2] : this.set(n2, t2);
+ }, m2.unix = function() {
+ return Math.floor(this.valueOf() / 1e3);
+ }, m2.valueOf = function() {
+ return this.$d.getTime();
+ }, m2.startOf = function(t2, e2) {
+ var n2 = this, r2 = !!O.u(e2) || e2, h2 = O.p(t2), l2 = function(t3, e3) {
+ var i2 = O.w(n2.$u ? Date.UTC(n2.$y, e3, t3) : new Date(n2.$y, e3, t3), n2);
+ return r2 ? i2 : i2.endOf(a);
+ }, $2 = function(t3, e3) {
+ return O.w(n2.toDate()[t3].apply(n2.toDate("s"), (r2 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e3)), n2);
+ }, y2 = this.$W, M3 = this.$M, m3 = this.$D, v2 = "set" + (this.$u ? "UTC" : "");
+ switch (h2) {
+ case c:
+ return r2 ? l2(1, 0) : l2(31, 11);
+ case f:
+ return r2 ? l2(1, M3) : l2(0, M3 + 1);
+ case o:
+ var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2;
+ return l2(r2 ? m3 - D2 : m3 + (6 - D2), M3);
+ case a:
+ case d:
+ return $2(v2 + "Hours", 0);
+ case u:
+ return $2(v2 + "Minutes", 1);
+ case s:
+ return $2(v2 + "Seconds", 2);
+ case i:
+ return $2(v2 + "Milliseconds", 3);
+ default:
+ return this.clone();
+ }
+ }, m2.endOf = function(t2) {
+ return this.startOf(t2, false);
+ }, m2.$set = function(t2, e2) {
+ var n2, o2 = O.p(t2), h2 = "set" + (this.$u ? "UTC" : ""), l2 = (n2 = {}, n2[a] = h2 + "Date", n2[d] = h2 + "Date", n2[f] = h2 + "Month", n2[c] = h2 + "FullYear", n2[u] = h2 + "Hours", n2[s] = h2 + "Minutes", n2[i] = h2 + "Seconds", n2[r] = h2 + "Milliseconds", n2)[o2], $2 = o2 === a ? this.$D + (e2 - this.$W) : e2;
+ if (o2 === f || o2 === c) {
+ var y2 = this.clone().set(d, 1);
+ y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d;
+ } else
+ l2 && this.$d[l2]($2);
+ return this.init(), this;
+ }, m2.set = function(t2, e2) {
+ return this.clone().$set(t2, e2);
+ }, m2.get = function(t2) {
+ return this[O.p(t2)]();
+ }, m2.add = function(r2, h2) {
+ var d2, l2 = this;
+ r2 = Number(r2);
+ var $2 = O.p(h2), y2 = function(t2) {
+ var e2 = w(l2);
+ return O.w(e2.date(e2.date() + Math.round(t2 * r2)), l2);
+ };
+ if ($2 === f)
+ return this.set(f, this.$M + r2);
+ if ($2 === c)
+ return this.set(c, this.$y + r2);
+ if ($2 === a)
+ return y2(1);
+ if ($2 === o)
+ return y2(7);
+ var M3 = (d2 = {}, d2[s] = e, d2[u] = n, d2[i] = t, d2)[$2] || 1, m3 = this.$d.getTime() + r2 * M3;
+ return O.w(m3, this);
+ }, m2.subtract = function(t2, e2) {
+ return this.add(-1 * t2, e2);
+ }, m2.format = function(t2) {
+ var e2 = this, n2 = this.$locale();
+ if (!this.isValid())
+ return n2.invalidDate || l;
+ var r2 = t2 || "YYYY-MM-DDTHH:mm:ssZ", i2 = O.z(this), s2 = this.$H, u2 = this.$m, a2 = this.$M, o2 = n2.weekdays, f2 = n2.months, h2 = function(t3, n3, i3, s3) {
+ return t3 && (t3[n3] || t3(e2, r2)) || i3[n3].slice(0, s3);
+ }, c2 = function(t3) {
+ return O.s(s2 % 12 || 12, t3, "0");
+ }, d2 = n2.meridiem || function(t3, e3, n3) {
+ var r3 = t3 < 12 ? "AM" : "PM";
+ return n3 ? r3.toLowerCase() : r3;
+ }, $2 = { YY: String(this.$y).slice(-2), YYYY: this.$y, M: a2 + 1, MM: O.s(a2 + 1, 2, "0"), MMM: h2(n2.monthsShort, a2, f2, 3), MMMM: h2(f2, a2), D: this.$D, DD: O.s(this.$D, 2, "0"), d: String(this.$W), dd: h2(n2.weekdaysMin, this.$W, o2, 2), ddd: h2(n2.weekdaysShort, this.$W, o2, 3), dddd: o2[this.$W], H: String(s2), HH: O.s(s2, 2, "0"), h: c2(1), hh: c2(2), a: d2(s2, u2, true), A: d2(s2, u2, false), m: String(u2), mm: O.s(u2, 2, "0"), s: String(this.$s), ss: O.s(this.$s, 2, "0"), SSS: O.s(this.$ms, 3, "0"), Z: i2 };
+ return r2.replace(y, function(t3, e3) {
+ return e3 || $2[t3] || i2.replace(":", "");
+ });
+ }, m2.utcOffset = function() {
+ return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
+ }, m2.diff = function(r2, d2, l2) {
+ var $2, y2 = O.p(d2), M3 = w(r2), m3 = (M3.utcOffset() - this.utcOffset()) * e, v2 = this - M3, g2 = O.m(this, M3);
+ return g2 = ($2 = {}, $2[c] = g2 / 12, $2[f] = g2, $2[h] = g2 / 3, $2[o] = (v2 - m3) / 6048e5, $2[a] = (v2 - m3) / 864e5, $2[u] = v2 / n, $2[s] = v2 / e, $2[i] = v2 / t, $2)[y2] || v2, l2 ? g2 : O.a(g2);
+ }, m2.daysInMonth = function() {
+ return this.endOf(f).$D;
+ }, m2.$locale = function() {
+ return D[this.$L];
+ }, m2.locale = function(t2, e2) {
+ if (!t2)
+ return this.$L;
+ var n2 = this.clone(), r2 = S(t2, e2, true);
+ return r2 && (n2.$L = r2), n2;
+ }, m2.clone = function() {
+ return O.w(this.$d, this);
+ }, m2.toDate = function() {
+ return new Date(this.valueOf());
+ }, m2.toJSON = function() {
+ return this.isValid() ? this.toISOString() : null;
+ }, m2.toISOString = function() {
+ return this.$d.toISOString();
+ }, m2.toString = function() {
+ return this.$d.toUTCString();
+ }, M2;
+ }(), T = _.prototype;
+ return w.prototype = T, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", f], ["$y", c], ["$D", d]].forEach(function(t2) {
+ T[t2[1]] = function(e2) {
+ return this.$g(e2, t2[0], t2[1]);
+ };
+ }), w.extend = function(t2, e2) {
+ return t2.$i || (t2(e2, _, w), t2.$i = true), w;
+ }, w.locale = S, w.isDayjs = p, w.unix = function(t2) {
+ return w(1e3 * t2);
+ }, w.en = D[g], w.Ls = D, w.p = {}, w;
+ });
+ }
+});
+export default require_dayjs_min();
diff --git a/uni_modules/uv-ui-tools/libs/util/route.js b/uni_modules/uv-ui-tools/libs/util/route.js
new file mode 100644
index 0000000..80c0afd
--- /dev/null
+++ b/uni_modules/uv-ui-tools/libs/util/route.js
@@ -0,0 +1,126 @@
+/**
+ * 路由跳转方法,该方法相对于直接使用uni.xxx的好处是使用更加简单快捷
+ * 并且带有路由拦截功能
+ */
+import { queryParams, deepMerge, page } from '@/uni_modules/uv-ui-tools/libs/function/index.js'
+class Router {
+ constructor() {
+ // 原始属性定义
+ this.config = {
+ type: 'navigateTo',
+ url: '',
+ delta: 1, // navigateBack页面后退时,回退的层数
+ params: {}, // 传递的参数
+ animationType: 'pop-in', // 窗口动画,只在APP有效
+ animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效
+ intercept: false ,// 是否需要拦截
+ events: {} // 页面间通信接口,用于监听被打开页面发送到当前页面的数据。hbuilderx 2.8.9+ 开始支持。
+ }
+ // 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文
+ // 这里在构造函数中进行this绑定
+ this.route = this.route.bind(this)
+ }
+
+ // 判断url前面是否有"/",如果没有则加上,否则无法跳转
+ addRootPath(url) {
+ return url[0] === '/' ? url : `/${url}`
+ }
+
+ // 整合路由参数
+ mixinParam(url, params) {
+ url = url && this.addRootPath(url)
+
+ // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary"
+ // 如果有url中有get参数,转换后无需带上"?"
+ let query = ''
+ if (/.*\/.*\?.*=.*/.test(url)) {
+ // object对象转为get类型的参数
+ query = queryParams(params, false)
+ // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开
+ return url += `&${query}`
+ }
+ // 直接拼接参数,因为此处url中没有后面的query参数,也就没有"?/&"之类的符号
+ query = queryParams(params)
+ return url += query
+ }
+
+ // 对外的方法名称
+ async route(options = {}, params = {}) {
+ // 合并用户的配置和内部的默认配置
+ let mergeConfig = {}
+
+ if (typeof options === 'string') {
+ // 如果options为字符串,则为route(url, params)的形式
+ mergeConfig.url = this.mixinParam(options, params)
+ mergeConfig.type = 'navigateTo'
+ } else {
+ mergeConfig = deepMerge(this.config, options)
+ // 否则正常使用mergeConfig中的url和params进行拼接
+ mergeConfig.url = this.mixinParam(options.url, options.params)
+ }
+ // 如果本次跳转的路径和本页面路径一致,不执行跳转,防止用户快速点击跳转按钮,造成多次跳转同一个页面的问题
+ if (mergeConfig.url === page()) return
+
+ if (params.intercept) {
+ mergeConfig.intercept = params.intercept
+ }
+ // params参数也带给拦截器
+ mergeConfig.params = params
+ // 合并内外部参数
+ mergeConfig = deepMerge(this.config, mergeConfig)
+ // 判断用户是否定义了拦截器
+ if (typeof mergeConfig.intercept === 'function') {
+ // 定一个promise,根据用户执行resolve(true)或者resolve(false)来决定是否进行路由跳转
+ const isNext = await new Promise((resolve, reject) => {
+ mergeConfig.intercept(mergeConfig, resolve)
+ })
+ // 如果isNext为true,则执行路由跳转
+ isNext && this.openPage(mergeConfig)
+ } else {
+ this.openPage(mergeConfig)
+ }
+ }
+
+ // 执行路由跳转
+ openPage(config) {
+ // 解构参数
+ const {
+ url,
+ type,
+ delta,
+ animationType,
+ animationDuration,
+ events
+ } = config
+ if (config.type == 'navigateTo' || config.type == 'to') {
+ uni.navigateTo({
+ url,
+ animationType,
+ animationDuration,
+ events
+ })
+ }
+ if (config.type == 'redirectTo' || config.type == 'redirect') {
+ uni.redirectTo({
+ url
+ })
+ }
+ if (config.type == 'switchTab' || config.type == 'tab') {
+ uni.switchTab({
+ url
+ })
+ }
+ if (config.type == 'reLaunch' || config.type == 'launch') {
+ uni.reLaunch({
+ url
+ })
+ }
+ if (config.type == 'navigateBack' || config.type == 'back') {
+ uni.navigateBack({
+ delta
+ })
+ }
+ }
+}
+
+export default (new Router()).route
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/package.json b/uni_modules/uv-ui-tools/package.json
new file mode 100644
index 0000000..2d940f6
--- /dev/null
+++ b/uni_modules/uv-ui-tools/package.json
@@ -0,0 +1,81 @@
+{
+ "id": "uv-ui-tools",
+ "displayName": "uv-ui-tools 工具集 全面兼容vue3+2、app、h5、小程序等多端",
+ "version": "1.1.25",
+ "description": "uv-ui-tools,集成工具库,强大的Http请求封装,清晰的文档说明,开箱即用。方便使用,可以全局使用",
+ "keywords": [
+ "uv-ui-tools,uv-ui组件库,工具集,uvui,uView2.x"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "y",
+ "快手": "y",
+ "飞书": "y",
+ "京东": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/readme.md b/uni_modules/uv-ui-tools/readme.md
new file mode 100644
index 0000000..79a7df5
--- /dev/null
+++ b/uni_modules/uv-ui-tools/readme.md
@@ -0,0 +1,23 @@
+## uv-ui-tools 工具集
+
+> **组件名:uv-ui-tools**
+
+uv-ui工具集成,包括网络Http请求、便捷工具、节流防抖、对象操作、时间格式化、路由跳转、全局唯一标识符、规则校验等等。
+
+该组件推荐配合[uv-ui组件库](https://www.uvui.cn/components/intro.html)使用,单独下载也可以在自己项目中使用,需要做相应的配置,可查看文档。强烈推荐使用[uv-ui组件库](https://www.uvui.cn/components/intro.html),导入组件都会自动导入`uv-ui-tools`。需要在自己的项目中使用请参考[扩展配置](https://www.uvui.cn/components/setting.html)。
+
+uv-ui破釜沉舟之兼容vue3+2、app、h5、多端小程序的uni-app生态框架,大部分组件基于uView2.x,在经过改进后全面支持vue3,部分组件做了进一步的优化,修复大量BUG,支持单独导入,方便开发者选择导入需要的组件。开箱即用,灵活配置。
+
+# 查看文档
+
+## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP)
+
+### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+
+
+
+
+
+
+#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群
\ No newline at end of file
diff --git a/uni_modules/uv-ui-tools/theme.scss b/uni_modules/uv-ui-tools/theme.scss
new file mode 100644
index 0000000..cfaae92
--- /dev/null
+++ b/uni_modules/uv-ui-tools/theme.scss
@@ -0,0 +1,43 @@
+// 此文件为uvUI的主题变量,这些变量目前只能通过uni.scss引入才有效,另外由于
+// uni.scss中引入的样式会同时混入到全局样式文件和单独每一个页面的样式中,造成微信程序包太大,
+// 故uni.scss只建议放scss变量名相关样式,其他的样式可以通过main.js或者App.vue引入
+
+$uv-main-color: #303133;
+$uv-content-color: #606266;
+$uv-tips-color: #909193;
+$uv-light-color: #c0c4cc;
+$uv-border-color: #dadbde;
+$uv-bg-color: #f3f4f6;
+$uv-disabled-color: #c8c9cc;
+
+$uv-primary: #3c9cff;
+$uv-primary-dark: #398ade;
+$uv-primary-disabled: #9acafc;
+$uv-primary-light: #ecf5ff;
+
+$uv-warning: #f9ae3d;
+$uv-warning-dark: #f1a532;
+$uv-warning-disabled: #f9d39b;
+$uv-warning-light: #fdf6ec;
+
+$uv-success: #5ac725;
+$uv-success-dark: #53c21d;
+$uv-success-disabled: #a9e08f;
+$uv-success-light: #f5fff0;
+
+$uv-error: #f56c6c;
+$uv-error-dark: #e45656;
+$uv-error-disabled: #f7b2b2;
+$uv-error-light: #fef0f0;
+
+$uv-info: #909399;
+$uv-info-dark: #767a82;
+$uv-info-disabled: #c4c6c9;
+$uv-info-light: #f4f4f5;
+
+@mixin flex($direction: row) {
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ flex-direction: $direction;
+}
\ No newline at end of file
diff --git a/uni_modules/zero-loading/changelog.md b/uni_modules/zero-loading/changelog.md
new file mode 100644
index 0000000..af6947d
--- /dev/null
+++ b/uni_modules/zero-loading/changelog.md
@@ -0,0 +1,51 @@
+## 1.4.2(2025-04-03)
+## 增加两个动画
+| locating | 定位 (自定义颜色) |
+| photo | 照片 (自定义颜色) |
+## 1.4.1(2024-07-02)
+### 1. 增加动画equal(等边), wobble(摇摆)
+### 2. 原来的triangle(三角)改为surround(环绕)
+### 3. 新增可自定义颜色项
+## 1.4.0(2024-06-28)
+
+## 增加 loading 加载文字提醒配置项,默认 false
+
+## 1.3.2(2023-10-31)
+
+修改遮罩默认透明度为 0.1
+
+## 1.3.1(2023-10-31)
+
+## 新增支持,自定义动画颜色(仅部分动画支持)
+
+## 新增动画-annulus(圆环)
+
+## 1.3.0(2023-08-11)
+
+支持 vue3 使用, 增加动画类型 radar(雷达)
+
+## 1.2.2(2023-06-12)
+
+增加 maskOpacity, maskMini, maskDark 自定义参数, 提供更丰富的自定义遮罩层能力
+
+## 1.2.1(2022-09-09)
+
+增加齿轮动画 type=gear
+
+## 1.2.0(2022-05-27)
+
+1. 增加加载类型-剑气(sword),原子(atom)
+2. 默认类型改为 atom
+3. 遮罩透明度调整
+
+## 1.1.1(2022-04-02)
+
+更新使用说明
+
+## 1.1.0(2022-02-23)
+
+增加 type="love" 的心形加载动画
+
+## 1.0.0(2022-01-28)
+
+首次发布
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-annulus.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-annulus.vue
new file mode 100644
index 0000000..260301f
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-annulus.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-atom.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-atom.vue
new file mode 100644
index 0000000..3b3b75e
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-atom.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-bounce.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-bounce.vue
new file mode 100644
index 0000000..860d23d
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-bounce.vue
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-circle.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-circle.vue
new file mode 100644
index 0000000..958bb14
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-circle.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-equal.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-equal.vue
new file mode 100644
index 0000000..b68b86c
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-equal.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-eyes.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-eyes.vue
new file mode 100644
index 0000000..f7a18d1
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-eyes.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-gear.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-gear.vue
new file mode 100644
index 0000000..19ce873
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-gear.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-locating.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-locating.vue
new file mode 100644
index 0000000..7e140ec
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-locating.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-love.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-love.vue
new file mode 100644
index 0000000..9b5e6cd
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-love.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-photo.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-photo.vue
new file mode 100644
index 0000000..3c9b383
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-photo.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-pulse.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-pulse.vue
new file mode 100644
index 0000000..9c32c7e
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-pulse.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-radar.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-radar.vue
new file mode 100644
index 0000000..ebafa85
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-radar.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-sun.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-sun.vue
new file mode 100644
index 0000000..ed079d8
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-sun.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-surround.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-surround.vue
new file mode 100644
index 0000000..0e47a11
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-surround.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-sword.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-sword.vue
new file mode 100644
index 0000000..8efb848
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-sword.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/static/loading-wobble.vue b/uni_modules/zero-loading/components/zero-loading/static/loading-wobble.vue
new file mode 100644
index 0000000..d8f6283
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/static/loading-wobble.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/components/zero-loading/zero-loading.vue b/uni_modules/zero-loading/components/zero-loading/zero-loading.vue
new file mode 100644
index 0000000..62db5eb
--- /dev/null
+++ b/uni_modules/zero-loading/components/zero-loading/zero-loading.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
diff --git a/uni_modules/zero-loading/package.json b/uni_modules/zero-loading/package.json
new file mode 100644
index 0000000..17f7d3e
--- /dev/null
+++ b/uni_modules/zero-loading/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "zero-loading",
+ "displayName": "zero-loading(加载动画)",
+ "version": "1.4.2",
+ "description": "纯css加载动画, 一个标签元素即可实现炫酷的全屏loading效果,支持vue2,vue3",
+ "keywords": [
+ "loading",
+ "加载动画",
+ "css动画",
+ "加载"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": "",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "u",
+ "app-nvue": "u",
+ "app-harmony": "u",
+ "app-uvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "u",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/zero-loading/readme.md b/uni_modules/zero-loading/readme.md
new file mode 100644
index 0000000..2f14f69
--- /dev/null
+++ b/uni_modules/zero-loading/readme.md
@@ -0,0 +1,69 @@
+# zero-loading
+
+> 仅测试于 vue2, vue3, 微信小程序. 其他平台自行测试
+
+## 使用方法
+
+导入 `uni_modules` 后直接使用即可
+
+提供多种加载动画类型,传入 type 改变 loading 样式,不传默认 circle
+
+### 全屏使用
+
+```html
+
+```
+
+### 局部使用
+
+**父元素的 `position` 记得改为 `relative` 不然可能影响效果**
+
+```html
+
+```
+
+## 参数说明
+
+| 参数 | 类型 | 默认值 | 描述 |
+| ----------- | -------- | --------- | ---------------------------------------------- |
+| type | String | atom | 样式 |
+| position | String | fixed | 定位方式 |
+| zIndex | Number | 9 | |
+| mask | Boolean | false | 是否需要遮罩 (默认为全屏遮罩,背景色默认为黑色) |
+| maskOpacity | Number | 0.1 | 遮罩透明度 |
+| maskMini | Boolean | false | 传入 true 时,使用小遮罩 |
+| maskDark | Boolean | true | 传入 false 时,遮罩背景色为白色 |
+| color | String | #0396FF | 自定义颜色,仅部分支持 |
+| showText | showText | false | 是否显示文字 |
+| text | String | 加载中... | 文本内容 |
+| textSize | String | 28rpx | 文字大小 |
+| textColor | String | #333333 | 文字颜色 |
+| textGap | String | 40rpx | 文字与 loading 动画的间距 |
+
+### type 可选值:
+
+| type 值 | 描述 |
+| -------- | ----------------- |
+| locating | 定位 (自定义颜色) |
+| photo | 照片 (自定义颜色) |
+| equal | 等边 (自定义颜色) |
+| wobble | 摇摆 (自定义颜色) |
+| annulus | 圆环 (自定义颜色) |
+| sword | 剑气 (自定义颜色) |
+| atom | 原子 (自定义颜色) |
+| pulse | 脉冲 (自定义颜色) |
+| circle | 圆圈 (自定义颜色) |
+| eyes | 眼睛 |
+| surround | 环绕 |
+| bounce | 弹跳 |
+| radar | 雷达 |
+| gear | 齿轮 |
+| love | 爱心 |
+| sun | 太阳 |
+
+插件预览:
+
+
+> 小程序搜索: 零技术
+
+> 预览的小程序不一定能及时更新当前插件
diff --git a/unpackage/dist/build/mp-weixin/api/apis.js b/unpackage/dist/build/mp-weixin/api/apis.js
new file mode 100644
index 0000000..7ed9b6d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/api/apis.js
@@ -0,0 +1 @@
+"use strict";const t=require("../utils/request.js");exports.apiDetailWall=function(e={}){return t.request({url:"/detailWall",data:e})},exports.apiGetBanner=function(){return t.request({url:"/homeBanner"})},exports.apiGetClassList=function(e={}){return t.request({url:"/wallList",data:e})},exports.apiGetClassify=function(e={}){return t.request({url:"/classify",data:e})},exports.apiGetDayRandom=function(){return t.request({url:"/randomWall"})},exports.apiGetHistoryList=function(e={}){return t.request({url:"/userWallList",data:e})},exports.apiGetNotice=function(e={}){return t.request({url:"/wallNewsList",data:e})},exports.apiGetSetScore=function(e={}){return t.request({url:"/setupScore",data:e})},exports.apiNoticeDetail=function(e={}){return t.request({url:"/wallNewsDetail",data:e})},exports.apiSearchData=function(e={}){return t.request({url:"/searchWall",data:e})},exports.apiUserInfo=function(e={}){return t.request({url:"/userInfo",data:e})},exports.apiWriteDownload=function(e={}){return t.request({url:"/downloadWall",data:e})};
diff --git a/unpackage/dist/build/mp-weixin/app.js b/unpackage/dist/build/mp-weixin/app.js
new file mode 100644
index 0000000..d4ac6bf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/app.js
@@ -0,0 +1 @@
+"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./common/vendor.js");Math;const n={onLaunch:function(){console.log("App Launch")},onShow:function(){console.log("App Show")},onHide:function(){console.log("App Hide")}};function e(){return{app:o.createSSRApp(n)}}e().app.mount("#app"),exports.createApp=e;
diff --git a/unpackage/dist/build/mp-weixin/app.json b/unpackage/dist/build/mp-weixin/app.json
new file mode 100644
index 0000000..2bec4bb
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/app.json
@@ -0,0 +1,44 @@
+{
+ "pages": [
+ "pages/index/index",
+ "components/components",
+ "pages/classify/classify",
+ "pages/user/user",
+ "pages/classlist/classlist",
+ "pages/preview/preview",
+ "pages/notice/notice",
+ "pages/notice/detail",
+ "pages/search/search"
+ ],
+ "window": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "咸虾米壁纸",
+ "navigationBarBackgroundColor": "#fff",
+ "backgroundColor": "#F8F8F8"
+ },
+ "tabBar": {
+ "color": "#9799a5",
+ "selectedColor": "#28b389",
+ "list": [
+ {
+ "text": "推荐",
+ "pagePath": "pages/index/index",
+ "iconPath": "/static/images/tabBar/home.png",
+ "selectedIconPath": "/static/images/tabBar/home-h.png"
+ },
+ {
+ "text": "分类",
+ "pagePath": "pages/classify/classify",
+ "iconPath": "/static/images/tabBar/classify.png",
+ "selectedIconPath": "/static/images/tabBar/classify-h.png"
+ },
+ {
+ "text": "我的",
+ "pagePath": "pages/user/user",
+ "iconPath": "/static/images/tabBar/user.png",
+ "selectedIconPath": "/static/images/tabBar/user-h.png"
+ }
+ ]
+ },
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/app.wxss b/unpackage/dist/build/mp-weixin/app.wxss
new file mode 100644
index 0000000..3843830
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/app.wxss
@@ -0,0 +1,2 @@
+view,swiper,swiper-item{box-sizing:border-box}.pageBg{background:linear-gradient(to bottom,transparent 0%,#fff 400rpx),linear-gradient(to right,#beecd8 20%,#f4e2d8);min-height:80vh}.loadingLayout{padding:30rpx 0}.safe-area-inset-bottom{height:env(safe-area-inset-bottom)}
+page::after{position:fixed;content:'';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/5130524452546b345269556c6433686b4d474e6b4d5459774e6d466a4e6d45784f544d32/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/5130524452546b345269556c6433686b4d474e6b4d5459774e6d466a4e6d45784f544d32/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn1.dcloud.net.cn/5130524452546b345269556c6433686b4d474e6b4d5459774e6d466a4e6d45784f544d32/img/shadow-grey.png)}100%{background-image:url(https://cdn1.dcloud.net.cn/5130524452546b345269556c6433686b4d474e6b4d5459774e6d466a4e6d45784f544d32/img/shadow-grey.png)}}page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/assets/more.14a1a72b.jpg b/unpackage/dist/build/mp-weixin/assets/more.14a1a72b.jpg
new file mode 100644
index 0000000..8cc2ff3
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/assets/more.14a1a72b.jpg differ
diff --git a/unpackage/dist/build/mp-weixin/common/assets.js b/unpackage/dist/build/mp-weixin/common/assets.js
new file mode 100644
index 0000000..7b370da
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/common/assets.js
@@ -0,0 +1 @@
+"use strict";exports._imports_0="/static/images/xxmLogo.png",exports._imports_0$1="/assets/more.14a1a72b.jpg";
diff --git a/unpackage/dist/build/mp-weixin/common/vendor.js b/unpackage/dist/build/mp-weixin/common/vendor.js
new file mode 100644
index 0000000..dd2643d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/common/vendor.js
@@ -0,0 +1,7 @@
+"use strict";
+/**
+* @vue/shared v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function e(e,t){const n=new Set(e.split(","));return t?e=>n.has(e.toLowerCase()):e=>n.has(e)}const t={},n=[],o=()=>{},r=()=>!1,s=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),i=e=>e.startsWith("onUpdate:"),c=Object.assign,a=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},l=Object.prototype.hasOwnProperty,u=(e,t)=>l.call(e,t),f=Array.isArray,p=e=>"[object Map]"===x(e),h=e=>"[object Set]"===x(e),d=e=>"function"==typeof e,g=e=>"string"==typeof e,m=e=>"symbol"==typeof e,v=e=>null!==e&&"object"==typeof e,_=e=>(v(e)||d(e))&&d(e.then)&&d(e.catch),y=Object.prototype.toString,x=e=>y.call(e),b=e=>"[object Object]"===x(e),w=e=>g(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,$=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),k=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},S=/-(\w)/g,O=k((e=>e.replace(S,((e,t)=>t?t.toUpperCase():"")))),C=/\B([A-Z])/g,E=k((e=>e.replace(C,"-$1").toLowerCase())),P=k((e=>e.charAt(0).toUpperCase()+e.slice(1))),I=k((e=>e?`on${P(e)}`:"")),A=(e,t)=>!Object.is(e,t),j=(e,t)=>{for(let n=0;n{const t=parseFloat(e);return isNaN(t)?e:t};function R(e){if(f(e)){const t={};for(let n=0;n{if(e){const n=e.split(M);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function H(e){let t="";if(g(e))t=e;else if(f(e))for(let n=0;nt&&t.__v_isRef?N(e,t.value):p(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n],o)=>(e[B(t,o)+" =>"]=n,e)),{})}:h(t)?{[`Set(${t.size})`]:[...t.values()].map((e=>B(e)))}:m(t)?B(t):!v(t)||f(t)||b(t)?t:String(t),B=(e,t="")=>{var n;return m(e)?`Symbol(${null!=(n=e.description)?n:t})`:e};function U(e,t=null){let n;return(...o)=>(e&&(n=e.apply(t,o),e=null),n)}function W(e,t){if(!g(t))return;const n=(t=t.replace(/\[(\d+)\]/g,".$1")).split(".");let o=n[0];return e||(e={}),1===n.length?e[o]:W(e[o],n.slice(1).join("."))}function z(e){let t={};return b(e)&&Object.keys(e).sort().forEach((n=>{const o=n;t[o]=e[o]})),Object.keys(t)?t:e}const F=/:/g;const K=encodeURIComponent;function q(e,t=K){const n=e?Object.keys(e).map((n=>{let o=e[n];return void 0===typeof o||null===o?o="":b(o)&&(o=JSON.stringify(o)),t(n)+"="+t(o)})).filter((e=>e.length>0)).join("&"):null;return n?`?${n}`:""}const G=["onInit","onLoad","onShow","onHide","onUnload","onBackPress","onPageScroll","onTabItemTap","onReachBottom","onPullDownRefresh","onShareTimeline","onShareAppMessage","onShareChat","onAddToFavorites","onSaveExitState","onNavigationBarButtonTap","onNavigationBarSearchInputClicked","onNavigationBarSearchInputChanged","onNavigationBarSearchInputConfirmed","onNavigationBarSearchInputFocusChanged"];const J=["onShow","onHide","onLaunch","onError","onThemeChange","onPageNotFound","onUnhandledRejection","onExit","onInit","onLoad","onReady","onUnload","onResize","onBackPress","onPageScroll","onTabItemTap","onReachBottom","onPullDownRefresh","onShareTimeline","onAddToFavorites","onShareAppMessage","onShareChat","onSaveExitState","onNavigationBarButtonTap","onNavigationBarSearchInputClicked","onNavigationBarSearchInputChanged","onNavigationBarSearchInputConfirmed","onNavigationBarSearchInputFocusChanged"],Z=(()=>({onPageScroll:1,onShareAppMessage:2,onShareTimeline:4}))();function Q(e,t,n=!0){return!(n&&!d(t))&&(J.indexOf(e)>-1||0===e.indexOf("on"))}let X;const Y=[];const ee=U(((e,t)=>t(e))),te=function(){};te.prototype={_id:1,on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n,_id:this._id}),this._id++},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;o=0;s--)if(o[s].fn===t||o[s].fn._===t||o[s]._id===t){o.splice(s,1);break}r=o}return r.length?n[e]=r:delete n[e],this}};var ne=te;const oe=["{","}"];const re=/^(?:\d)+/,se=/^(?:\w)+/;const ie=Object.prototype.hasOwnProperty,ce=(e,t)=>ie.call(e,t),ae=new class{constructor(){this._caches=Object.create(null)}interpolate(e,t,n=oe){if(!t)return[e];let o=this._caches[e];return o||(o=function(e,[t,n]){const o=[];let r=0,s="";for(;r-1?"zh-Hans":e.indexOf("-hant")>-1?"zh-Hant":(n=e,["-tw","-hk","-mo","-cht"].find((e=>-1!==n.indexOf(e)))?"zh-Hant":"zh-Hans");var n;let o=["en","fr","es"];t&&Object.keys(t).length>0&&(o=Object.keys(t));const r=function(e,t){return t.find((t=>0===e.indexOf(t)))}(e,o);return r||void 0}class ue{constructor({locale:e,fallbackLocale:t,messages:n,watcher:o,formater:r}){this.locale="en",this.fallbackLocale="en",this.message={},this.messages={},this.watchers=[],t&&(this.fallbackLocale=t),this.formater=r||ae,this.messages=n||{},this.setLocale(e||"en"),o&&this.watchLocale(o)}setLocale(e){const t=this.locale;this.locale=le(e,this.messages)||this.fallbackLocale,this.messages[this.locale]||(this.messages[this.locale]={}),this.message=this.messages[this.locale],t!==this.locale&&this.watchers.forEach((e=>{e(this.locale,t)}))}getLocale(){return this.locale}watchLocale(e){const t=this.watchers.push(e)-1;return()=>{this.watchers.splice(t,1)}}add(e,t,n=!0){const o=this.messages[e];o?n?Object.assign(o,t):Object.keys(t).forEach((e=>{ce(o,e)||(o[e]=t[e])})):this.messages[e]=t}f(e,t,n){return this.formater.interpolate(e,t,n).join("")}t(e,t,n){let o=this.message;return"string"==typeof t?(t=le(t,this.messages))&&(o=this.messages[t]):n=t,ce(o,e)?this.formater.interpolate(o[e],n).join(""):(console.warn(`Cannot translate the value of keypath ${e}. Use the value of keypath as default.`),e)}}function fe(e){return function(){try{return e.apply(e,arguments)}catch(t){console.error(t)}}}let pe=1;const he={};function de(e,t,n){if("number"==typeof e){const o=he[e];if(o)return o.keepAlive||delete he[e],o.callback(t,n)}return t}const ge="success",me="fail",ve="complete";function _e(e,t={},{beforeAll:n,beforeSuccess:o}={}){b(t)||(t={});const{success:r,fail:s,complete:i}=function(e){const t={};for(const n in e){const o=e[n];d(o)&&(t[n]=fe(o),delete e[n])}return t}(t),c=d(r),a=d(s),l=d(i),u=pe++;return function(e,t,n,o=!1){he[e]={name:t,keepAlive:o,callback:n}}(u,e,(u=>{(u=u||{}).errMsg=function(e,t){return e&&-1!==e.indexOf(":fail")?t+e.substring(e.indexOf(":fail")):t+":ok"}(u.errMsg,e),d(n)&&n(u),u.errMsg===e+":ok"?(d(o)&&o(u,t),c&&r(u)):a&&s(u),l&&i(u)})),u}const ye="success",xe="fail",be="complete",we={},$e={};function ke(e,t){return function(n){return e(n,t)||n}}function Se(e,t,n){let o=!1;for(let r=0;re(t),catch(){}}}function Oe(e,t={}){return[ye,xe,be].forEach((n=>{const o=e[n];if(!f(o))return;const r=t[n];t[n]=function(e){Se(o,e,t).then((e=>d(r)&&r(e)||e))}})),t}function Ce(e,t){const n=[];f(we.returnValue)&&n.push(...we.returnValue);const o=$e[e];return o&&f(o.returnValue)&&n.push(...o.returnValue),n.forEach((e=>{t=e(t)||t})),t}function Ee(e){const t=Object.create(null);Object.keys(we).forEach((e=>{"returnValue"!==e&&(t[e]=we[e].slice())}));const n=$e[e];return n&&Object.keys(n).forEach((e=>{"returnValue"!==e&&(t[e]=(t[e]||[]).concat(n[e]))})),t}function Pe(e,t,n,o){const r=Ee(e);if(r&&Object.keys(r).length){if(f(r.invoke)){return Se(r.invoke,n).then((n=>t(Oe(Ee(e),n),...o)))}return t(Oe(r,n),...o)}return t(n,...o)}function Ie(e,t){return(n={},...o)=>function(e){return!(!b(e)||![ge,me,ve].find((t=>d(e[t]))))}(n)?Ce(e,Pe(e,t,c({},n),o)):Ce(e,new Promise(((r,s)=>{Pe(e,t,c({},n,{success:r,fail:s}),o)})))}function Ae(e,t,n,o={}){const r=t+":fail";let s="";return s=n?0===n.indexOf(r)?n:r+" "+n:r,delete o.errCode,de(e,c({errMsg:s},o))}function je(e,t,n,o){const r=function(e,t){e[0]}(t);if(r)return r}function Le(e,t,n,o){return n=>{const r=_e(e,n,o),s=je(0,[n]);return s?Ae(r,e,s):t(n,{resolve:t=>function(e,t,n){return de(e,c(n||{},{errMsg:t+":ok"}))}(r,e,t),reject:(t,n)=>Ae(r,e,function(e){return!e||g(e)?e:e.stack?("undefined"!=typeof globalThis&&globalThis.harmonyChannel||console.error(e.message+"\n"+e.stack),e.message):e}(t),n)})}}function Re(e,t,n,o){return function(e,t,n,o){return(...e)=>{const n=je(0,e);if(n)throw new Error(n);return t.apply(null,e)}}(0,t)}let Te=!1,Me=0,Ve=0;const De=Re(0,((e,t)=>{if(0===Me&&function(){var e,t;let n,o,r;{const s=(null===(e=wx.getWindowInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync(),i=(null===(t=wx.getDeviceInfo)||void 0===t?void 0:t.call(wx))||wx.getSystemInfoSync();n=s.windowWidth,o=s.pixelRatio,r=i.platform}Me=n,Ve=o,Te="ios"===r}(),0===(e=Number(e)))return 0;let n=e/750*(t||Me);return n<0&&(n=-n),n=Math.floor(n+1e-4),0===n&&(n=1!==Ve&&Te?.5:1),e<0?-n:n}));function He(e,t){Object.keys(t).forEach((n=>{d(t[n])&&(e[n]=function(e,t){const n=t?e?e.concat(t):f(t)?t:[t]:e;return n?function(e){const t=[];for(let n=0;n{const o=e[n],r=t[n];f(o)&&d(r)&&a(o,r)}))}const Be=Re(0,((e,t)=>{g(e)&&b(t)?He($e[e]||($e[e]={}),t):b(e)&&He(we,e)})),Ue=Re(0,((e,t)=>{g(e)?b(t)?Ne($e[e],t):delete $e[e]:b(e)&&Ne(we,e)}));const We=new class{constructor(){this.$emitter=new ne}on(e,t){return this.$emitter.on(e,t)}once(e,t){return this.$emitter.once(e,t)}off(e,t){e?this.$emitter.off(e,t):this.$emitter.e={}}emit(e,...t){this.$emitter.emit(e,...t)}},ze=Re(0,((e,t)=>(We.on(e,t),()=>We.off(e,t)))),Fe=Re(0,((e,t)=>(We.once(e,t),()=>We.off(e,t)))),Ke=Re(0,((e,t)=>{f(e)||(e=e?[e]:[]),e.forEach((e=>{We.off(e,t)}))})),qe=Re(0,((e,...t)=>{We.emit(e,...t)}));let Ge,Je,Ze;function Qe(e){try{return JSON.parse(e)}catch(t){}return e}const Xe=[];function Ye(e,t){Xe.forEach((n=>{n(e,t)})),Xe.length=0}const et=Ie(tt="getPushClientId",function(e,t,n,o){return Le(e,t,0,o)}(tt,((e,{resolve:t,reject:n})=>{Promise.resolve().then((()=>{void 0===Ze&&(Ze=!1,Ge="",Je="uniPush is not enabled"),Xe.push(((e,o)=>{e?t({cid:e}):n(o)})),void 0!==Ge&&Ye(Ge,Je)}))}),0,nt));var tt,nt;const ot=[],rt=/^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/,st=/^create|Manager$/,it=["createBLEConnection"],ct=["request","downloadFile","uploadFile","connectSocket"],at=["createBLEConnection"],lt=/^on|^off/;function ut(e){return st.test(e)&&-1===it.indexOf(e)}function ft(e){return rt.test(e)&&-1===at.indexOf(e)}function pt(e){return-1!==ct.indexOf(e)}function ht(e){return!(ut(e)||ft(e)||function(e){return lt.test(e)&&"onPush"!==e}(e))}function dt(e,t){return ht(e)&&d(t)?function(n={},...o){return d(n.success)||d(n.fail)||d(n.complete)?Ce(e,Pe(e,t,c({},n),o)):Ce(e,new Promise(((r,s)=>{Pe(e,t,c({},n,{success:r,fail:s}),o)})))}:t}Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then((n=>t.resolve(e&&e()).then((()=>n))),(n=>t.resolve(e&&e()).then((()=>{throw n}))))});const gt=["success","fail","cancel","complete"];const mt=()=>{const e=d(getApp)&&getApp({allowDefault:!0});return e&&e.$vm?e.$vm.$locale:function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=le(n&&n.language?n.language:"en")||"en"}return t}()},vt=[];"undefined"!=typeof global&&(global.getLocale=mt);let _t;function yt(e=wx){return function(t,n){_t=_t||e.getStorageSync("__DC_STAT_UUID"),_t||(_t=Date.now()+""+Math.floor(1e7*Math.random()),wx.setStorage({key:"__DC_STAT_UUID",data:_t})),n.deviceId=_t}}function xt(e,t){if(e.safeArea){const n=e.safeArea;t.safeAreaInsets={top:n.top,left:n.left,right:e.windowWidth-n.right,bottom:e.screenHeight-n.bottom}}}function bt(e,t){let n="",o="";switch(n=e.split(" ")[0]||t,o=e.split(" ")[1]||"",n=n.toLowerCase(),n){case"harmony":case"ohos":case"openharmony":n="harmonyos";break;case"iphone os":n="ios";break;case"mac":case"darwin":n="macos";break;case"windows_nt":n="windows"}return{osName:n,osVersion:o}}function wt(e,t){let n=e.deviceType||"phone";{const e={ipad:"pad",windows:"pc",mac:"pc"},o=Object.keys(e),r=t.toLowerCase();for(let t=0;t{xt(e,t),yt()(e,t),function(e,t){const{brand:n="",model:o="",system:r="",language:s="",theme:i,version:a,platform:l,fontSizeSetting:u,SDKVersion:f,pixelRatio:p,deviceOrientation:h}=e,{osName:d,osVersion:g}=bt(r,l);let m=a,v=wt(e,o),_=$t(n),y=St(e),x=h,b=p,w=f;const $=(s||"").replace(/_/g,"-"),k={appId:"__UNI__CDCE98F",appName:"wallpaper-kt",appVersion:"1.0.0",appVersionCode:"100",appLanguage:kt($),uniCompileVersion:"4.75",uniCompilerVersion:"4.75",uniRuntimeVersion:"4.75",uniPlatform:"mp-weixin",deviceBrand:_,deviceModel:o,deviceType:v,devicePixelRatio:b,deviceOrientation:x,osName:d,osVersion:g,hostTheme:i,hostVersion:m,hostLanguage:$,hostName:y,hostSDKVersion:w,hostFontSizeSetting:u,windowTop:0,windowBottom:0,osLanguage:void 0,osTheme:void 0,ua:void 0,hostPackageName:void 0,browserName:void 0,browserVersion:void 0,isUniAppX:!1};c(t,k)}(e,t)}},Ct=Ot,Et={args(e,t){let n=parseInt(e.current);if(isNaN(n))return;const o=e.urls;if(!f(o))return;const r=o.length;return r?(n<0?n=0:n>=r&&(n=r-1),n>0?(t.current=o[n],t.urls=o.filter(((e,t)=>!(t{const{brand:n,model:o,system:r="",platform:s=""}=e;let i=wt(e,o),a=$t(n);yt()(e,t);const{osName:l,osVersion:u}=bt(r,s);t=z(c(t,{deviceType:i,deviceBrand:a,deviceModel:o,osName:l,osVersion:u}))}},At={returnValue:(e,t)=>{const{version:n,language:o,SDKVersion:r,theme:s}=e;let i=St(e),a=(o||"").replace(/_/g,"-");const l={hostVersion:n,hostLanguage:a,hostName:i,hostSDKVersion:r,hostTheme:s,appId:"__UNI__CDCE98F",appName:"wallpaper-kt",appVersion:"1.0.0",appVersionCode:"100",appLanguage:kt(a),isUniAppX:!1,uniPlatform:"mp-weixin",uniCompileVersion:"4.75",uniCompilerVersion:"4.75",uniRuntimeVersion:"4.75"};c(t,l)}},jt={returnValue:(e,t)=>{xt(e,t),t=z(c(t,{windowTop:0,windowBottom:0}))}},Lt={args(e){const t=getApp({allowDefault:!0})||{};t.$vm?gr("onError",e,t.$vm.$):(wx.$onErrorHandlers||(wx.$onErrorHandlers=[]),wx.$onErrorHandlers.push(e))}},Rt={args(e){const t=getApp({allowDefault:!0})||{};if(t.$vm){if(e.__weh){const n=t.$vm.$.onError;if(n){const t=n.indexOf(e.__weh);t>-1&&n.splice(t,1)}}}else{if(!wx.$onErrorHandlers)return;const t=wx.$onErrorHandlers.findIndex((t=>t===e));-1!==t&&wx.$onErrorHandlers.splice(t,1)}}},Tt={args(){if(wx.__uni_console__){if(wx.__uni_console_warned__)return;wx.__uni_console_warned__=!0,console.warn("开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)")}}},Mt=Tt,Vt={$on:ze,$off:Ke,$once:Fe,$emit:qe,upx2px:De,rpx2px:De,interceptors:{},addInterceptor:Be,removeInterceptor:Ue,onCreateVueApp:function(e){if(X)return e(X);Y.push(e)},invokeCreateVueAppHook:function(e){X=e,Y.forEach((t=>t(e)))},getLocale:mt,setLocale:e=>{const t=d(getApp)&&getApp();if(!t)return!1;return t.$vm.$locale!==e&&(t.$vm.$locale=e,vt.forEach((t=>t({locale:e}))),!0)},onLocaleChange:e=>{-1===vt.indexOf(e)&&vt.push(e)},getPushClientId:et,onPushMessage:e=>{-1===ot.indexOf(e)&&ot.push(e)},offPushMessage:e=>{if(e){const t=ot.indexOf(e);t>-1&&ot.splice(t,1)}else ot.length=0},invokePushCallback:function(e){if("enabled"===e.type)Ze=!0;else if("clientId"===e.type)Ge=e.cid,Je=e.errMsg,Ye(Ge,e.errMsg);else if("pushMsg"===e.type){const t={type:"receive",data:Qe(e.message)};for(let e=0;e{t({type:"click",data:Qe(e.message)})}))},__f__:function(e,t,...n){t&&n.push(t),console[e].apply(console,n)}};const Dt=["qy","env","error","version","lanDebug","cloud","serviceMarket","router","worklet","__webpack_require_UNI_MP_PLUGIN__"],Ht=["lanDebug","router","worklet"],Nt=wx.getLaunchOptionsSync?wx.getLaunchOptionsSync():null;function Bt(e){return(!Nt||1154!==Nt.scene||!Ht.includes(e))&&(Dt.indexOf(e)>-1||"function"==typeof wx[e])}function Ut(){const e={};for(const t in wx)Bt(t)&&(e[t]=wx[t]);return"undefined"!=typeof globalThis&&"undefined"==typeof requireMiniProgram&&(globalThis.wx=e),e}const Wt=["__route__","__wxExparserNodeId__","__wxWebviewId__"],zt=(Ft={oauth:["weixin"],share:["weixin"],payment:["wxpay"],push:["weixin"]},function({service:e,success:t,fail:n,complete:o}){let r;Ft[e]?(r={errMsg:"getProvider:ok",service:e,provider:Ft[e]},d(t)&&t(r)):(r={errMsg:"getProvider:fail:服务["+e+"]不存在"},d(n)&&n(r)),d(o)&&o(r)});var Ft;const Kt=Ut();Kt.canIUse("getAppBaseInfo")||(Kt.getAppBaseInfo=Kt.getSystemInfoSync),Kt.canIUse("getWindowInfo")||(Kt.getWindowInfo=Kt.getSystemInfoSync),Kt.canIUse("getDeviceInfo")||(Kt.getDeviceInfo=Kt.getSystemInfoSync);let qt=Kt.getAppBaseInfo&&Kt.getAppBaseInfo();qt||(qt=Kt.getSystemInfoSync());const Gt=qt?qt.host:null,Jt=Gt&&"SAAASDK"===Gt.env?Kt.miniapp.shareVideoMessage:Kt.shareVideoMessage;var Zt=Object.freeze({__proto__:null,createSelectorQuery:function(){const e=Kt.createSelectorQuery(),t=e.in;return e.in=function(e){return e.$scope?t.call(this,e.$scope):t.call(this,function(e){const t=Object.create(null);return Wt.forEach((n=>{t[n]=e[n]})),t}(e))},e},getProvider:zt,shareVideoMessage:Jt});const Qt={args(e,t){e.compressedHeight&&!t.compressHeight&&(t.compressHeight=e.compressedHeight),e.compressedWidth&&!t.compressWidth&&(t.compressWidth=e.compressedWidth)}};var Xt=Object.freeze({__proto__:null,compressImage:Qt,getAppAuthorizeSetting:{returnValue:function(e,t){const{locationReducedAccuracy:n}=e;t.locationAccuracy="unsupported",!0===n?t.locationAccuracy="reduced":!1===n&&(t.locationAccuracy="full")}},getAppBaseInfo:At,getDeviceInfo:It,getSystemInfo:Ot,getSystemInfoSync:Ct,getWindowInfo:jt,offError:Rt,onError:Lt,onSocketMessage:Mt,onSocketOpen:Tt,previewImage:Et,redirectTo:{},showActionSheet:Pt});const Yt=Ut();var en=function(e,t,n=wx){const o=function(e){function t(e,t,n){return function(r){return t(o(e,r,n))}}function n(e,n,o={},r={},s=!1){if(b(n)){const i=!0===s?n:{};d(o)&&(o=o(n,i)||{});for(const c in n)if(u(o,c)){let t=o[c];d(t)&&(t=t(n[c],n,i)),t?g(t)?i[t]=n[c]:b(t)&&(i[t.name?t.name:c]=t.value):console.warn(`微信小程序 ${e} 暂不支持 ${c}`)}else if(-1!==gt.indexOf(c)){const o=n[c];d(o)&&(i[c]=t(e,o,r))}else s||u(i,c)||(i[c]=n[c]);return i}return d(n)&&(d(o)&&o(n,{}),n=t(e,n,r)),n}function o(t,o,r,s=!1){return d(e.returnValue)&&(o=e.returnValue(t,o)),n(t,o,r,{},s||!1)}return function(t,r){const s=u(e,t);if(!s&&"function"!=typeof wx[t])return r;const i=s||d(e.returnValue)||ut(t)||pt(t),c=s||d(r);if(!s&&!r)return function(){console.error(`微信小程序 暂不支持${t}`)};if(!i||!c)return r;const a=e[t];return function(e,r){let s=a||{};d(a)&&(s=a(e));const i=[e=n(t,e,s.args,s.returnValue)];void 0!==r&&i.push(r);const c=wx[s.name||t].apply(wx,i);return(ut(t)||pt(t))&&c&&!c.__v_skip&&(c.__v_skip=!0),ft(t)?o(t,c,s.returnValue,ut(t)):c}}}(t);return new Proxy({},{get:(t,r)=>u(t,r)?t[r]:u(e,r)?dt(r,e[r]):u(Vt,r)?dt(r,Vt[r]):dt(r,o(r,n[r]))})}(Zt,Xt,Yt);let tn,nn;class on{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=tn,!e&&tn&&(this.index=(tn.scopes||(tn.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=tn;try{return tn=this,e()}finally{tn=t}}}on(){tn=this}off(){tn=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t=4))break}1===this._dirtyLevel&&(this._dirtyLevel=0),hn()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=ln,t=nn;try{return ln=!0,nn=this,this._runnings++,sn(this),this.fn()}finally{cn(this),this._runnings--,nn=t,ln=e}}stop(){var e;this.active&&(sn(this),cn(this),null==(e=this.onStop)||e.call(this),this.active=!1)}}function sn(e){e._trackId++,e._depsLength=0}function cn(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},xn=new WeakMap,bn=Symbol(""),wn=Symbol("");function $n(e,t,n){if(ln&&nn){let t=xn.get(e);t||xn.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=yn((()=>t.delete(n)))),mn(nn,o)}}function kn(e,t,n,o,r,s){const i=xn.get(e);if(!i)return;let c=[];if("clear"===t)c=[...i.values()];else if("length"===n&&f(e)){const e=Number(o);i.forEach(((t,n)=>{("length"===n||!m(n)&&n>=e)&&c.push(t)}))}else switch(void 0!==n&&c.push(i.get(n)),t){case"add":f(e)?w(n)&&c.push(i.get("length")):(c.push(i.get(bn)),p(e)&&c.push(i.get(wn)));break;case"delete":f(e)||(c.push(i.get(bn)),p(e)&&c.push(i.get(wn)));break;case"set":p(e)&&c.push(i.get(bn))}dn();for(const a of c)a&&_n(a,4);gn()}const Sn=e("__proto__,__v_isRef,__isVue"),On=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(m)),Cn=En();function En(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=go(this);for(let t=0,r=this.length;t{e[t]=function(...e){pn(),dn();const n=go(this)[t].apply(this,e);return gn(),hn(),n}})),e}function Pn(e){const t=go(this);return $n(t,0,e),t.hasOwnProperty(e)}class In{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const o=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(o?r?io:so:r?ro:oo).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const s=f(e);if(!o){if(s&&u(Cn,t))return Reflect.get(Cn,t,n);if("hasOwnProperty"===t)return Pn}const i=Reflect.get(e,t,n);return(m(t)?On.has(t):Sn(t))?i:(o||$n(e,0,t),r?i:wo(i)?s&&w(t)?i:i.value:v(i)?o?lo(i):ao(i):i)}}class An extends In{constructor(e=!1){super(!1,e)}set(e,t,n,o){let r=e[t];if(!this._isShallow){const t=po(r);if(ho(n)||po(n)||(r=go(r),n=go(n)),!f(e)&&wo(r)&&!wo(n))return!t&&(r.value=n,!0)}const s=f(e)&&w(t)?Number(t)e,Vn=e=>Reflect.getPrototypeOf(e);function Dn(e,t,n=!1,o=!1){const r=go(e=e.__v_raw),s=go(t);n||(A(t,s)&&$n(r,0,t),$n(r,0,s));const{has:i}=Vn(r),c=o?Mn:n?_o:vo;return i.call(r,t)?c(e.get(t)):i.call(r,s)?c(e.get(s)):void(e!==r&&e.get(t))}function Hn(e,t=!1){const n=this.__v_raw,o=go(n),r=go(e);return t||(A(e,r)&&$n(o,0,e),$n(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function Nn(e,t=!1){return e=e.__v_raw,!t&&$n(go(e),0,bn),Reflect.get(e,"size",e)}function Bn(e){e=go(e);const t=go(this);return Vn(t).has.call(t,e)||(t.add(e),kn(t,"add",e,e)),this}function Un(e,t){t=go(t);const n=go(this),{has:o,get:r}=Vn(n);let s=o.call(n,e);s||(e=go(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?A(t,i)&&kn(n,"set",e,t):kn(n,"add",e,t),this}function Wn(e){const t=go(this),{has:n,get:o}=Vn(t);let r=n.call(t,e);r||(e=go(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&kn(t,"delete",e,void 0),s}function zn(){const e=go(this),t=0!==e.size,n=e.clear();return t&&kn(e,"clear",void 0,void 0),n}function Fn(e,t){return function(n,o){const r=this,s=r.__v_raw,i=go(s),c=t?Mn:e?_o:vo;return!e&&$n(i,0,bn),s.forEach(((e,t)=>n.call(o,c(e),c(t),r)))}}function Kn(e,t,n){return function(...o){const r=this.__v_raw,s=go(r),i=p(s),c="entries"===e||e===Symbol.iterator&&i,a="keys"===e&&i,l=r[e](...o),u=n?Mn:t?_o:vo;return!t&&$n(s,0,a?wn:bn),{next(){const{value:e,done:t}=l.next();return t?{value:e,done:t}:{value:c?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function qn(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function Gn(){const e={get(e){return Dn(this,e)},get size(){return Nn(this)},has:Hn,add:Bn,set:Un,delete:Wn,clear:zn,forEach:Fn(!1,!1)},t={get(e){return Dn(this,e,!1,!0)},get size(){return Nn(this)},has:Hn,add:Bn,set:Un,delete:Wn,clear:zn,forEach:Fn(!1,!0)},n={get(e){return Dn(this,e,!0)},get size(){return Nn(this,!0)},has(e){return Hn.call(this,e,!0)},add:qn("add"),set:qn("set"),delete:qn("delete"),clear:qn("clear"),forEach:Fn(!0,!1)},o={get(e){return Dn(this,e,!0,!0)},get size(){return Nn(this,!0)},has(e){return Hn.call(this,e,!0)},add:qn("add"),set:qn("set"),delete:qn("delete"),clear:qn("clear"),forEach:Fn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((r=>{e[r]=Kn(r,!1,!1),n[r]=Kn(r,!0,!1),t[r]=Kn(r,!1,!0),o[r]=Kn(r,!0,!0)})),[e,n,t,o]}const[Jn,Zn,Qn,Xn]=Gn();function Yn(e,t){const n=t?e?Xn:Qn:e?Zn:Jn;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(u(n,o)&&o in t?n:t,o,r)}const eo={get:Yn(!1,!1)},to={get:Yn(!1,!0)},no={get:Yn(!0,!1)},oo=new WeakMap,ro=new WeakMap,so=new WeakMap,io=new WeakMap;function co(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>x(e).slice(8,-1))(e))}function ao(e){return po(e)?e:uo(e,!1,Ln,eo,oo)}function lo(e){return uo(e,!0,Rn,no,so)}function uo(e,t,n,o,r){if(!v(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=co(e);if(0===i)return e;const c=new Proxy(e,2===i?o:n);return r.set(e,c),c}function fo(e){return po(e)?fo(e.__v_raw):!(!e||!e.__v_isReactive)}function po(e){return!(!e||!e.__v_isReadonly)}function ho(e){return!(!e||!e.__v_isShallow)}function go(e){const t=e&&e.__v_raw;return t?go(t):e}function mo(e){return Object.isExtensible(e)&&((e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})})(e,"__v_skip",!0),e}const vo=e=>v(e)?ao(e):e,_o=e=>v(e)?lo(e):e;class yo{constructor(e,t,n,o){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new rn((()=>e(this._value)),(()=>bo(this,2===this.effect._dirtyLevel?2:3))),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=go(this);return e._cacheable&&!e.effect.dirty||!A(e._value,e._value=e.effect.run())||bo(e,4),xo(e),e.effect._dirtyLevel>=2&&bo(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function xo(e){var t;ln&&nn&&(e=go(e),mn(nn,null!=(t=e.dep)?t:e.dep=yn((()=>e.dep=void 0),e instanceof yo?e:void 0)))}function bo(e,t=4,n){const o=(e=go(e)).dep;o&&_n(o,t)}function wo(e){return!(!e||!0!==e.__v_isRef)}function $o(e){return function(e,t){if(wo(e))return e;return new ko(e,t)}(e,!1)}class ko{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:go(e),this._value=t?e:vo(e)}get value(){return xo(this),this._value}set value(e){const t=this.__v_isShallow||ho(e)||po(e);e=t?e:go(e),A(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:vo(e),bo(this,4))}}function So(e){return wo(e)?e.value:e}const Oo={get:(e,t,n)=>So(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return wo(r)&&!wo(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Co(e){return fo(e)?e:new Proxy(e,Oo)}function Eo(e,t,n,o){try{return o?e(...o):e()}catch(r){Io(r,t,n)}}function Po(e,t,n,o){if(d(e)){const r=Eo(e,t,n,o);return r&&_(r)&&r.catch((e=>{Io(e,t,n)})),r}const r=[];for(let s=0;s>>1,r=Ro[o],s=Ko(r);snull==e.id?1/0:e.id,qo=(e,t)=>{const n=Ko(e)-Ko(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Go(e){Lo=!1,jo=!0,Ro.sort(qo);try{for(To=0;ToKo(e)-Ko(t)));if(Mo.length=0,Vo)return void Vo.push(...e);for(Vo=e,Do=0;Dog(e)?e.trim():e))),n&&(s=o.map(L))}let a,l=r[a=I(n)]||r[a=I(O(n))];!l&&i&&(l=r[a=I(E(n))]),l&&Po(l,e,6,s);const u=r[a+"Once"];if(u){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,Po(u,e,6,s)}}function Zo(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const s=e.emits;let i={},a=!1;if(!d(e)){const o=e=>{const n=Zo(e,t,!0);n&&(a=!0,c(i,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return s||a?(f(s)?s.forEach((e=>i[e]=null)):c(i,s),v(e)&&o.set(e,i),i):(v(e)&&o.set(e,null),null)}function Qo(e,t){return!(!e||!s(t))&&(t=t.slice(2).replace(/Once$/,""),u(e,t[0].toLowerCase()+t.slice(1))||u(e,E(t))||u(e,t))}let Xo=null;function Yo(e){const t=Xo;return Xo=e,e&&e.type.__scopeId,t}function er(e,t){return e&&(e[t]||e[O(t)]||e[P(O(t))])}const tr={};function nr(e,t,n){return or(e,t,n)}function or(e,n,{immediate:r,deep:s,flush:i,once:c,onTrack:l,onTrigger:u}=t){if(n&&c){const e=n;n=(...t)=>{e(...t),S()}}const p=os,h=e=>!0===s?e:ir(e,!1===s?1:void 0);let g,m,v=!1,_=!1;if(wo(e)?(g=()=>e.value,v=ho(e)):fo(e)?(g=()=>h(e),v=!0):f(e)?(_=!0,v=e.some((e=>fo(e)||ho(e))),g=()=>e.map((e=>wo(e)?e.value:fo(e)?h(e):d(e)?Eo(e,p,2):void 0))):g=d(e)?n?()=>Eo(e,p,2):()=>(m&&m(),Po(e,p,3,[y])):o,n&&s){const e=g;g=()=>ir(e())}let y=e=>{m=$.onStop=()=>{Eo(e,p,4),m=$.onStop=void 0}},x=_?new Array(e.length).fill(tr):tr;const b=()=>{if($.active&&$.dirty)if(n){const e=$.run();(s||v||(_?e.some(((e,t)=>A(e,x[t]))):A(e,x)))&&(m&&m(),Po(n,p,3,[e,x===tr?void 0:_&&x[0]===tr?[]:x,y]),x=e)}else $.run()};let w;b.allowRecurse=!!n,"sync"===i?w=b:"post"===i?w=()=>Xr(b,p&&p.suspense):(b.pre=!0,p&&(b.id=p.uid),w=()=>Uo(b));const $=new rn(g,o,w),k=tn,S=()=>{$.stop(),k&&a(k.effects,$)};return n?r?b():x=$.run():"post"===i?Xr($.run.bind($),p&&p.suspense):$.run(),S}function rr(e,t,n){const o=this.proxy,r=g(e)?e.includes(".")?sr(o,e):()=>o[e]:e.bind(o,o);let s;d(t)?s=t:(s=t.handler,n=t);const i=cs(this),c=or(r,s.bind(o),n);return i(),c}function sr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e0){if(n>=t)return e;n++}if((o=o||new Set).has(e))return e;if(o.add(e),wo(e))ir(e.value,t,n,o);else if(f(e))for(let r=0;r{ir(e,t,n,o)}));else if(b(e))for(const r in e)ir(e[r],t,n,o);return e}function cr(){return{app:null,config:{isNativeTag:r,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let ar=0;let lr=null;function ur(e,t,n=!1){const o=os||Xo;if(o||lr){const r=o?null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:lr._context.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&d(t)?t.call(o&&o.proxy):t}}function fr(e,t){hr(e,"a",t)}function pr(e,t){hr(e,"da",t)}function hr(e,t,n=os){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(gr(t,o,n),n){let e=n.parent;for(;e&&e.parent;)e.parent.vnode.type.__isKeepAlive&&dr(o,t,n,e),e=e.parent}}function dr(e,t,n,o){const r=gr(t,e,o,!0);wr((()=>{a(o[t],r)}),n)}function gr(e,t,n=os,o=!1){if(n){(function(e){return G.indexOf(e)>-1})(e)&&(n=n.root);const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;pn();const r=cs(n),s=Po(t,n,e,o);return r(),hn(),s});return o?r.unshift(s):r.push(s),s}}const mr=e=>(t,n=os)=>(!us||"sp"===e)&&gr(e,((...e)=>t(...e)),n),vr=mr("bm"),_r=mr("m"),yr=mr("bu"),xr=mr("u"),br=mr("bum"),wr=mr("um"),$r=mr("sp"),kr=mr("rtg"),Sr=mr("rtc");function Or(e,t=os){gr("ec",e,t)}const Cr=e=>e?ls(e)?hs(e)||e.proxy:Cr(e.parent):null;const Er=c(Object.create(null),{$:function(e){return e},$el:e=>e.__$el||(e.__$el={}),$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Cr(e.parent),$root:e=>Cr(e.root),$emit:e=>e.emit,$options:e=>Mr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Uo(e.update)}),$watch:e=>rr.bind(e)}),Pr=(e,n)=>e!==t&&!e.__isScriptSetup&&u(e,n),Ir={get({_:e},n){const{ctx:o,setupState:r,data:s,props:i,accessCache:c,type:a,appContext:l}=e;let f;if("$"!==n[0]){const a=c[n];if(void 0!==a)switch(a){case 1:return r[n];case 2:return s[n];case 4:return o[n];case 3:return i[n]}else{if(Pr(r,n))return c[n]=1,r[n];if(s!==t&&u(s,n))return c[n]=2,s[n];if((f=e.propsOptions[0])&&u(f,n))return c[n]=3,i[n];if(o!==t&&u(o,n))return c[n]=4,o[n];jr&&(c[n]=0)}}const p=Er[n];let h,d;return p?("$attrs"===n&&$n(e,0,n),p(e)):(h=a.__cssModules)&&(h=h[n])?h:o!==t&&u(o,n)?(c[n]=4,o[n]):(d=l.config.globalProperties,u(d,n)?d[n]:void 0)},set({_:e},n,o){const{data:r,setupState:s,ctx:i}=e;return Pr(s,n)?(s[n]=o,!0):r!==t&&u(r,n)?(r[n]=o,!0):!u(e.props,n)&&(("$"!==n[0]||!(n.slice(1)in e))&&(i[n]=o,!0))},has({_:{data:e,setupState:n,accessCache:o,ctx:r,appContext:s,propsOptions:i}},c){let a;return!!o[c]||e!==t&&u(e,c)||Pr(n,c)||(a=i[0])&&u(a,c)||u(r,c)||u(Er,c)||u(s.config.globalProperties,c)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:u(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ar(e){return f(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}let jr=!0;function Lr(e){const t=Mr(e),n=e.proxy,r=e.ctx;jr=!1,t.beforeCreate&&Rr(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:c,watch:a,provide:l,inject:u,created:p,beforeMount:h,mounted:g,beforeUpdate:m,updated:_,activated:y,deactivated:x,beforeDestroy:b,beforeUnmount:w,destroyed:$,unmounted:k,render:S,renderTracked:O,renderTriggered:C,errorCaptured:E,serverPrefetch:P,expose:I,inheritAttrs:A,components:j,directives:L,filters:R}=t;if(u&&function(e,t,n=o){f(e)&&(e=Nr(e));for(const o in e){const n=e[o];let r;r=v(n)?"default"in n?ur(n.from||o,n.default,!0):ur(n.from||o):ur(n),wo(r)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[o]=r}}(u,r,null),c)for(const o in c){const e=c[o];d(e)&&(r[o]=e.bind(n))}if(s){const t=s.call(n,n);v(t)&&(e.data=ao(t))}if(jr=!0,i)for(const f in i){const e=i[f],t=d(e)?e.bind(n,n):d(e.get)?e.get.bind(n,n):o,s=!d(e)&&d(e.set)?e.set.bind(n):o,c=ds({get:t,set:s});Object.defineProperty(r,f,{enumerable:!0,configurable:!0,get:()=>c.value,set:e=>c.value=e})}if(a)for(const o in a)Tr(a[o],r,n,o);function T(e,t){f(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(function(){if(l){const e=d(l)?l.call(n):l;Reflect.ownKeys(e).forEach((t=>{!function(e,t){if(os){let n=os.provides;const o=os.parent&&os.parent.provides;o===n&&(n=os.provides=Object.create(o)),n[e]=t,"app"===os.type.mpType&&os.appContext.app.provide(e,t)}}(t,e[t])}))}}(),p&&Rr(p,e,"c"),T(vr,h),T(_r,g),T(yr,m),T(xr,_),T(fr,y),T(pr,x),T(Or,E),T(Sr,O),T(kr,C),T(br,w),T(wr,k),T($r,P),f(I))if(I.length){const t=e.exposed||(e.exposed={});I.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});S&&e.render===o&&(e.render=S),null!=A&&(e.inheritAttrs=A),j&&(e.components=j),L&&(e.directives=L),e.ctx.$onApplyOptions&&e.ctx.$onApplyOptions(t,e,n)}function Rr(e,t,n){Po(f(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Tr(e,t,n,o){const r=o.includes(".")?sr(n,o):()=>n[o];if(g(e)){const n=t[e];d(n)&&nr(r,n)}else if(d(e))nr(r,e.bind(n));else if(v(e))if(f(e))e.forEach((e=>Tr(e,t,n,o)));else{const o=d(e.handler)?e.handler.bind(n):t[e.handler];d(o)&&nr(r,o,e)}}function Mr(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,c=s.get(t);let a;return c?a=c:r.length||n||o?(a={},r.length&&r.forEach((e=>Vr(a,e,i,!0))),Vr(a,t,i)):a=t,v(t)&&s.set(t,a),a}function Vr(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&Vr(e,s,n,!0),r&&r.forEach((t=>Vr(e,t,n,!0)));for(const i in t)if(o&&"expose"===i);else{const o=Dr[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const Dr={data:Hr,props:Wr,emits:Wr,methods:Ur,computed:Ur,beforeCreate:Br,created:Br,beforeMount:Br,mounted:Br,beforeUpdate:Br,updated:Br,beforeDestroy:Br,beforeUnmount:Br,destroyed:Br,unmounted:Br,activated:Br,deactivated:Br,errorCaptured:Br,serverPrefetch:Br,components:Ur,directives:Ur,watch:function(e,t){if(!e)return t;if(!t)return e;const n=c(Object.create(null),e);for(const o in t)n[o]=Br(e[o],t[o]);return n},provide:Hr,inject:function(e,t){return Ur(Nr(e),Nr(t))}};function Hr(e,t){return t?e?function(){return c(d(e)?e.call(this,this):e,d(t)?t.call(this,this):t)}:t:e}function Nr(e){if(f(e)){const t={};for(let n=0;n{h=!0;const[t,n]=qr(e,o,!0);c(l,t),n&&p.push(...n)};!r&&o.mixins.length&&o.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!a&&!h)return v(e)&&s.set(e,n),n;if(f(a))for(let n=0;n-1,o[1]=n<0||t-1||u(o,"default"))&&p.push(e)}}}const g=[l,p];return v(e)&&s.set(e,g),g}function Gr(e){return"$"!==e[0]&&!$(e)}function Jr(e){if(null===e)return"null";if("function"==typeof e)return e.name||"";if("object"==typeof e){return e.constructor&&e.constructor.name||""}return""}function Zr(e,t){return Jr(e)===Jr(t)}function Qr(e,t){return f(t)?t.findIndex((t=>Zr(t,e))):d(t)&&Zr(t,e)?0:-1}const Xr=zo;function Yr(e){return e?fo(t=e)||po(t)||"__vInternal"in e?c({},e):e:null;var t}const es=cr();let ts=0;function ns(e,n,o){const r=e.type,s=(n?n.appContext:e.appContext)||es,i={uid:ts++,vnode:e,type:r,parent:n,appContext:s,root:null,next:null,subTree:null,effect:null,update:null,scope:new on(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(s.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:qr(r,s),emitsOptions:Zo(r,s),emit:null,emitted:null,propsDefaults:t,inheritAttrs:r.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:o,suspenseId:o?o.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null,$uniElements:new Map,$templateUniElementRefs:[],$templateUniElementStyles:{},$eS:{},$eA:{}};return i.ctx={_:i},i.root=n?n.root:i,i.emit=Jo.bind(null,i),e.ce&&e.ce(i),i}let os=null;const rs=()=>os||Xo;let ss,is;ss=e=>{os=e},is=e=>{us=e};const cs=e=>{const t=os;return ss(e),e.scope.on(),()=>{e.scope.off(),ss(t)}},as=()=>{os&&os.scope.off(),ss(null)};function ls(e){return 4&e.vnode.shapeFlag}let us=!1;function fs(e,t=!1){t&&is(t);const{props:n}=e.vnode,o=ls(e);zr(e,n,o,t);const r=o?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=mo(new Proxy(e.ctx,Ir));const{setup:o}=n;if(o){const t=e.setupContext=o.length>1?function(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>($n(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}(e):null,n=cs(e);pn();const r=Eo(o,e,0,[e.props,t]);hn(),n(),_(r)?r.then(as,as):function(e,t,n){d(t)?e.render=t:v(t)&&(e.setupState=Co(t));ps(e)}(e,r)}else ps(e)}(e):void 0;return t&&is(!1),r}function ps(e,t,n){const r=e.type;e.render||(e.render=r.render||o);{const t=cs(e);pn();try{Lr(e)}finally{hn(),t()}}}function hs(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Co(mo(e.exposed)),{get:(t,n)=>n in t?t[n]:e.proxy[n],has:(e,t)=>t in e||t in Er}))}const ds=(e,t)=>{const n=function(e,t,n=!1){let r,s;const i=d(e);return i?(r=e,s=o):(r=e.get,s=e.set),new yo(r,s,i||!s,n)}(e,0,us);return n},gs="3.4.21";function ms(e){return So(e)}const vs="[object Array]",_s="[object Object]";function ys(e,t){const n={};return xs(e,t),bs(e,t,"",n),n}function xs(e,t){if((e=ms(e))===t)return;const n=x(e),o=x(t);if(n==_s&&o==_s)for(let r in t){const n=e[r];void 0===n?e[r]=null:xs(n,t[r])}else n==vs&&o==vs&&e.length>=t.length&&t.forEach(((t,n)=>{xs(e[n],t)}))}function bs(e,t,n,o){if((e=ms(e))===t)return;const r=x(e),s=x(t);if(r==_s)if(s!=_s||Object.keys(e).length{bs(e,s[t],(""==n?"":n+".")+i+"["+t+"]",o)}));else if(c==_s)if(a!=_s||Object.keys(r).length{bs(e,t[r],n+"["+r+"]",o)})):ws(o,n,e)}function ws(e,t,n){e[t]=n}function $s(e){const t=e.ctx.__next_tick_callbacks;if(t&&t.length){const e=t.slice(0);t.length=0;for(let t=0;t{t?Eo(t.bind(e.proxy),e,14):o&&o(e.proxy)})),new Promise((e=>{o=e}))}function Ss(e,t){const n=typeof(e=ms(e));if("object"===n&&null!==e){let n=t.get(e);if(void 0!==n)return n;if(f(e)){const o=e.length;n=new Array(o),t.set(e,n);for(let r=0;r{o[e]=n[e]})),o}(r,s));Object.keys(i).length?(o.__next_tick_pending=!0,r.setData(i,(()=>{o.__next_tick_pending=!1,$s(e)})),Fo()):$s(e)}}function Es(e,t,n){t.appContext.config.globalProperties.$applyOptions(e,t,n);const o=e.computed;if(o){const e=Object.keys(o);if(e.length){const n=t.ctx;n.$computedKeys||(n.$computedKeys=[]),n.$computedKeys.push(...e)}}delete t.ctx.$onApplyOptions}function Ps(e,t=!1){const{setupState:n,$templateRefs:o,$templateUniElementRefs:r,ctx:{$scope:s,$mpPlatform:i}}=e;if("mp-alipay"===i)return;if(!s||!o&&!r)return;if(t)return o&&o.forEach((e=>Is(e,null,n))),void(r&&r.forEach((e=>Is(e,null,n))));const c="mp-baidu"===i||"mp-toutiao"===i,a=e=>{if(0===e.length)return[];const t=(s.selectAllComponents(".r")||[]).concat(s.selectAllComponents(".r-i-f")||[]);return e.filter((e=>{const o=function(e,t){const n=e.find((e=>e&&(e.properties||e.props).uI===t));if(n){const e=n.$vm;return e?hs(e.$)||e:function(e){v(e)&&mo(e);return e}(n)}return null}(t,e.i);return!(!c||null!==o)||(Is(e,o,n),!1)}))},l=()=>{if(o){const t=a(o);t.length&&e.proxy&&e.proxy.$scope&&e.proxy.$scope.setData({r1:1},(()=>{a(t)}))}};r&&r.length&&ks(e,(()=>{r.forEach((e=>{f(e.v)?e.v.forEach((t=>{Is(e,t,n)})):Is(e,e.v,n)}))})),s._$setRef?s._$setRef(l):ks(e,l)}function Is({r:e,f:t},n,o){if(d(e))e(n,{});else{const r=g(e),s=wo(e);if(r||s)if(t){if(!s)return;f(e.value)||(e.value=[]);const t=e.value;if(-1===t.indexOf(n)){if(t.push(n),!n)return;n.$&&br((()=>a(t,n)),n.$)}}else r?u(o,e)&&(o[e]=n):wo(e)&&(e.value=n)}}const As=zo;function js(e,t){const n=e.component=ns(e,t.parentComponent,null);return n.renderer=t.mpType?t.mpType:"component",n.ctx.$onApplyOptions=Es,n.ctx.$children=[],"app"===t.mpType&&(n.render=o),t.onBeforeSetup&&t.onBeforeSetup(n,t),fs(n),t.parentComponent&&n.proxy&&t.parentComponent.ctx.$children.push(hs(n)||n.proxy),function(e){const t=Ts.bind(e);e.$updateScopedSlots=()=>Bo((()=>Uo(t)));const n=()=>{if(e.isMounted){const{next:t,bu:n,u:o}=e;Ms(e,!1),pn(),Fo(),hn(),n&&j(n),Ms(e,!0),Cs(e,Ls(e)),o&&As(o)}else br((()=>{Ps(e,!0)}),e),Cs(e,Ls(e))},r=e.effect=new rn(n,o,(()=>Uo(s)),e.scope),s=e.update=()=>{r.dirty&&r.run()};s.id=e.uid,Ms(e,!0),s()}(n),n.proxy}function Ls(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:i,propsOptions:[c],slots:a,attrs:l,emit:u,render:f,renderCache:p,data:h,setupState:d,ctx:g,uid:m,appContext:{app:{config:{globalProperties:{pruneComponentPropsCache:v}}}},inheritAttrs:_}=e;let y;e.$uniElementIds=new Map,e.$templateRefs=[],e.$templateUniElementRefs=[],e.$templateUniElementStyles={},e.$ei=0,v(m),e.__counter=0===e.__counter?1:0;const x=Yo(e);try{if(4&n.shapeFlag){Rs(_,i,c,l);const e=r||o;y=f.call(e,e,p,i,d,h,g)}else{Rs(_,i,c,t.props?l:(e=>{let t;for(const n in e)("class"===n||"style"===n||s(n))&&((t||(t={}))[n]=e[n]);return t})(l));const e=t;y=e.length>1?e(i,{attrs:l,slots:a,emit:u}):e(i,null)}}catch(b){Io(b,e,1),y=!1}return Ps(e),Yo(x),y}function Rs(e,t,n,o){if(t&&o&&!1!==e){const e=Object.keys(o).filter((e=>"class"!==e&&"style"!==e));if(!e.length)return;n&&e.some(i)?e.forEach((e=>{i(e)&&e.slice(9)in n||(t[e]=o[e])})):e.forEach((e=>t[e]=o[e]))}}function Ts(){const e=this.$scopedSlotsData;if(!e||0===e.length)return;const t=this.ctx.$scope,n=t.data,o=Object.create(null);e.forEach((({path:e,index:t,data:r})=>{const s=W(n,e),i=g(t)?`${e}.${t}`:`${e}[${t}]`;if(void 0===s||void 0===s[t])o[i]=r;else{const e=ys(r,s[t]);Object.keys(e).forEach((t=>{o[i+"."+t]=e[t]}))}})),e.length=0,Object.keys(o).length&&t.setData(o)}function Ms({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}const Vs=function(e,t=null){d(e)||(e=c({},e)),null==t||v(t)||(t=null);const n=cr(),o=new WeakSet,r=n.app={_uid:ar++,_component:e,_props:t,_container:null,_context:n,_instance:null,version:gs,get config(){return n.config},set config(e){},use:(e,...t)=>(o.has(e)||(e&&d(e.install)?(o.add(e),e.install(r,...t)):d(e)&&(o.add(e),e(r,...t))),r),mixin:e=>(n.mixins.includes(e)||n.mixins.push(e),r),component:(e,t)=>t?(n.components[e]=t,r):n.components[e],directive:(e,t)=>t?(n.directives[e]=t,r):n.directives[e],mount(){},unmount(){},provide:(e,t)=>(n.provides[e]=t,r),runWithContext(e){const t=lr;lr=r;try{return e()}finally{lr=t}}};return r};function Ds(e,t=null){("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof my?my:void 0).__VUE__=!0;const n=Vs(e,t),r=n._context;r.config.globalProperties.$nextTick=function(e){return ks(this.$,e)};const s=e=>(e.appContext=r,e.shapeFlag=6,e),i=function(e,t){return js(s(e),t)},c=function(e){return e&&function(e){const{bum:t,scope:n,update:o,um:r}=e;t&&j(t);{const t=e.parent;if(t){const n=t.ctx.$children,o=hs(e)||e.proxy,r=n.indexOf(o);r>-1&&n.splice(r,1)}}n.stop(),o&&(o.active=!1),r&&As(r),As((()=>{e.isUnmounted=!0}))}(e.$)};return n.mount=function(){e.render=o;const t=js(s({type:e}),{mpType:"app",mpInstance:null,parentComponent:null,slots:[],props:null});return n._instance=t.$,t.$app=n,t.$createComponent=i,t.$destroyComponent=c,r.$appInstance=t,t},n.unmount=function(){},n}function Hs(e,t,n,o){d(t)&&gr(e,t.bind(n),o)}function Ns(e,t,n){!function(e,t,n){const o=e.mpType||n.$mpType;!o||"component"===o||"page"===o&&"component"===t.renderer||Object.keys(e).forEach((o=>{if(Q(o,e[o],!1)){const r=e[o];f(r)?r.forEach((e=>Hs(o,e,n,t))):Hs(o,r,n,t)}}))}(e,t,n)}function Bs(e,t,n){return e[t]=n}function Us(e,...t){const n=this[e];return n?n(...t):(console.error(`method ${e} not found`),null)}function Ws(e){const t=e.config.errorHandler;return function(n,o,r){t&&t(n,o,r);const s=e._instance;if(!s||!s.proxy)throw n;s.onError?s.proxy.$callHook("onError",n):Ao(n,0,o&&o.$.vnode,!1)}}function zs(e,t){return e?[...new Set([].concat(e,t))]:t}let Fs;const Ks="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",qs=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;function Gs(){const e=en.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let n;try{n=JSON.parse((o=t[1],decodeURIComponent(Fs(o).split("").map((function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))))}catch(r){throw new Error("获取当前用户信息出错,详细错误信息为:"+r.message)}var o;return n.tokenExpired=1e3*n.exp,delete n.exp,delete n.iat,n}function Js(e){const t=e.config;var n;t.errorHandler=ee(e,Ws),n=t.optionMergeStrategies,J.forEach((e=>{n[e]=zs}));const o=t.globalProperties;!function(e){e.uniIDHasRole=function(e){const{role:t}=Gs();return t.indexOf(e)>-1},e.uniIDHasPermission=function(e){const{permission:t}=Gs();return this.uniIDHasRole("admin")||t.indexOf(e)>-1},e.uniIDTokenValid=function(){const{tokenExpired:e}=Gs();return e>Date.now()}}(o),o.$set=Bs,o.$applyOptions=Ns,o.$callMethod=Us,en.invokeCreateVueAppHook(e)}Fs="function"!=typeof atob?function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!qs.test(e))throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var n,o,r="",s=0;s>16&255):64===o?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return r}:atob;const Zs=Object.create(null);function Qs(e){delete Zs[e]}function Xs(e){if(!e)return;const[t,n]=e.split(",");return Zs[t]?Zs[t][parseInt(n)]:void 0}var Ys={install(e){Js(e),e.config.globalProperties.pruneComponentPropsCache=Qs;const t=e.mount;e.mount=function(n){const o=t.call(e,n),r=function(){const e="createApp";if("undefined"!=typeof global&&void 0!==global[e])return global[e];if("undefined"!=typeof my)return my[e]}();return r?r(o):"undefined"!=typeof createMiniProgramApp&&createMiniProgramApp(o),o}}};function ei(e){return g(e)?e:function(e){let t="";if(!e||g(e))return t;for(const n in e)t+=`${n.startsWith("--")?n:E(n)}:${e[n]};`;return t}(R(e))}function ti(e,t){const n=rs(),r=n.ctx,s=void 0===t||"mp-weixin"!==r.$mpPlatform&&"mp-qq"!==r.$mpPlatform&&"mp-xhs"!==r.$mpPlatform||!g(t)&&"number"!=typeof t?"":"_"+t,i="e"+n.$ei+++s,a=r.$scope;if(!e)return delete a[i],i;const l=a[i];return l?l.value=e:a[i]=function(e,t){const n=e=>{var r;(r=e).type&&r.target&&(r.preventDefault=o,r.stopPropagation=o,r.stopImmediatePropagation=o,u(r,"detail")||(r.detail={}),u(r,"markerId")&&(r.detail="object"==typeof r.detail?r.detail:{},r.detail.markerId=r.markerId),b(r.detail)&&u(r.detail,"checked")&&!u(r.detail,"value")&&(r.detail.value=r.detail.checked),b(r.detail)&&(r.target=c({},r.target,r.detail)));let s=[e];t&&t.ctx.$getTriggerEventDetail&&"number"==typeof e.detail&&(e.detail=t.ctx.$getTriggerEventDetail(e.detail)),e.detail&&e.detail.__args__&&(s=e.detail.__args__);const i=n.value,a=()=>Po(function(e,t){if(f(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n&&n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,i),t,5,s),l=e.target,p=!!l&&(!!l.dataset&&"true"===String(l.dataset.eventsync));if(!ni.includes(e.type)||p){const t=a();if("input"===e.type&&(f(t)||_(t)))return;return t}setTimeout(a)};return n.value=e,n}(e,n),i}const ni=["tap","longpress","longtap","transitionend","animationstart","animationiteration","animationend","touchforcechange"];const oi=function(e,t=null){return e&&(e.mpType="app"),Ds(e,t).use(Ys)};const ri=["externalClasses"];const si=/_(.*)_worklet_factory_/;function ii(e,t){const n=e.$children;for(let r=n.length-1;r>=0;r--){const e=n[r];if(e.$scope._$vueId===t)return e}let o;for(let r=n.length-1;r>=0;r--)if(o=ii(n[r],t),o)return o}const ci=["createSelectorQuery","createIntersectionObserver","selectAllComponents","selectComponent"];function ai(e,t){const n=e.ctx;n.mpType=t.mpType,n.$mpType=t.mpType,n.$mpPlatform="mp-weixin",n.$scope=t.mpInstance,Object.defineProperties(n,{virtualHostId:{get(){const e=this.$scope.data.virtualHostId;return void 0===e?"":e}}}),n.$mp={},n._self={},e.slots={},f(t.slots)&&t.slots.length&&(t.slots.forEach((t=>{e.slots[t]=!0})),e.slots.d&&(e.slots.default=!0)),n.getOpenerEventChannel=function(){return t.mpInstance.getOpenerEventChannel()},n.$hasHook=li,n.$callHook=ui,e.emit=function(e,t){return function(n,...o){const r=t.$scope;if(r&&n){const e={__args__:o};r.triggerEvent(n,e)}return e.apply(this,[n,...o])}}(e.emit,n)}function li(e){const t=this.$[e];return!(!t||!t.length)}function ui(e,t){"mounted"===e&&(ui.call(this,"bm"),this.$.isMounted=!0,e="m");const n=this.$[e];return n&&((e,t)=>{let n;for(let o=0;o{Q(n,e[n])&&t.add(n)}));{const{extends:n,mixins:o}=e;o&&o.forEach((e=>pi(e,t))),n&&pi(n,t)}}return t}function hi(e,t,n){-1!==n.indexOf(t)||u(e,t)||(e[t]=function(e){return this.$vm&&this.$vm.$callHook(t,e)})}const di=["onReady"];function gi(e,t,n=di){t.forEach((t=>hi(e,t,n)))}function mi(e,t,n=di){pi(t).forEach((t=>hi(e,t,n)))}const vi=U((()=>{const e=[],t=d(getApp)&&getApp({allowDefault:!0});if(t&&t.$vm&&t.$vm.$){const n=t.$vm.$.appContext.mixins;if(f(n)){const t=Object.keys(Z);n.forEach((n=>{t.forEach((t=>{u(n,t)&&!e.includes(t)&&e.push(t)}))}))}}return e}));const _i=["onShow","onHide","onError","onThemeChange","onPageNotFound","onUnhandledRejection"];function yi(e,t){const n=e.$,o={globalData:e.$options&&e.$options.globalData||{},$vm:e,onLaunch(t){this.$vm=e;const o=n.ctx;this.$vm&&o.$scope&&o.$callHook||(ai(n,{mpType:"app",mpInstance:this,slots:[]}),o.globalData=this.globalData,e.$callHook("onLaunch",t))}},r=wx.$onErrorHandlers;r&&(r.forEach((e=>{gr("onError",e,n)})),r.length=0),function(e){const t=$o(function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=le(n&&n.language?n.language:"en")||"en"}return t}());Object.defineProperty(e,"$locale",{get:()=>t.value,set(e){t.value=e}})}(e);const s=e.$.type;gi(o,_i),mi(o,s);{const e=s.methods;e&&c(o,e)}return o}function xi(e,t){if(d(e.onLaunch)){const t=wx.getLaunchOptionsSync&&wx.getLaunchOptionsSync();e.onLaunch(t)}d(e.onShow)&&wx.onAppShow&&wx.onAppShow((e=>{t.$callHook("onShow",e)})),d(e.onHide)&&wx.onAppHide&&wx.onAppHide((e=>{t.$callHook("onHide",e)}))}const bi=["eO","uR","uRIF","uI","uT","uP","uS"];function wi(e){e.properties||(e.properties={}),c(e.properties,function(e,t=!1){const n={};if(!t){let e=function(e){const t=Object.create(null);e&&e.forEach((e=>{t[e]=!0})),this.setData({$slots:t})};bi.forEach((e=>{n[e]={type:null,value:""}})),n.uS={type:null,value:[]},n.uS.observer=e}return e.behaviors&&e.behaviors.includes("wx://form-field")&&(e.properties&&e.properties.name||(n.name={type:null,value:""}),e.properties&&e.properties.value||(n.value={type:null,value:""})),n}(e),function(e){const t={};return e&&e.virtualHost&&(t.virtualHostStyle={type:null,value:""},t.virtualHostClass={type:null,value:""},t.virtualHostHidden={type:null,value:""},t.virtualHostId={type:null,value:""}),t}(e.options))}const $i=[String,Number,Boolean,Object,Array,null];function ki(e,t){const n=function(e,t){return f(e)&&1===e.length?e[0]:e}(e);return-1!==$i.indexOf(n)?n:null}function Si(e,t){return(t?function(e){const t={};b(e)&&Object.keys(e).forEach((n=>{-1===bi.indexOf(n)&&(t[n]=e[n])}));return t}(e):Xs(e.uP))||{}}function Oi(e){const t=function(){const e=this.properties.uP;e&&(this.$vm?function(e,t){const n=go(t.props),o=Xs(e)||{};Ci(n,o)&&(!function(e,t,n,o){const{props:r,attrs:s,vnode:{patchFlag:i}}=e,c=go(r),[a]=e.propsOptions;let l=!1;if(!(o||i>0)||16&i){let o;Fr(e,t,r,s)&&(l=!0);for(const s in c)t&&(u(t,s)||(o=E(s))!==s&&u(t,o))||(a?!n||void 0===n[s]&&void 0===n[o]||(r[s]=Kr(a,c,s,void 0,e,!0)):delete r[s]);if(s!==c)for(const e in s)t&&u(t,e)||(delete s[e],l=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let o=0;o-1&&function(e){const t=Ro.indexOf(e);t>To&&Ro.splice(t,1)}(t.update),t.update());var r}(e,this.$vm.$):"m"===this.properties.uT&&function(e,t){const n=t.properties,o=Xs(e)||{};Ci(n,o,!1)&&t.setData(o)}(e,this))};e.observers||(e.observers={}),e.observers.uP=t}function Ci(e,t,n=!0){const o=Object.keys(t);if(n&&o.length!==Object.keys(e).length)return!0;for(let r=0;r{o.push(e.replace("uni://","wx://")),"uni://form-field"===e&&(f(n)?(n.push("name"),n.push("modelValue")):(n.name={type:String,default:""},n.modelValue={type:[String,Number,Boolean,Array,Object,Date],default:""}))})),o}(t)}function Pi(e,{parse:t,mocks:n,isPage:o,isPageInProject:r,initRelation:s,handleLink:i,initLifetimes:a}){e=e.default||e;const l={multipleSlots:!0,addGlobalClass:!0,pureDataPattern:/^uP$/};f(e.mixins)&&e.mixins.forEach((e=>{v(e.options)&&c(l,e.options)})),e.options&&c(l,e.options);const p={options:l,lifetimes:a({mocks:n,isPage:o,initRelation:s,vueOptions:e}),pageLifetimes:{show(){this.$vm&&this.$vm.$callHook("onPageShow")},hide(){this.$vm&&this.$vm.$callHook("onPageHide")},resize(e){this.$vm&&this.$vm.$callHook("onPageResize",e)}},methods:{__l:i}};var h,d,g,m;return Ei(p,e),wi(p),Oi(p),function(e,t){ri.forEach((n=>{u(t,n)&&(e[n]=t[n])}))}(p,e),h=p.methods,d=e.wxsCallMethods,f(d)&&d.forEach((e=>{h[e]=function(t){return this.$vm[e](t)}})),g=p.methods,(m=e.methods)&&Object.keys(m).forEach((e=>{const t=e.match(si);if(t){const n=t[1];g[e]=m[e],g[n]=m[n]}})),t&&t(p,{handleLink:i}),p}let Ii,Ai;function ji(){return getApp().$vm}function Li(e,t){const{parse:n,mocks:o,isPage:r,initRelation:s,handleLink:i,initLifetimes:c}=t,a=Pi(e,{mocks:o,isPage:r,isPageInProject:!0,initRelation:s,handleLink:i,initLifetimes:c});!function({properties:e},t){f(t)?t.forEach((t=>{e[t]={type:String,value:""}})):b(t)&&Object.keys(t).forEach((n=>{const o=t[n];if(b(o)){let t=o.default;d(t)&&(t=t());const r=o.type;o.type=ki(r),e[n]={type:o.type,value:t}}else e[n]={type:ki(o)}}))}(a,(e.default||e).props);const l=a.methods;return l.onLoad=function(e){var t;return this.options=e,this.$page={fullPath:(t=this.route+q(e),function(e){return 0===e.indexOf("/")}(t)?t:"/"+t)},this.$vm&&this.$vm.$callHook("onLoad",e)},gi(l,fi),mi(l,e),function(e,t){if(!t)return;Object.keys(Z).forEach((n=>{t&Z[n]&&hi(e,n,[])}))}(l,e.__runtimeHooks),gi(l,vi()),n&&n(a,{handleLink:i}),a}const Ri=Page,Ti=Component;function Mi(e){const t=e.triggerEvent,n=function(n,...o){return t.apply(e,[(r=n,O(r.replace(F,"-"))),...o]);var r};try{e.triggerEvent=n}catch(o){e._triggerEvent=n}}function Vi(e,t,n){const o=t[e];t[e]=o?function(...e){return Mi(this),o.apply(this,e)}:function(){Mi(this)}}Page=function(e){return Vi("onLoad",e),Ri(e)},Component=function(e){Vi("created",e);return e.properties&&e.properties.uP||(wi(e),Oi(e)),Ti(e)};var Di=Object.freeze({__proto__:null,handleLink:function(e){const t=e.detail||e.value,n=t.vuePid;let o;n&&(o=ii(this.$vm,n)),o||(o=this.$vm),t.parent=o},initLifetimes:function({mocks:e,isPage:t,initRelation:n,vueOptions:o}){return{attached(){let r=this.properties;!function(e,t){if(!e)return;const n=e.split(","),o=n.length;1===o?t._$vueId=n[0]:2===o&&(t._$vueId=n[0],t._$vuePid=n[1])}(r.uI,this);const s={vuePid:this._$vuePid};n(this,s);const i=this,c=t(i);let a=r;this.$vm=function(e,t){Ii||(Ii=ji().$createComponent);const n=Ii(e,t);return hs(n.$)||n}({type:o,props:Si(a,c)},{mpType:c?"page":"component",mpInstance:i,slots:r.uS||{},parentComponent:s.parent&&s.parent.$,onBeforeSetup(t,n){!function(e,t){Object.defineProperty(e,"refs",{get(){const e={};return function(e,t,n){e.selectAllComponents(t).forEach((e=>{const t=e.properties.uR;n[t]=e.$vm||e}))}(t,".r",e),t.selectAllComponents(".r-i-f").forEach((t=>{const n=t.properties.uR;n&&(e[n]||(e[n]=[]),e[n].push(t.$vm||t))})),e}})}(t,i),function(e,t,n){const o=e.ctx;n.forEach((n=>{u(t,n)&&(e[n]=o[n]=t[n])}))}(t,i,e),function(e,t){ai(e,t);const n=e.ctx;ci.forEach((e=>{n[e]=function(...t){const o=n.$scope;if(o&&o[e])return o[e].apply(o,t)}}))}(t,n)}}),c||function(e){const t=e.$options;f(t.behaviors)&&t.behaviors.includes("uni://form-field")&&e.$watch("modelValue",(()=>{e.$scope&&e.$scope.setData({name:e.name,value:e.modelValue})}),{immediate:!0})}(this.$vm)},ready(){this.$vm&&(this.$vm.$callHook("mounted"),this.$vm.$callHook("onReady"))},detached(){var e;this.$vm&&(Qs(this.$vm.$.uid),e=this.$vm,Ai||(Ai=ji().$destroyComponent),Ai(e))}}},initRelation:function(e,t){e.triggerEvent("__l",t)},isPage:function(e){return!!e.route},mocks:["__route__","__wxExparserNodeId__","__wxWebviewId__"]});const Hi=function(e){return App(yi(e))},Ni=(Bi=Di,function(e){return Component(Li(e,Bi))});var Bi;const Ui=function(e){return function(t){return Component(Pi(t,e))}}(Di),Wi=function(e){xi(yi(e),e)},zi=function(e){const t=yi(e),n=d(getApp)&&getApp({allowDefault:!0});if(!n)return;e.$.ctx.$scope=n;const o=n.globalData;o&&Object.keys(t.globalData).forEach((e=>{u(o,e)||(o[e]=t.globalData[e])})),Object.keys(t).forEach((e=>{u(n,e)||(n[e]=t[e])})),xi(t,e)};wx.createApp=global.createApp=Hi,wx.createPage=Ni,wx.createComponent=Ui,wx.createPluginApp=global.createPluginApp=Wi,wx.createSubpackageApp=global.createSubpackageApp=zi;const Fi=(e,t=0)=>(t,n=rs())=>{!us&&gr(e,t,n)},Ki=Fi("onLoad",2),qi=Fi("onUnload",2),Gi=Fi("onReachBottom",2),Ji=Fi("onShareTimeline",2),Zi=Fi("onShareAppMessage",2);exports._export_sfc=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},exports.createSSRApp=oi,exports.e=(e,...t)=>c(e,...t),exports.f=(e,t)=>function(e,t){let n;if(f(e)||g(e)){n=new Array(e.length);for(let o=0,r=e.length;ot(e,n,n)));else{const o=Object.keys(e);n=new Array(o.length);for(let r=0,s=o.length;r{if("function"!=typeof getApp)s=function(e,t){return r.t(e,t)};else{let e=!1;s=function(t,n){const o=getApp().$vm;return o&&(o.$locale,e||(e=!0,function(e,t){e.$watchLocale?e.$watchLocale((e=>{t.setLocale(e)})):e.$watch((()=>e.$locale),(e=>{t.setLocale(e)}))}(o,r))),r.t(t,n)}}return s(e,t)};return{i18n:r,f:(e,t,n)=>r.f(e,t,n),t:(e,t)=>s(e,t),add:(e,t,n=!0)=>r.add(e,t,n),watch:e=>r.watchLocale(e),getLocale:()=>r.getLocale(),setLocale:e=>r.setLocale(e)}},exports.n=e=>H(e),exports.o=(e,t)=>ti(e,t),exports.onLoad=Ki,exports.onReachBottom=Gi,exports.onShareAppMessage=Zi,exports.onShareTimeline=Ji,exports.onUnload=qi,exports.p=e=>function(e){const{uid:t,__counter:n}=rs();return t+","+((Zs[t]||(Zs[t]=[])).push(Yr(e))-1)+","+n}(e),exports.ref=$o,exports.resolveComponent=function(e,t){return function(e,t,n=!0,o=!1){const r=Xo||os;if(r){const n=r.type;if("components"===e){const e=function(e,t=!0){return d(e)?e.displayName||e.name:e.name||t&&e.__name}(n,!1);if(e&&(e===t||e===O(t)||e===P(O(t))))return n}const s=er(r[e]||n[e],t)||er(r.appContext[e],t);return!s&&o?n:s}}("components",e,!0,t)||e},exports.s=e=>ei(e),exports.sr=(e,t,n)=>function(e,t,n={}){const{$templateRefs:o}=rs();o.push({i:t,r:e,k:n.k,f:n.f})}(e,t,n),exports.t=e=>(e=>g(e)?e:null==e?"":f(e)||v(e)&&(e.toString===y||!d(e.toString))?JSON.stringify(e,N,2):String(e))(e),exports.unref=So,exports.wx$1=Yt;
diff --git a/unpackage/dist/build/mp-weixin/components/common-title/common-title.js b/unpackage/dist/build/mp-weixin/components/common-title/common-title.js
new file mode 100644
index 0000000..633b58b
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/common-title/common-title.js
@@ -0,0 +1 @@
+"use strict";const e={};const n=require("../../common/vendor.js")._export_sfc(e,[["render",function(e,n){return{}}],["__scopeId","data-v-26691667"]]);wx.createComponent(n);
diff --git a/unpackage/dist/build/mp-weixin/components/common-title/common-title.json b/unpackage/dist/build/mp-weixin/components/common-title/common-title.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/common-title/common-title.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/common-title/common-title.wxml b/unpackage/dist/build/mp-weixin/components/common-title/common-title.wxml
new file mode 100644
index 0000000..786fc89
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/common-title/common-title.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/common-title/common-title.wxss b/unpackage/dist/build/mp-weixin/components/common-title/common-title.wxss
new file mode 100644
index 0000000..c6037db
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/common-title/common-title.wxss
@@ -0,0 +1 @@
+.content-title.data-v-26691667{display:flex;justify-content:space-between;align-items:center;padding:0 30rpx}.content-title .name.data-v-26691667{font-size:40rpx}
diff --git a/unpackage/dist/build/mp-weixin/components/components.js b/unpackage/dist/build/mp-weixin/components/components.js
new file mode 100644
index 0000000..b12c35b
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/components.js
@@ -0,0 +1 @@
+"use strict";const e={};const r=require("../common/vendor.js")._export_sfc(e,[["render",function(e,r){return{}}]]);wx.createPage(r);
diff --git a/unpackage/dist/build/mp-weixin/components/components.json b/unpackage/dist/build/mp-weixin/components/components.json
new file mode 100644
index 0000000..a0812ee
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/components.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/components.wxml b/unpackage/dist/build/mp-weixin/components/components.wxml
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/build/mp-weixin/components/components.wxss b/unpackage/dist/build/mp-weixin/components/components.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.js b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.js
new file mode 100644
index 0000000..daa4ad4
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/system.js");if(!Array){e.resolveComponent("uni-icons")()}Math;const r={__name:"custom-nav-bar",props:{title:{type:String,default:"壁纸"}},setup:r=>(s,o)=>({a:e.unref(t.getStatusBarHeight)()+"px",b:e.t(r.title),c:e.p({type:"search",size:"18",color:"#888"}),d:e.unref(t.getTitleBarHeight)()+"px",e:e.unref(t.getNavBarHeight)()+"px"})},s=e._export_sfc(r,[["__scopeId","data-v-d803e843"]]);wx.createComponent(s);
diff --git a/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.json b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.json
new file mode 100644
index 0000000..2caa312
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.wxml b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.wxml
new file mode 100644
index 0000000..b199148
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.wxml
@@ -0,0 +1 @@
+{{b}}搜索
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.wxss b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.wxss
new file mode 100644
index 0000000..9037ad5
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/custom-nav-bar/custom-nav-bar.wxss
@@ -0,0 +1 @@
+.layout .navbar.data-v-d803e843{position:fixed;left:0;top:0;width:100%;z-index:10;background:linear-gradient(to bottom,transparent 0%,#fff 400rpx),linear-gradient(to right,#beecd8 20%,#f4e2d8)}.layout .navbar .titleBar.data-v-d803e843{display:flex;padding:0 30rpx;align-items:center}.layout .navbar .titleBar .title.data-v-d803e843{font-size:22px;font-weight:700;color:#000}.layout .navbar .titleBar .search.data-v-d803e843{width:200rpx;height:50rpx;border-radius:60rpx;background:rgba(255,255,255,.4);margin-left:30rpx;color:#999;font-size:28rpx;display:flex;align-items:center}.layout .navbar .titleBar .search .icon.data-v-d803e843{margin-left:5rpx}.layout .navbar .titleBar .search .text.data-v-d803e843{padding-left:10rpx}
diff --git a/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.js b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.js
new file mode 100644
index 0000000..ce159f8
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../common/assets.js"),m=require("../../utils/common.js");if(!Array){e.resolveComponent("uni-icons")()}Math;const i={__name:"theme-item",props:{isMore:{type:Boolean,default:!1},item:{type:Object,default:()=>({name:"默认名称",picurl:"/common/images/classify1.jpg",updateTime:Date.now()})}},setup:i=>(s,o)=>e.e({a:!i.isMore},i.isMore?{g:t._imports_0$1,h:e.p({type:"more-filled",size:"34",color:"#fff"})}:e.e({b:i.item.picurl,c:e.t(i.item.name),d:e.unref(m.compareTimestamp)(i.item.updateTime)},e.unref(m.compareTimestamp)(i.item.updateTime)?{e:e.t(e.unref(m.compareTimestamp)(i.item.updateTime))}:{},{f:"/pages/classlist/classlist?id="+i.item._id+"&name="+i.item.name}))},s=e._export_sfc(i,[["__scopeId","data-v-8bd5680a"]]);wx.createComponent(s);
diff --git a/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.json b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.json
new file mode 100644
index 0000000..2caa312
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.wxml b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.wxml
new file mode 100644
index 0000000..3054b39
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.wxml
@@ -0,0 +1 @@
+{{c}}{{e}}前更新更多
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.wxss b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.wxss
new file mode 100644
index 0000000..aa35cea
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/components/theme-item/theme-item.wxss
@@ -0,0 +1 @@
+.themeItem .box.data-v-8bd5680a{height:340rpx;border-radius:10rpx;overflow:hidden;position:relative}.themeItem .box .pic.data-v-8bd5680a{width:100%;height:100%}.themeItem .box .mask.data-v-8bd5680a{width:100%;height:70rpx;position:absolute;font-size:40rpx;font-weight:600;bottom:0;left:0;background:rgba(0,0,0,.2);color:#fff;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(20rpx);backdrop-filter:blur(20rpx)}.themeItem .box .tab.data-v-8bd5680a{position:absolute;left:0;top:0;background:rgba(250,129,90,.7);-webkit-backdrop-filter:blur(20rpx);backdrop-filter:blur(20rpx);color:#fff;font-size:22rpx;border-radius:0 0 20rpx;padding:6rpx 12rpx;transform:scale(.8);transform-origin:left top}.themeItem .box.more .mask.data-v-8bd5680a{width:100%;height:100%;flex-direction:column}.themeItem .box.more .text.data-v-8bd5680a{font-size:28rpx}
diff --git a/unpackage/dist/build/mp-weixin/pages/classify/classify.js b/unpackage/dist/build/mp-weixin/pages/classify/classify.js
new file mode 100644
index 0000000..1a18324
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classify/classify.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../api/apis.js");if(!Array){(e.resolveComponent("custom-nav-bar")+e.resolveComponent("theme-item"))()}Math||((()=>"../../components/custom-nav-bar/custom-nav-bar.js")+(()=>"../../components/theme-item/theme-item.js"))();const t={__name:"classify",setup(t){const s=e.ref([]);return(async()=>{let e=await a.apiGetClassify({pageSize:15});s.value=e.data})(),e.onShareAppMessage((e=>({title:"hzb壁纸,精选分类",path:"/pages/classfy/classfy"}))),e.onShareTimeline((()=>({title:"hzb壁纸,精选分类",imageUrl:"/static/images/logo2.jpg"}))),(a,t)=>({a:e.p({title:"分类"}),b:e.f(s.value,((a,t,s)=>({a:a._id,b:"05ae22c8-1-"+s,c:e.p({item:a})})))})}},s=e._export_sfc(t,[["__scopeId","data-v-05ae22c8"]]);t.__runtimeHooks=6,wx.createPage(s);
diff --git a/unpackage/dist/build/mp-weixin/pages/classify/classify.json b/unpackage/dist/build/mp-weixin/pages/classify/classify.json
new file mode 100644
index 0000000..90832d5
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classify/classify.json
@@ -0,0 +1,9 @@
+{
+ "navigationBarTitleText": "分类",
+ "enablePullDownRefresh": true,
+ "navigationStyle": "custom",
+ "usingComponents": {
+ "custom-nav-bar": "../../components/custom-nav-bar/custom-nav-bar",
+ "theme-item": "../../components/theme-item/theme-item"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/classify/classify.wxml b/unpackage/dist/build/mp-weixin/pages/classify/classify.wxml
new file mode 100644
index 0000000..e5e9c45
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classify/classify.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/classify/classify.wxss b/unpackage/dist/build/mp-weixin/pages/classify/classify.wxss
new file mode 100644
index 0000000..bb01fbf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classify/classify.wxss
@@ -0,0 +1 @@
+.classLayout .classify.data-v-05ae22c8{padding:30rpx;display:grid;grid-template-columns:repeat(3,1fr);gap:15rpx}
diff --git a/unpackage/dist/build/mp-weixin/pages/classlist/classlist.js b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.js
new file mode 100644
index 0000000..6ff2d4d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../api/apis.js");if(!Array){e.resolveComponent("uni-load-more")()}Math;const t={__name:"classlist",setup(t){const i=e.ref([]),l=e.ref(!1),s={pageNum:1,pageSize:12};let n;e.onLoad((a=>{let{id:t=null,name:i=null,type:l=null}=a;t&&(s.id=t),l&&(s.type=l),n=i,e.index.setNavigationBarTitle({title:i}),o()})),e.onUnload((()=>{e.index.removeStorageSync("storgClassList")})),e.onReachBottom((()=>{l.value||(s.pageNum++,o())}));const o=async()=>{let t;s.id&&(t=await a.apiGetClassList({classid:s.id,pageNum:s.pageNum,pageSize:s.pageSize})),s.type&&(t=await a.apiGetHistoryList({type:s.type,pageNum:s.pageNum,pageSize:s.pageSize})),i.value=[...i.value,...t.data],s.pageSize>t.data.length&&(l.value=!0),e.index.setStorageSync("storgClassList",i.value)};return e.onShareAppMessage((e=>({title:"hzb壁纸-"+n,path:"/pages/classlist/classlist?id="+s.id+"&name="+n}))),e.onShareTimeline((()=>({title:"hzb壁纸~~~",query:"id="+s.id+"&name="+n}))),(a,t)=>e.e({a:!i.value.length&&!l.value},i.value.length||l.value?{}:{b:e.p({status:"loading"})},{c:e.f(i.value,((e,a,t)=>({a:e.smallPicurl,b:"/pages/preview/preview?id="+e._id,c:e._id}))),d:i.value.length||l.value},i.value.length||l.value?{e:e.p({status:l.value?"noMore":"loading"})}:{})}},i=e._export_sfc(t,[["__scopeId","data-v-7266cc03"]]);t.__runtimeHooks=6,wx.createPage(i);
diff --git a/unpackage/dist/build/mp-weixin/pages/classlist/classlist.json b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.json
new file mode 100644
index 0000000..3f0216a
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.json
@@ -0,0 +1,6 @@
+{
+ "navigationBarTitleText": "分类列表",
+ "usingComponents": {
+ "uni-load-more": "../../uni_modules/uni-load-more/components/uni-load-more/uni-load-more"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/classlist/classlist.wxml b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.wxml
new file mode 100644
index 0000000..2f5091e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/classlist/classlist.wxss b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.wxss
new file mode 100644
index 0000000..5d7f99c
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/classlist/classlist.wxss
@@ -0,0 +1 @@
+.classlist .content.data-v-7266cc03{display:grid;grid-template-columns:repeat(3,1fr);gap:5rpx;padding:5rpx}.classlist .content .item.data-v-7266cc03{height:440rpx}.classlist .content .item image.data-v-7266cc03{width:100%;height:100%;display:block}
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.js b/unpackage/dist/build/mp-weixin/pages/index/index.js
new file mode 100644
index 0000000..fe56d7c
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../api/apis.js");if(!Array){(e.resolveComponent("custom-nav-bar")+e.resolveComponent("uni-icons")+e.resolveComponent("uni-dateformat")+e.resolveComponent("common-title")+e.resolveComponent("theme-item"))()}Math||((()=>"../../components/custom-nav-bar/custom-nav-bar.js")+(()=>"../../uni_modules/uni-icons/components/uni-icons/uni-icons.js")+(()=>"../../uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js")+(()=>"../../components/common-title/common-title.js")+(()=>"../../components/theme-item/theme-item.js"))();const a={__name:"index",setup(a){const i=e.ref([]),o=e.ref([]),n=e.ref([]),s=e.ref([]);return e.onShareAppMessage((e=>({title:"hzb壁纸",path:"/pages/index/index"}))),e.onShareTimeline((()=>({title:"hzb壁纸~~~",imageUrl:"/static/images/logo2.jpg"}))),(async()=>{let e=await t.apiGetBanner();i.value=e.data})(),(async()=>{let e=await t.apiGetDayRandom();o.value=e.data})(),(async()=>{let e=await t.apiGetNotice({select:!0});n.value=e.data})(),(async()=>{let e=await t.apiGetClassify({select:!0});s.value=e.data})(),(t,a)=>({a:e.p({title:"推荐"}),b:e.f(i.value,((t,a,i)=>e.e({a:"miniProgram"==t.target},"miniProgram"==t.target?{b:t.picurl,c:t.url,d:t.appid}:{e:t.picurl,f:`/pages/classlist/classlist?${t.url}`},{g:t._id}))),c:e.p({type:"sound-filled",size:"20",color:"#28b389"}),d:e.f(n.value,((t,a,i)=>({a:e.t(t.title),b:"/pages/notice/detail?id="+t._id,c:t._id}))),e:e.p({type:"forward",size:"20",color:"#28b389"}),f:e.p({type:"calendar",size:"20",color:"#28b389"}),g:e.p({date:Date.now(),format:"dd日"}),h:e.f(o.value,((t,a,i)=>({a:t.smallPicurl,b:t._id,c:e.o((a=>{return i=t._id,e.index.setStorageSync("storgClassList",o.value),void e.index.navigateTo({url:"/pages/preview/preview?id="+i});var i}),t._id)}))),i:e.f(s.value,((t,a,i)=>({a:t._id,b:"4d5c657e-7-"+i,c:e.p({isMore:!1,item:t})}))),j:e.p({isMore:!0})})}},i=e._export_sfc(a,[["__scopeId","data-v-4d5c657e"]]);a.__runtimeHooks=6,wx.createPage(i);
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.json b/unpackage/dist/build/mp-weixin/pages/index/index.json
new file mode 100644
index 0000000..8d0a04e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.json
@@ -0,0 +1,11 @@
+{
+ "navigationBarTitleText": "uni-app",
+ "navigationStyle": "custom",
+ "usingComponents": {
+ "custom-nav-bar": "../../components/custom-nav-bar/custom-nav-bar",
+ "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons",
+ "uni-dateformat": "../../uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat",
+ "common-title": "../../components/common-title/common-title",
+ "theme-item": "../../components/theme-item/theme-item"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.wxml b/unpackage/dist/build/mp-weixin/pages/index/index.wxml
new file mode 100644
index 0000000..5a027c6
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.wxml
@@ -0,0 +1 @@
+公告{{item.a}}每日推荐专题精选More+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/index/index.wxss b/unpackage/dist/build/mp-weixin/pages/index/index.wxss
new file mode 100644
index 0000000..ec12f39
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/index/index.wxss
@@ -0,0 +1 @@
+.homeLayout .banner.data-v-4d5c657e{width:750rpx;padding:30rpx 0}.homeLayout .banner swiper.data-v-4d5c657e{width:750rpx;height:340rpx}.homeLayout .banner swiper swiper-item.data-v-4d5c657e{width:100%;height:100%;padding:0 30rpx}.homeLayout .banner swiper swiper-item .like.data-v-4d5c657e{width:100%;height:100%}.homeLayout .banner swiper swiper-item .like image.data-v-4d5c657e{width:100%;height:100%;border-radius:10rpx}.homeLayout .notice.data-v-4d5c657e{width:690rpx;margin:0 auto;height:80rpx;background:#f9f9f9;line-height:80rpx;border-radius:80rpx;display:flex}.homeLayout .notice .left.data-v-4d5c657e{width:140rpx;display:flex;align-items:center;justify-content:center}.homeLayout .notice .left .text.data-v-4d5c657e{color:#000;font-size:28rpx;font-weight:600}.homeLayout .notice .center.data-v-4d5c657e{flex:1}.homeLayout .notice .center swiper.data-v-4d5c657e{height:100%}.homeLayout .notice .center swiper swiper-item.data-v-4d5c657e{height:100%;font-size:30rpx;color:#666;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.homeLayout .notice .right.data-v-4d5c657e{width:70rpx;display:flex;align-items:center;justify-content:center}.homeLayout .select.data-v-4d5c657e{padding-top:50rpx}.homeLayout .select .date.data-v-4d5c657e{color:#28b389;display:flex;align-items:center}.homeLayout .select .content.data-v-4d5c657e{width:720rpx;margin-left:30rpx;margin-top:30rpx}.homeLayout .select .content scroll-view.data-v-4d5c657e{white-space:nowrap}.homeLayout .select .content scroll-view .box.data-v-4d5c657e{display:inline-block;width:200rpx;height:430rpx;margin-right:15rpx}.homeLayout .select .content scroll-view .box image.data-v-4d5c657e{width:100%;height:100%}.homeLayout .select .content scroll-view .box.data-v-4d5c657e:last-child{margin-right:30rpx}.homeLayout .theme.data-v-4d5c657e{padding:50rpx 0}.homeLayout .theme .more.data-v-4d5c657e{font-size:32rpx;color:#888}.homeLayout .theme .content.data-v-4d5c657e{margin-top:30rpx;padding:0 30rpx;display:grid;grid-template-columns:repeat(3,1fr);gap:15rpx}
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/detail.js b/unpackage/dist/build/mp-weixin/pages/notice/detail.js
new file mode 100644
index 0000000..c8af00e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/detail.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),t=require("../../api/apis.js");if(!Array){(e.resolveComponent("uni-tag")+e.resolveComponent("uni-dateformat")+e.resolveComponent("mp-html"))()}Math||((()=>"../../uni_modules/uni-tag/components/uni-tag/uni-tag.js")+(()=>"../../uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js")+(()=>"../../uni_modules/mp-html/components/mp-html/mp-html.js"))();const a={__name:"detail",setup(a){const o=e.ref({}),n=e.ref(""),l=e.ref("");e.onLoad((t=>{console.log(t),n.value=t.id,l.value=t.name,e.index.setNavigationBarTitle({title:l.value}),u()}));const u=async()=>{let e=await t.apiNoticeDetail({id:n.value});o.value=e.data,console.log(e)};return(t,a)=>e.e({a:o.value.select},o.value.select?{b:e.p({text:"置顶",inverted:!0,type:"error"})}:{},{c:e.t(o.value.title),d:e.t(o.value.author),e:e.p({date:o.value.publish_date,format:"yyyy-MM-dd hh:mm:ss"}),f:e.p({content:o.value.content}),g:e.t(o.value.view_count)})}},o=e._export_sfc(a,[["__scopeId","data-v-cb39523c"]]);wx.createPage(o);
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/detail.json b/unpackage/dist/build/mp-weixin/pages/notice/detail.json
new file mode 100644
index 0000000..6470819
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/detail.json
@@ -0,0 +1,8 @@
+{
+ "navigationBarTitleText": "公告详情",
+ "usingComponents": {
+ "uni-tag": "../../uni_modules/uni-tag/components/uni-tag/uni-tag",
+ "uni-dateformat": "../../uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat",
+ "mp-html": "../../uni_modules/mp-html/components/mp-html/mp-html"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/detail.wxml b/unpackage/dist/build/mp-weixin/pages/notice/detail.wxml
new file mode 100644
index 0000000..5730f17
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/detail.wxml
@@ -0,0 +1 @@
+{{c}}{{d}} 阅读数量:{{g}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/detail.wxss b/unpackage/dist/build/mp-weixin/pages/notice/detail.wxss
new file mode 100644
index 0000000..14586e1
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/detail.wxss
@@ -0,0 +1 @@
+.noticeLayout.data-v-cb39523c{padding:30rpx}.noticeLayout .title.data-v-cb39523c{display:flex;align-items:center;font-size:40rpx;color:#111;line-height:1.6em;padding-bottom:30rpx}.noticeLayout .title .tag.data-v-cb39523c{transform:scale(.8);transform-origin:left center;flex-shrink:0}.noticeLayout .title .font.data-v-cb39523c{padding-left:4rpx}.noticeLayout .info.data-v-cb39523c{display:flex;align-items:center;color:#999;font-size:28rpx}.noticeLayout .info .item.data-v-cb39523c{padding-left:20rpx}.noticeLayout .content.data-v-cb39523c{padding:50rpx 0}.noticeLayout .count.data-v-cb39523c{color:#999;font-size:28rpx}
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/notice.js b/unpackage/dist/build/mp-weixin/pages/notice/notice.js
new file mode 100644
index 0000000..fb1723a
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/notice.js
@@ -0,0 +1 @@
+"use strict";const e={};const r=require("../../common/vendor.js")._export_sfc(e,[["render",function(e,r){return{}}]]);wx.createPage(r);
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/notice.json b/unpackage/dist/build/mp-weixin/pages/notice/notice.json
new file mode 100644
index 0000000..4743fab
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/notice.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "公告",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/notice.wxml b/unpackage/dist/build/mp-weixin/pages/notice/notice.wxml
new file mode 100644
index 0000000..c2bf272
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/notice/notice.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/notice/notice.wxss b/unpackage/dist/build/mp-weixin/pages/notice/notice.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/build/mp-weixin/pages/preview/preview.js b/unpackage/dist/build/mp-weixin/pages/preview/preview.js
new file mode 100644
index 0000000..a97f9e3
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/preview/preview.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../utils/system.js"),l=require("../../api/apis.js");if(!Array){(e.resolveComponent("uni-icons")+e.resolveComponent("uni-dateformat")+e.resolveComponent("uni-rate")+e.resolveComponent("uni-popup"))()}Math||((()=>"../../uni_modules/uni-icons/components/uni-icons/uni-icons.js")+(()=>"../../uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js")+(()=>"../../uni_modules/uni-rate/components/uni-rate/uni-rate.js")+(()=>"../../uni_modules/uni-popup/components/uni-popup/uni-popup.js"))();const o={__name:"preview",setup(o){const i=e.ref(!0),t=e.ref(null),u=e.ref({}),n=e.ref(null),s=e.ref(0),r=e.ref(!1),c=e.ref([]),p=e.ref(null),d=e.ref(0),v=e.ref([]),m=e.index.getStorageSync("storgClassList")||[];c.value=m.map((e=>({...e,picurl:e.smallPicurl.replace("_small.webp",".jpg")}))),e.onLoad((async e=>{if(p.value=e.id,"share"==e.type){let e=await l.apiDetailWall({id:p.value});c.value=e.data.map((e=>({...e,picurl:e.smallPicurl.replace("_small.webp",".jpg")})))}d.value=c.value.findIndex((e=>e._id==p.value)),h(),u.value=c.value[d.value]}));const f=e=>{d.value=e.detail.current,h(),u.value=c.value[d.value]},h=()=>{v.value.push(d.value<=0?c.value.length-1:d.value-1,d.value,d.value>=c.value.length-1?0:d.value+1),v.value=[...new Set(v.value)]},g=()=>{t.value.open()},w=()=>{t.value.close()},x=()=>{u.value.userScore&&(r.value=!0,s.value=u.value.userScore),n.value.open()},y=()=>{n.value.close(),s.value=0,r.value=!1},b=async()=>{e.index.showLoading({title:"加载中..."});let{classid:a,_id:o}=u.value,i=await l.apiGetSetScore({classid:a,wallId:o,userScore:s.value});e.index.hideLoading(),0===i.errCode&&e.index.showToast({title:"评分成功",icon:"none"}),c.value[d.value].userScore=s.value,e.index.setStorageSync("storgClassList",c.value),y()},_=()=>{i.value=!i.value},S=()=>{e.index.navigateBack({success:()=>{},fail:a=>{e.index.reLaunch({url:"/pages/index/index"})}})},C=async()=>{try{e.index.showLoading({title:"下载中...",mask:!0});let{classid:a,_id:o}=u.value,i=await l.apiWriteDownload({classid:a,wallId:o});if(0!=i.errCode)throw i;e.index.getImageInfo({src:u.value.picurl,success:a=>{e.index.saveImageToPhotosAlbum({filePath:a.path,success:a=>{e.index.showToast({title:"保存成功,请到相册查看",icon:"none"})},fail:a=>{"saveImagePhotoAlbum:fail cancel"!=a.errMsg?e.index.showModal({title:"授权提示",content:"需要授权保存相册",success:a=>{a.confirm&&e.index.openSetting({success:a=>{console.log(a),a.authSetting["scope.writePhotosAlbum"]?e.index.showToast({title:"获取授权成功",icon:"none"}):e.index.showToast({title:"获取权限失败",icon:"none"})}})}}):e.index.showToast({title:"保存失败,请重新点击下载",icon:"none"})},complete:()=>{e.index.hideLoading()}})}})}catch(a){e.index.hideLoading()}};return e.onShareAppMessage((e=>({title:"hzb壁纸-",path:"/pages/preview/preview?id="+p.value+"&type=share"}))),e.onShareTimeline((()=>({title:"hzb壁纸~~~",query:"id="+p.value+"&type=share"}))),(l,o)=>({a:e.f(c.value,((a,l,o)=>e.e({a:v.value.includes(l)},v.value.includes(l)?{b:e.o(_,a._id),c:a.picurl}:{},{d:a._id}))),b:d.value,c:e.o(f),d:e.p({type:"back",color:"#fff",size:"20"}),e:e.o(S),f:e.unref(a.getPreviewBarHeight)()+"px",g:e.t(d.value+1),h:e.t(c.value.length),i:e.p({date:Date.now(),format:"hh:mm"}),j:e.p({date:Date.now(),format:"MM月dd日"}),k:e.p({type:"info",size:"23"}),l:e.o(g),m:e.p({type:"star",size:"23"}),n:e.t(u.value.score),o:e.o(x),p:e.p({type:"download",size:"23"}),q:e.o(C),r:i.value,s:e.p({type:"closeempty",size:"18",color:"#999"}),t:e.o(w),v:e.t(u.value._id),w:e.t(u.value.nickname),x:e.p({readonly:!0,touchable:!1,value:u.value.score,size:"16"}),y:e.t(u.value.score),z:e.t(u.value.description),A:e.f(u.value.tabs,((a,l,o)=>({a:e.t(a),b:a}))),B:e.sr(t,"d9b78fb0-6",{k:"infoPopup"}),C:e.p({type:"bottom"}),D:e.t(r.value?"已经评分过了~":"壁纸评分"),E:e.p({type:"closeempty",size:"18",color:"#999"}),F:e.o(y),G:e.o(l.onChange),H:e.o((e=>s.value=e)),I:e.p({disabled:r.value,"disabled-color":"#FFCA3E",allowHalf:!0,modelValue:s.value}),J:e.t(s.value),K:e.o(b),L:!s.value||r.value,M:e.sr(n,"d9b78fb0-9",{k:"scorePopup"}),N:e.p({"is-mask-click":!1})})}},i=e._export_sfc(o,[["__scopeId","data-v-d9b78fb0"]]);o.__runtimeHooks=6,wx.createPage(i);
diff --git a/unpackage/dist/build/mp-weixin/pages/preview/preview.json b/unpackage/dist/build/mp-weixin/pages/preview/preview.json
new file mode 100644
index 0000000..cf14ef0
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/preview/preview.json
@@ -0,0 +1,10 @@
+{
+ "navigationBarTitleText": "预览",
+ "navigationStyle": "custom",
+ "usingComponents": {
+ "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons",
+ "uni-dateformat": "../../uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat",
+ "uni-rate": "../../uni_modules/uni-rate/components/uni-rate/uni-rate",
+ "uni-popup": "../../uni_modules/uni-popup/components/uni-popup/uni-popup"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/preview/preview.wxml b/unpackage/dist/build/mp-weixin/pages/preview/preview.wxml
new file mode 100644
index 0000000..d5f21bd
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/preview/preview.wxml
@@ -0,0 +1 @@
+{{g}} / {{h}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/preview/preview.wxss b/unpackage/dist/build/mp-weixin/pages/preview/preview.wxss
new file mode 100644
index 0000000..2871635
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/preview/preview.wxss
@@ -0,0 +1 @@
+.preview.data-v-d9b78fb0{width:100%;height:100vh;position:relative}.preview swiper.data-v-d9b78fb0{width:100%;height:100%}.preview swiper image.data-v-d9b78fb0{width:100%;height:100%}.preview .mask .goBack.data-v-d9b78fb0{position:absolute;left:0;right:0;width:-webkit-fit-content;width:fit-content;color:#fff;width:38px;height:38px;background:rgba(0,0,0,.5);left:30rpx;top:0;margin:auto auto auto 0;border-radius:100px;-webkit-backdrop-filter:blur(10rpx);backdrop-filter:blur(10rpx);border:1px solid rbga(255,255,255,.3);display:flex;justify-content:center;align-items:center}.preview .mask .count.data-v-d9b78fb0{position:absolute;top:10vh;left:0;right:0;margin:auto;width:-webkit-fit-content;width:fit-content;background:rgba(0,0,0,.3);font-size:28rpx;color:#fff;border-radius:40rpx;padding:8rpx 28rpx;-webkit-backdrop-filter:blur(20rpx);backdrop-filter:blur(20rpx)}.preview .mask .time.data-v-d9b78fb0{position:absolute;left:0;right:0;margin:auto;width:-webkit-fit-content;width:fit-content;color:#fff;top:calc(10vh + 80rpx);font-size:140rpx;font-weight:100rpx;line-height:1em;text-shadow:0 4rpx rgba(0,0,0,.3)}.preview .mask .date.data-v-d9b78fb0{position:absolute;left:0;right:0;margin:auto;width:-webkit-fit-content;width:fit-content;color:#fff;top:calc(10vh + 230rpx);font-size:34rpx;text-shadow:0 2rpx rgba(0,0,0,.3)}.preview .mask .footer.data-v-d9b78fb0{position:absolute;left:0;right:0;margin:auto;width:-webkit-fit-content;width:fit-content;color:#fff;background:rgba(255,255,255,.8);bottom:10vh;width:65vw;height:120rpx;border-radius:120rpx;color:#000;display:flex;justify-content:space-around;align-items:center;box-shadow:0 2rpx rgba(0,0,0,.1);-webkit-backdrop-filter:blur(20rpx);backdrop-filter:blur(20rpx)}.preview .mask .footer .box.data-v-d9b78fb0{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rpx 12rpx}.preview .mask .footer .box .text.data-v-d9b78fb0{font-size:26rpx;color:#676767}.preview .popHeader.data-v-d9b78fb0{display:flex;justify-content:space-between;align-items:center}.preview .popHeader .title.data-v-d9b78fb0{color:#676767;font-size:26rpx}.preview .popHeader .close.data-v-d9b78fb0{padding:6rpx}.preview .infoPopup.data-v-d9b78fb0{background:#fff;padding:30rpx;border-radius:30rpx 30rpx 0 0;overflow:hidden}.preview .infoPopup scroll-view.data-v-d9b78fb0{max-height:60vh}.preview .infoPopup scroll-view .content .row.data-v-d9b78fb0{display:flex;padding:16rpx 0;font-size:32rpx;line-height:1.7em}.preview .infoPopup scroll-view .content .row .label.data-v-d9b78fb0{color:#a7a7a7;width:140rpx;text-align:right;font-size:30rpx}.preview .infoPopup scroll-view .content .row .value.data-v-d9b78fb0{flex:1;width:0;font-size:30rpx}.preview .infoPopup scroll-view .content .row .roteBox.data-v-d9b78fb0{display:flex;align-items:center}.preview .infoPopup scroll-view .content .row .roteBox .score.data-v-d9b78fb0{font-size:26rpx;color:#676767;padding-left:10rpx}.preview .infoPopup scroll-view .content .row .tabs.data-v-d9b78fb0{display:flex;white-space:wrap}.preview .infoPopup scroll-view .content .row .tabs .tab.data-v-d9b78fb0{border:1px solid #28B389;color:#28b389;font-size:22rpx;padding:10rpx 30rpx;border-radius:40rpx;line-height:1em;margin:0 10rpx 10rpx 0}.preview .infoPopup scroll-view .content .row .class.data-v-d9b78fb0{color:#28b389}.preview .infoPopup scroll-view .content .copyright.data-v-d9b78fb0{font-size:28rpx;padding:20rpx;background:#f6f6f6;color:#666;border-radius:10rpx;margin:20rpx 0;line-height:1.5em}.preview .scorePopup.data-v-d9b78fb0{background:#fff;padding:30rpx;width:70vw;border-radius:30rpx;overflow:hidden}.preview .scorePopup .content.data-v-d9b78fb0{padding:30rpx 0;display:flex;justify-content:center;align-items:center}.preview .scorePopup .content .text.data-v-d9b78fb0{color:#ffca3e;padding-left:10rpx;width:80rpx;line-height:1em;text-align:right}.preview .scorePopup .footer.data-v-d9b78fb0{display:flex;justify-content:center;align-items:center}
diff --git a/unpackage/dist/build/mp-weixin/pages/search/search.js b/unpackage/dist/build/mp-weixin/pages/search/search.js
new file mode 100644
index 0000000..b6c102b
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/search/search.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),a=require("../../api/apis.js");if(!Array){(e.resolveComponent("uni-search-bar")+e.resolveComponent("uni-icons")+e.resolveComponent("uv-empty")+e.resolveComponent("uni-load-more"))()}Math||((()=>"../../uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js")+(()=>"../../uni_modules/uni-icons/components/uni-icons/uni-icons.js")+(()=>"../../uni_modules/uv-empty/components/uv-empty/uv-empty.js")+(()=>"../../uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js"))();const o={__name:"search",setup(o){const l=e.ref({pageNum:1,pageSize:12,keyword:""}),n=e.ref(e.index.getStorageSync("historySearch")||[]),u=e.ref(["美女","帅哥","宠物","卡通"]),r=e.ref(!1),t=e.ref(!1),s=e.ref([]),i=()=>{p()},v=e=>{p(e),d()},c=()=>{e.index.showModal({title:"是否清空历史搜索",success:a=>{a.confirm&&(e.index.removeStorageSync("historySearch"),n.value=[])}})},d=()=>{e.index.showLoading(),n.value=[...new Set([l.value.keyword,...n.value])].slice(0,10),e.index.setStorageSync("historySearch",n.value),p(l.value.keyword),m()},m=async()=>{try{let o=await a.apiSearchData(l.value);s.value=[...s.value,...o.data],e.index.setStorageSync("storgClassList",s.value),l.value.pageSize>o.data.length&&(r.value=!0),0==o.data.length&&0==s.value.length&&(t.value=!0)}finally{e.index.hideLoading()}},p=(e="")=>{s.value=[],r.value=!1,t.value=!1,l.value={pageNum:1,pageSize:12,keyword:e||""}};return e.onReachBottom((()=>{r.value||(l.value.pageNum++,m())})),e.onUnload((()=>{e.index.removeStorageSync("storgClassList",s.value)})),(a,o)=>e.e({a:e.o(d),b:e.o(i),c:e.o(i),d:e.o((e=>l.value.keyword=e)),e:e.p({focus:!0,placeholder:"搜索",modelValue:l.value.keyword}),f:!s.value.length||t.value},!s.value.length||t.value?e.e({g:n.value.length},n.value.length?{h:e.p({type:"trash",size:"25"}),i:e.o(c),j:e.f(n.value,((a,o,l)=>({a:e.t(a),b:a,c:e.o((e=>v(a)),a)})))}:{},{k:e.f(u.value,((a,o,l)=>({a:e.t(a),b:a,c:e.o((e=>v(a)),a)})))}):{},{l:t.value},t.value?{m:e.p({mode:"search"})}:e.e({n:e.f(s.value,((e,a,o)=>({a:e.smallPicurl,b:`/pages/preview/preview?id=${e._id}`,c:e._id}))),o:r.value||s.value.length},r.value||s.value.length?{p:e.p({status:r.value?"noMore":"loading"})}:{}))}},l=e._export_sfc(o,[["__scopeId","data-v-90835114"]]);wx.createPage(l);
diff --git a/unpackage/dist/build/mp-weixin/pages/search/search.json b/unpackage/dist/build/mp-weixin/pages/search/search.json
new file mode 100644
index 0000000..d1553af
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/search/search.json
@@ -0,0 +1,9 @@
+{
+ "navigationBarTitleText": "搜索",
+ "usingComponents": {
+ "uni-search-bar": "../../uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar",
+ "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons",
+ "uv-empty": "../../uni_modules/uv-empty/components/uv-empty/uv-empty",
+ "uni-load-more": "../../uni_modules/uni-load-more/components/uni-load-more/uni-load-more"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/search/search.wxml b/unpackage/dist/build/mp-weixin/pages/search/search.wxml
new file mode 100644
index 0000000..0fa62ae
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/search/search.wxml
@@ -0,0 +1 @@
+最近搜索{{tab.a}}热门搜索{{tab.a}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/search/search.wxss b/unpackage/dist/build/mp-weixin/pages/search/search.wxss
new file mode 100644
index 0000000..beab621
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/search/search.wxss
@@ -0,0 +1 @@
+.searchLayout .search.data-v-90835114{padding:0 10rpx}.searchLayout .topTitle.data-v-90835114{display:flex;justify-content:space-between;align-items:center}.searchLayout .history.data-v-90835114,.searchLayout .recommend.data-v-90835114{padding:30rpx}.searchLayout .tabs.data-v-90835114{display:flex;align-items:center;flex-wrap:wrap;padding-top:20rpx}.searchLayout .tabs .tab.data-v-90835114{background:#f4f4f4;font-size:28rpx;color:#333;padding:10rpx 28rpx;border-radius:50rpx;margin-right:20rpx;margin-top:20rpx}.searchLayout .list.data-v-90835114{display:grid;grid-template-columns:repeat(3,1fr);gap:5rpx;padding:20rpx 5rpx}.searchLayout .list .item.data-v-90835114{height:440rpx}.searchLayout .list .item image.data-v-90835114{height:100%;width:100%;display:block}
diff --git a/unpackage/dist/build/mp-weixin/pages/user/user.js b/unpackage/dist/build/mp-weixin/pages/user/user.js
new file mode 100644
index 0000000..9bd7696
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/user/user.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../common/vendor.js"),o=require("../../common/assets.js"),a=require("../../utils/system.js"),r=require("../../api/apis.js");if(!Array){(e.resolveComponent("uni-icons")+e.resolveComponent("uni-load-more"))()}Math||((()=>"../../uni_modules/uni-icons/components/uni-icons/uni-icons.js")+(()=>"../../uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js"))();const i={__name:"user",setup(i){const l=e.ref(null);return(async()=>{let e=await r.apiUserInfo();l.value=e.data})(),(r,i)=>{var s,n,t,u,d,p;return e.e({a:l.value},l.value?{b:e.unref(a.getNavBarHeight)()+"px",c:o._imports_0,d:e.t(l.value.IP),e:e.t((null==(n=null==(s=l.value)?void 0:s.address)?void 0:n.city)||(null==(u=null==(t=l.value)?void 0:t.address)?void 0:u.province)||(null==(p=null==(d=l.value)?void 0:d.address)?void 0:p.country)||"中国"),f:e.p({type:"download-filled",size:"20",color:"#28b389"}),g:e.t(l.value.downloadSize),h:e.p({type:"forward",size:"15",color:"#aaa"}),i:e.p({type:"star-filled",size:"20",color:"#28b389"}),j:e.t(l.value.scoreSize),k:e.p({type:"forward",size:"15",color:"#aaa"}),l:e.p({type:"chatboxes-filled",size:"20",color:"#28b389"}),m:e.p({type:"forward",size:"15",color:"#aaa"}),n:e.p({type:"notification-filled",size:"20",color:"#28b389"}),o:e.p({type:"forward",size:"15",color:"#aaa"}),p:e.p({type:"flag-filled",size:"20",color:"#28b389"}),q:e.p({type:"forward",size:"15",color:"#aaa"})}:{r:e.unref(a.getNavBarHeight)()+"px",s:e.p({status:"loading"})})}}},l=e._export_sfc(i,[["__scopeId","data-v-71eb8033"]]);wx.createPage(l);
diff --git a/unpackage/dist/build/mp-weixin/pages/user/user.json b/unpackage/dist/build/mp-weixin/pages/user/user.json
new file mode 100644
index 0000000..c785cc8
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/user/user.json
@@ -0,0 +1,8 @@
+{
+ "navigationBarTitleText": "我的",
+ "navigationStyle": "custom",
+ "usingComponents": {
+ "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons",
+ "uni-load-more": "../../uni_modules/uni-load-more/components/uni-load-more/uni-load-more"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/user/user.wxml b/unpackage/dist/build/mp-weixin/pages/user/user.wxml
new file mode 100644
index 0000000..3ff3b40
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/user/user.wxml
@@ -0,0 +1 @@
+{{d}}来自于: {{e}}我的下载{{g}}我的评分{{j}}联系客服订阅更新常见问题
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/pages/user/user.wxss b/unpackage/dist/build/mp-weixin/pages/user/user.wxss
new file mode 100644
index 0000000..65241db
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/pages/user/user.wxss
@@ -0,0 +1 @@
+.userLayout .userinfo.data-v-71eb8033{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:50rpx 0}.userLayout .userinfo .avatar.data-v-71eb8033{width:160rpx;height:160rpx;border-radius:50%;overflow:hidden}.userLayout .userinfo .avatar image.data-v-71eb8033{width:100%;height:100%}.userLayout .userinfo .ip.data-v-71eb8033{font-size:44rpx;color:#333;padding:20rpx 0 5rpx}.userLayout .userinfo .address.data-v-71eb8033{font-size:28rpx;color:#aaa}.userLayout .section.data-v-71eb8033{width:690rpx;margin:50rpx auto;border:1px solid #eee;border-radius:10rpx;box-shadow:0 0 30rpx rgba(0,0,0,.05)}.userLayout .section .list .row.data-v-71eb8033{display:flex;justify-content:space-between;align-items:center;padding:0 30rpx;height:100rpx;border-bottom:1px solid #eee;position:relative;background:#fff}.userLayout .section .list .row.data-v-71eb8033:last-child{border-bottom:0}.userLayout .section .list .row .left.data-v-71eb8033{display:flex;justify-content:center;align-items:center}.userLayout .section .list .row .left .text.data-v-71eb8033{padding-left:20rpx;color:#666}.userLayout .section .list .row .right.data-v-71eb8033{display:flex;justify-content:center;align-items:center}.userLayout .section .list .row .right .text.data-v-71eb8033{font-size:28rpx;color:#aaa}.userLayout .section .list .row button.data-v-71eb8033{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0}
diff --git a/unpackage/dist/build/mp-weixin/project.config.json b/unpackage/dist/build/mp-weixin/project.config.json
new file mode 100644
index 0000000..1cea089
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/project.config.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "uglifyFileName": false,
+ "enhance": true,
+ "packNpmRelationList": [],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "useCompilerPlugins": false,
+ "minifyWXML": true
+ },
+ "compileType": "miniprogram",
+ "simulatorPluginLibVersion": {},
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "appid": "wxd0cd1606ac6a1936",
+ "editorSetting": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/project.private.config.json b/unpackage/dist/build/mp-weixin/project.private.config.json
new file mode 100644
index 0000000..46ee174
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/project.private.config.json
@@ -0,0 +1,14 @@
+{
+ "libVersion": "3.9.0",
+ "projectname": "wallpaper-kt",
+ "setting": {
+ "urlCheck": true,
+ "coverView": true,
+ "lazyloadPlaceholderEnable": false,
+ "skylineRenderEnable": false,
+ "preloadBackgroundData": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "compileHotReLoad": true
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/static/images/tabBar/classify-h.png b/unpackage/dist/build/mp-weixin/static/images/tabBar/classify-h.png
new file mode 100644
index 0000000..2858107
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/tabBar/classify-h.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/tabBar/classify.png b/unpackage/dist/build/mp-weixin/static/images/tabBar/classify.png
new file mode 100644
index 0000000..d32bc6c
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/tabBar/classify.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/tabBar/home-h.png b/unpackage/dist/build/mp-weixin/static/images/tabBar/home-h.png
new file mode 100644
index 0000000..e86e1dd
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/tabBar/home-h.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/tabBar/home.png b/unpackage/dist/build/mp-weixin/static/images/tabBar/home.png
new file mode 100644
index 0000000..591aa1a
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/tabBar/home.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/tabBar/user-h.png b/unpackage/dist/build/mp-weixin/static/images/tabBar/user-h.png
new file mode 100644
index 0000000..fa8b717
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/tabBar/user-h.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/tabBar/user.png b/unpackage/dist/build/mp-weixin/static/images/tabBar/user.png
new file mode 100644
index 0000000..6d53fc0
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/tabBar/user.png differ
diff --git a/unpackage/dist/build/mp-weixin/static/images/xxmLogo.png b/unpackage/dist/build/mp-weixin/static/images/xxmLogo.png
new file mode 100644
index 0000000..d822b16
Binary files /dev/null and b/unpackage/dist/build/mp-weixin/static/images/xxmLogo.png differ
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.js b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.js
new file mode 100644
index 0000000..a6cc226
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../../common/vendor.js"),t=require("./parser.js"),n=[],i={name:"mp-html",data:()=>({nodes:[]}),props:{containerStyle:{type:String,default:""},content:{type:String,default:""},copyLink:{type:[Boolean,String],default:!0},domain:String,errorImg:{type:String,default:""},lazyLoad:{type:[Boolean,String],default:!1},loadingImg:{type:String,default:""},pauseVideo:{type:[Boolean,String],default:!0},previewImg:{type:[Boolean,String],default:!0},scrollTable:[Boolean,String],selectable:[Boolean,String],setTitle:{type:[Boolean,String],default:!0},showImgMenu:{type:[Boolean,String],default:!0},tagStyle:Object,useAnchor:[Boolean,Number]},emits:["load","ready","imgtap","linktap","play","error"],components:{node:()=>"./node/node.js"},watch:{content(e){this.setContent(e)}},created(){this.plugins=[];for(let e=n.length;e--;)this.plugins.push(new n[e](this))},mounted(){this.content&&!this.nodes.length&&this.setContent(this.content)},beforeDestroy(){this._hook("onDetached")},methods:{in(e,t,n){e&&t&&n&&(this._in={page:e,selector:t,scrollTop:n})},navigateTo(t,n){return new Promise(((i,o)=>{if(!this.useAnchor)return void o(Error("Anchor is disabled"));n=n||parseInt(this.useAnchor)||0;let s=" ";s=">>>";const r=e.index.createSelectorQuery().in(this._in?this._in.page:this).select((this._in?this._in.selector:"._root")+(t?`>>>#${t}`:"")).boundingClientRect();this._in?r.select(this._in.selector).scrollOffset().select(this._in.selector).boundingClientRect():r.selectViewport().scrollOffset(),r.exec((t=>{if(!t[0])return void o(Error("Label not found"));const s=t[1].scrollTop+t[0].top-(t[2]?t[2].top:0)+n;this._in?this._in.page[this._in.scrollTop]=s:e.index.pageScrollTo({scrollTop:s,duration:300}),i()}))}))},getText(e){let t="";return function e(n){for(let i=0;i"0"&&o.name[1]<"7";n&&t&&"\n"!==t[t.length-1]&&(t+="\n"),o.children&&e(o.children),n&&"\n"!==t[t.length-1]?t+="\n":"td"!==o.name&&"th"!==o.name||(t+="\t")}}}(e||this.nodes),t},getRect(){return new Promise(((t,n)=>{e.index.createSelectorQuery().in(this).select("#_root").boundingClientRect().exec((e=>e[0]?t(e[0]):n(Error("Root label not found"))))}))},pauseMedia(){for(let e=(this._videos||[]).length;e--;)this._videos[e].pause()},setPlaybackRate(e){this.playbackRate=e;for(let t=(this._videos||[]).length;t--;)this._videos[t].playbackRate(e)},setContent(e,n){n&&this.imgList||(this.imgList=[]);const i=new t.Parser(this).parse(e);if(this.$set(this,"nodes",n?(this.nodes||[]).concat(i):i),this._videos=[],this.$nextTick((()=>{this._hook("onLoad"),this.$emit("load")})),this.lazyLoad||this.imgList._unloadimgs{n&&n.height||(n={}),n.height===e?this.$emit("ready",n):(e=n.height,setTimeout((()=>{this.getRect().then(t).catch(t)}),350))};this.getRect().then(t).catch(t)}else this.imgList._unloadimgs||this.getRect().then((e=>{this.$emit("ready",e)})).catch((()=>{this.$emit("ready",{})}))},_hook(e){for(let t=n.length;t--;)this.plugins[t][e]&&this.plugins[t][e]()}}};if(!Array){e.resolveComponent("node")()}const o=e._export_sfc(i,[["render",function(t,n,i,o,s,r){return e.e({a:!s.nodes[0]},s.nodes[0]?{b:e.p({childs:s.nodes,opts:[i.lazyLoad,i.loadingImg,i.errorImg,i.showImgMenu,i.selectable],name:"span"})}:{},{c:e.n((i.selectable?"_select ":"")+"_root"),d:e.s(i.containerStyle)})}]]);wx.createComponent(o);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.json b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.json
new file mode 100644
index 0000000..f55f207
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "node": "./node/node"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.wxml b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.wxml
new file mode 100644
index 0000000..60baa76
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.wxss b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.wxss
new file mode 100644
index 0000000..7556cfe
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.wxss
@@ -0,0 +1 @@
+._root{padding:1px 0;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}._select{-webkit-user-select:text;user-select:text}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.js b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.js
new file mode 100644
index 0000000..9c87426
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../../../../common/vendor.js"),s={},a={name:"node",options:{virtualHost:!0},data:()=>({ctrl:{},isiOS:t.index.getSystemInfoSync().system.includes("iOS")}),props:{name:String,attrs:{type:Object,default:()=>({})},childs:Array,opts:Array},components:{node:()=>Promise.resolve().then((()=>r))},mounted(){this.$nextTick((()=>{for(this.root=this.$parent;"mp-html"!==this.root.$options.name;this.root=this.root.$parent);}))},beforeDestroy(){},methods:{toJSON(){return this},play(s){const a=s.currentTarget.dataset.i,e=this.childs[a];if(this.root.$emit("play",{source:e.name,attrs:{...e.attrs,src:e.src[this.ctrl[a]||0]}}),this.root.pauseVideo){let a=!1;const e=s.target.id;for(let t=this.root._videos.length;t--;)this.root._videos[t].id===e?a=!0:this.root._videos[t].pause();if(!a){const s=t.index.createVideoContext(e,this);s.id=e,this.root.playbackRate&&s.playbackRate(this.root.playbackRate),this.root._videos.push(s)}}},imgTap(s){const a=this.childs[s.currentTarget.dataset.i];a.a?this.linkTap(a.a):a.attrs.ignore||(this.root.$emit("imgtap",a.attrs),this.root.previewImg&&t.index.previewImage({showmenu:this.root.showImgMenu,current:parseInt(a.attrs.i),urls:this.root.imgList}))},imgLongTap(t){},imgLoad(t){const s=t.currentTarget.dataset.i;this.childs[s].w?(this.opts[1]&&!this.ctrl[s]||-1===this.ctrl[s])&&this.$set(this.ctrl,s,1):this.$set(this.ctrl,s,t.detail.width),this.checkReady()},checkReady(){this.root&&!this.root.lazyLoad&&(this.root._unloadimgs-=1,this.root._unloadimgs||setTimeout((()=>{this.root.getRect().then((t=>{this.root.$emit("ready",t)})).catch((()=>{this.root.$emit("ready",{})}))}),350))},linkTap(s){const a=s.currentTarget?this.childs[s.currentTarget.dataset.i]:{},e=a.attrs||s,r=e.href;this.root.$emit("linktap",Object.assign({innerText:this.root.getText(a.children||[])},e)),r&&("#"===r[0]?this.root.navigateTo(r.substring(1)).catch((()=>{})):r.split("?")[0].includes("://")?this.root.copyLink&&t.index.setClipboardData({data:r,success:()=>t.index.showToast({title:"链接已复制"})}):t.index.navigateTo({url:r,fail(){t.index.switchTab({url:r,fail(){}})}}))},mediaError(t){const s=t.currentTarget.dataset.i,a=this.childs[s];if("video"===a.name||"audio"===a.name){let t=(this.ctrl[s]||0)+1;if(t>a.src.length&&(t=0),tt.e({a:"img"===s.name&&!s.t&&(e.opts[1]&&!i.ctrl[a]||i.ctrl[a]<0)},"img"===s.name&&!s.t&&(e.opts[1]&&!i.ctrl[a]||i.ctrl[a]<0)?{b:t.s(s.attrs.style),c:i.ctrl[a]<0?e.opts[2]:e.opts[1]}:{},{d:"img"===s.name&&s.t},"img"===s.name&&s.t?{e:t.s("display:"+s.t),f:[{attrs:{style:s.attrs.style||"",src:s.attrs.src},name:"img"}],g:a,h:t.o(((...t)=>o.imgTap&&o.imgTap(...t)),a)}:"img"===s.name?{j:s.attrs.id,k:t.n("_img "+s.attrs.class),l:t.s((-1===i.ctrl[a]?"display:none;":"")+"width:"+(i.ctrl[a]||1)+"px;height:1px;"+s.attrs.style),m:s.attrs.src,n:s.h?s.w?s.m||"scaleToFill":"heightFix":"widthFix",o:e.opts[0],p:s.webp,q:e.opts[3]&&!s.attrs.ignore,r:!e.opts[3]||s.attrs.ignore,s:a,t:t.o(((...t)=>o.imgLoad&&o.imgLoad(...t)),a),v:t.o(((...t)=>o.mediaError&&o.mediaError(...t)),a),w:t.o(((...t)=>o.imgTap&&o.imgTap(...t)),a),x:t.o(((...t)=>o.imgLongTap&&o.imgLongTap(...t)),a)}:s.text?{z:t.t(s.text),A:"force"==e.opts[4]&&i.isiOS}:"br"===s.name?{}:"a"===s.name?{D:"d02d5b7a-0-"+r,E:t.p({name:"span",childs:s.children,opts:e.opts}),F:s.attrs.id,G:t.n((s.attrs.href?"_a ":"")+s.attrs.class),H:t.s("display:inline;"+s.attrs.style),I:a,J:t.o(((...t)=>o.linkTap&&o.linkTap(...t)),a)}:"video"===s.name?{L:s.attrs.id,M:t.n(s.attrs.class),N:t.s(s.attrs.style),O:s.attrs.autoplay,P:s.attrs.controls,Q:s.attrs.loop,R:s.attrs.muted,S:s.attrs["object-fit"],T:s.attrs.poster,U:s.src[i.ctrl[a]||0],V:a,W:t.o(((...t)=>o.play&&o.play(...t)),a),X:t.o(((...t)=>o.mediaError&&o.mediaError(...t)),a)}:"audio"===s.name?{Z:s.attrs.id,aa:t.n(s.attrs.class),ab:t.s(s.attrs.style),ac:s.attrs.author,ad:s.attrs.controls,ae:s.attrs.loop,af:s.attrs.name,ag:s.attrs.poster,ah:s.src[i.ctrl[a]||0],ai:a,aj:t.o(((...t)=>o.play&&o.play(...t)),a),ak:t.o(((...t)=>o.mediaError&&o.mediaError(...t)),a)}:"table"===s.name&&s.c||"li"===s.name?t.e({am:"li"===s.name},"li"===s.name?{an:"d02d5b7a-1-"+r,ao:t.p({childs:s.children,opts:e.opts})}:{ap:t.f(s.children,((s,a,i)=>t.e({a:"td"===s.name||"th"===s.name},"td"===s.name||"th"===s.name?{b:"d02d5b7a-2-"+r+"-"+i,c:t.p({childs:s.children,opts:e.opts})}:{d:t.f(s.children,((s,a,o)=>t.e({a:"td"===s.name||"th"===s.name},"td"===s.name||"th"===s.name?{b:"d02d5b7a-3-"+r+"-"+i+"-"+o,c:t.p({childs:s.children,opts:e.opts}),d:t.n("_"+s.name+" "+s.attrs.class),e:t.s(s.attrs.style)}:{f:t.f(s.children,((s,a,n)=>({a:"d02d5b7a-4-"+r+"-"+i+"-"+o+"-"+n,b:t.p({childs:s.children,opts:e.opts}),c:a,d:t.n("_"+s.name+" "+s.attrs.class),e:t.s(s.attrs.style)}))),g:t.n("_"+s.name+" "+s.attrs.class),h:t.s(s.attrs.style)},{i:a})))},{e:a,f:t.n("_"+s.name+" "+s.attrs.class),g:t.s(s.attrs.style)})))},{aq:s.attrs.id,ar:t.n("_"+s.name+" "+s.attrs.class),as:t.s(s.attrs.style)}):s.c?2===s.c?{aB:t.f(s.children,((s,a,i)=>({a:a,b:t.s(s.f),c:"d02d5b7a-5-"+r+"-"+i,d:t.p({name:s.name,attrs:s.attrs,childs:s.children,opts:e.opts})}))),aC:s.attrs.id,aD:t.n("_block _"+s.name+" "+s.attrs.class),aE:t.s(s.f+";"+s.attrs.style)}:{aF:t.s(s.f),aG:"d02d5b7a-6-"+r,aH:t.p({name:s.name,attrs:s.attrs,childs:s.children,opts:e.opts})}:{av:s.attrs.id,aw:t.s("display:inline;"+s.f),ax:e.opts[4],ay:e.opts[4],az:[s]},{i:"img"===s.name,y:s.text,B:"br"===s.name,C:"a"===s.name,K:"video"===s.name,Y:"audio"===s.name,al:"table"===s.name&&s.c||"li"===s.name,at:!s.c,aA:2===s.c,aI:a}))),b:e.attrs.id,c:t.n("_block _"+e.name+" "+e.attrs.class),d:t.s(e.attrs.style)}}]]);wx.createComponent(e);const r=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.json b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.json
new file mode 100644
index 0000000..7bebc99
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "node": "./node"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.wxml b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.wxml
new file mode 100644
index 0000000..37f9a45
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.wxml
@@ -0,0 +1,31 @@
+
+
+// 行内标签列表
+var inlineTags = {
+ abbr: true,
+ b: true,
+ big: true,
+ code: true,
+ del: true,
+ em: true,
+ i: true,
+ ins: true,
+ label: true,
+ q: true,
+ small: true,
+ span: true,
+ strong: true,
+ sub: true,
+ sup: true
+}
+/**
+ * @description 判断是否为行内标签
+ */
+module.exports = {
+ isInline: function (tagName, style) {
+ return inlineTags[tagName] || (style || '').indexOf('display:inline') !== -1
+ }
+}
+
+
+{{n.z}}\n
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.wxss b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.wxss
new file mode 100644
index 0000000..b41e46d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.wxss
@@ -0,0 +1 @@
+._a{padding:1.5px 0;color:#366092;word-break:break-all}._hover{text-decoration:underline;opacity:.7}._img{max-width:100%;-webkit-touch-callout:none}._block{display:block}._b,._strong{font-weight:700}._code{font-family:monospace}._del{text-decoration:line-through}._em,._i{font-style:italic}._h1{font-size:2em}._h2{font-size:1.5em}._h3{font-size:1.17em}._h5{font-size:.83em}._h6{font-size:.67em}._h1,._h2,._h3,._h4,._h5,._h6{display:block;font-weight:700}._image{height:1px}._ins{text-decoration:underline}._li{display:list-item}._ol{list-style-type:decimal}._ol,._ul{display:block;padding-left:40px;margin:1em 0}._q:before{content:'"'}._q:after{content:'"'}._sub{font-size:smaller;vertical-align:sub}._sup{font-size:smaller;vertical-align:super}._thead,._tbody,._tfoot{display:table-row-group}._tr{display:table-row}._td,._th{display:table-cell;vertical-align:middle}._th{font-weight:700;text-align:center}._ul{list-style-type:disc}._ul ._ul{margin:0;list-style-type:circle}._ul ._ul ._ul{list-style-type:square}._abbr,._b,._code,._del,._em,._i,._ins,._label,._q,._span,._strong,._sub,._sup{display:inline}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/parser.js b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/parser.js
new file mode 100644
index 0000000..ff07e0d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/mp-html/components/mp-html/parser.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../../../common/vendor.js"),e={trustTags:l("a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video"),blockTags:l("address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section"),inlineTags:l("abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup"),ignoreTags:l("area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr"),voidTags:l("area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr"),entities:{lt:"<",gt:">",quot:'"',apos:"'",ensp:" ",emsp:" ",nbsp:" ",semi:";",ndash:"–",mdash:"—",middot:"·",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",hellip:"…",larr:"←",uarr:"↑",rarr:"→",darr:"↓"},tagStyle:{address:"font-style:italic",big:"display:inline;font-size:1.2em",caption:"display:table-caption;text-align:center",center:"text-align:center",cite:"font-style:italic",dd:"margin-left:40px",mark:"background-color:yellow",pre:"font-family:monospace;white-space:pre",s:"text-decoration:line-through",small:"display:inline;font-size:0.8em",strike:"text-decoration:line-through",u:"text-decoration:underline"},svgDict:{animatetransform:"animateTransform",lineargradient:"linearGradient",viewbox:"viewBox",attributename:"attributeName",repeatcount:"repeatCount",repeatdur:"repeatDur",foreignobject:"foreignObject"}},i={};let s,n;if(t.index.canIUse("getWindowInfo"))s=t.index.getWindowInfo().windowWidth,n=t.index.getDeviceInfo().system;else{const e=t.index.getSystemInfoSync();s=e.windowWidth,n=e.system}const a=l(" ,\r,\n,\t,\f");let r=0;function l(t){const e=Object.create(null),i=t.split(",");for(let s=i.length;s--;)e[i[s]]=!0;return e}function o(t,i){let s=t.indexOf("&");for(;-1!==s;){const n=t.indexOf(";",s+3);let a;if(-1===n)break;"#"===t[s+1]?(a=parseInt(("x"===t[s+2]?"0":"")+t.substring(s+2,n)),isNaN(a)||(t=t.substr(0,s)+String.fromCharCode(a)+t.substr(n+1))):(a=t.substring(s+1,n),(e.entities[a]||"amp"===a&&i)&&(t=t.substr(0,s)+(e.entities[a]||"&")+t.substr(n+1))),s=t.indexOf("&",s+1)}return t}function h(t){let e=t.length-1;for(let i=e;i>=-1;i--)(-1===i||t[i].c||!t[i].name||"div"!==t[i].name&&"p"!==t[i].name&&"h"!==t[i].name[0]||(t[i].attrs.style||"").includes("inline"))&&(e-i>=5&&t.splice(i+1,e-i,{name:"div",attrs:{},children:t.slice(i+1,e+1)}),e=i-1)}function c(t){this.options=t||{},this.tagStyle=Object.assign({},e.tagStyle,this.options.tagStyle),this.imgList=t.imgList||[],this.imgList._unloadimgs=0,this.plugins=t.plugins||[],this.attrs=Object.create(null),this.stack=[],this.nodes=[],this.pre=(this.options.containerStyle||"").includes("white-space")&&this.options.containerStyle.includes("pre")?2:0}function d(t){this.handler=t}c.prototype.parse=function(t){for(let i=this.plugins.length;i--;)this.plugins[i].onUpdate&&(t=this.plugins[i].onUpdate(t,e)||t);for(new d(this).parse(t);this.stack.length;)this.popNode();return this.nodes.length>50&&h(this.nodes),this.nodes},c.prototype.expose=function(){for(let t=this.stack.length;t--;){const e=this.stack[t];if(e.c||"a"===e.name||"video"===e.name||"audio"===e.name)return;e.c=1}},c.prototype.hook=function(t){for(let e=this.plugins.length;e--;)if(this.plugins[e].onParse&&!1===this.plugins[e].onParse(t,this))return!1;return!0},c.prototype.getUrl=function(t){const e=this.options.domain;return"/"===t[0]?"/"===t[1]?t=(e?e.split("://")[0]:"http")+":"+t:e&&(t=e+t):t.includes("data:")||t.includes("://")||e&&(t=e+"/"+t),t},c.prototype.parseStyle=function(t){const e=t.attrs,i=(this.tagStyle[t.name]||"").split(";").concat((e.style||"").split(";")),n={};let r="";e.id&&!this.xml&&(this.options.useAnchor?this.expose():"img"!==t.name&&"a"!==t.name&&"video"!==t.name&&"audio"!==t.name&&(e.id=void 0)),e.width&&(n.width=parseFloat(e.width)+(e.width.includes("%")?"%":"px"),e.width=void 0),e.height&&(n.height=parseFloat(e.height)+(e.height.includes("%")?"%":"px"),e.height=void 0);for(let l=0,o=i.length;l0||o.includes("safe"))r+=`;${e}:${o}`;else if(!n[e]||o.includes("import")||!n[e].includes("import")){if(o.includes("url")){let t=o.indexOf("(")+1;if(t){for(;'"'===o[t]||"'"===o[t]||a[o[t]];)t++;o=o.substr(0,t)+this.getUrl(o.substr(t))}}else o.includes("rpx")&&(o=o.replace(/[0-9.]+\s*rpx/g,(t=>parseFloat(t)*s/750+"px")));n[e]=o}}return t.attrs.style=r,n},c.prototype.onTagName=function(t){this.tagName=this.xml?t:t.toLowerCase(),"svg"===this.tagName&&(this.xml=(this.xml||0)+1,e.ignoreTags.style=void 0)},c.prototype.onAttrName=function(t){"data-"===(t=this.xml?t:t.toLowerCase()).substr(0,5)?"data-src"!==t||this.attrs.src?"img"===this.tagName||"a"===this.tagName?this.attrName=t:this.attrName=void 0:this.attrName="src":(this.attrName=t,this.attrs[t]="T")},c.prototype.onAttrVal=function(t){const e=this.attrName||"";"style"===e||"href"===e?this.attrs[e]=o(t,!0):e.includes("src")?this.attrs[e]=this.getUrl(o(t,!0)):e&&(this.attrs[e]=t)},c.prototype.onOpenTag=function(t){const n=Object.create(null);n.name=this.tagName,n.attrs=this.attrs,this.options.nodes.length&&(n.type="node"),this.attrs=Object.create(null);const a=n.attrs,l=this.stack[this.stack.length-1],o=l?l.children:this.nodes,h=this.xml?t:e.voidTags[n.name];if(i[n.name]&&(a.class=i[n.name]+(a.class?" "+a.class:"")),"embed"===n.name){const t=a.src||"";t.includes(".mp4")||t.includes(".3gp")||t.includes(".m3u8")||(a.type||"").includes("video")?n.name="video":(t.includes(".mp3")||t.includes(".wav")||t.includes(".aac")||t.includes(".m4a")||(a.type||"").includes("audio"))&&(n.name="audio"),a.autostart&&(a.autoplay="T"),a.controls="T"}if("video"!==n.name&&"audio"!==n.name||("video"!==n.name||a.id||(a.id="v"+r++),a.controls||a.autoplay||(a.controls="T"),n.src=[],a.src&&(n.src.push(a.src),a.src=void 0),this.expose()),h){if(!this.hook(n)||e.ignoreTags[n.name])return void("base"!==n.name||this.options.domain?"source"===n.name&&l&&("video"===l.name||"audio"===l.name)&&a.src&&l.src.push(a.src):this.options.domain=a.href);const t=this.parseStyle(n);if("img"===n.name){if(a.src&&(a.src.includes("webp")&&(n.webp="T"),a.src.includes("data:")&&"all"!==this.options.previewImg&&!a["original-src"]&&(a.ignore="T"),!a.ignore||n.webp||a.src.includes("cloud://"))){for(let i=this.stack.length;i--;){const e=this.stack[i];"a"===e.name&&(n.a=e.attrs),"table"!==e.name||n.webp||a.src.includes("cloud://")||(!t.display||t.display.includes("inline")?n.t="inline-block":n.t=t.display,t.display=void 0);const s=e.attrs.style||"";if(!s.includes("flex:")||s.includes("flex:0")||s.includes("flex: 0")||t.width&&!(parseInt(t.width)>100))if(s.includes("flex")&&"100%"===t.width)for(let n=i+1;n.5?e[t].toUpperCase():e[t];i+=e.substr(t),e=i}}this.imgList.push(e),n.t||(this.imgList._unloadimgs+=1)}"inline"===t.display&&(t.display=""),a.ignore&&(t["max-width"]=t["max-width"]||"100%",a.style+=";-webkit-touch-callout:none"),parseInt(t.width)>s&&(t.height=void 0),isNaN(parseInt(t.width))||(n.w="T"),!isNaN(parseInt(t.height))&&(!t.height.includes("%")||l&&(l.attrs.style||"").includes("height"))&&(n.h="T"),n.w&&n.h&&t["object-fit"]&&("contain"===t["object-fit"]?n.m="aspectFit":"cover"===t["object-fit"]&&(n.m="aspectFill"))}else if("svg"===n.name)return o.push(n),this.stack.push(n),void this.popNode();for(const e in t)t[e]&&(a.style+=`;${e}:${t[e].replace(" !important","")}`);a.style=a.style.substr(1)||void 0,a.style||delete a.style}else("pre"===n.name||(a.style||"").includes("white-space")&&a.style.includes("pre"))&&2!==this.pre&&(this.pre=n.pre=1),n.children=[],this.stack.push(n);o.push(n)},c.prototype.onCloseTag=function(t){let e;for(t=this.xml?t:t.toLowerCase(),e=this.stack.length;e--&&this.stack[e].name!==t;);if(-1!==e)for(;this.stack.length>e;)this.popNode();else if("p"===t||"br"===t){(this.stack.length?this.stack[this.stack.length-1].children:this.nodes).push({name:t,attrs:{class:i[t]||"",style:this.tagStyle[t]||""}})}},c.prototype.popNode=function(){const i=this.stack.pop();let n=i.attrs;const a=i.children,r=this.stack[this.stack.length-1],l=r?r.children:this.nodes;if(!this.hook(i)||e.ignoreTags[i.name])return"title"===i.name&&a.length&&"text"===a[0].type&&this.options.setTitle&&t.index.setNavigationBarTitle({title:a[0].text}),void l.pop();if(i.pre&&2!==this.pre){this.pre=i.pre=void 0;for(let t=this.stack.length;t--;)this.stack[t].pre&&(this.pre=1)}const o={};if("svg"===i.name){if(this.xml>1)return void this.xml--;let t="";const s=n.style;return n.style="",n.xmlns="http://www.w3.org/2000/svg",function i(s){if("text"===s.type)return void(t+=s.text);const n=e.svgDict[s.name]||s.name;if("foreignObject"===n)for(const t of s.children||[])if(t.attrs&&!t.attrs.xmlns){t.attrs.xmlns="http://www.w3.org/1999/xhtml";break}t+="<"+n;for(const a in s.attrs){const i=s.attrs[a];i&&(t+=` ${e.svgDict[a]||a}="${i.replace(/"/g,"")}"`)}if(s.children){t+=">";for(let t=0;t"}else t+="/>"}(i),i.name="img",i.attrs={src:"data:image/svg+xml;utf8,"+t.replace(/#/g,"%23"),style:s,ignore:"T"},i.children=void 0,this.xml=!1,void(e.ignoreTags.style=!0)}if(n.align&&("table"===i.name?"center"===n.align?o["margin-inline-start"]=o["margin-inline-end"]="auto":o.float=n.align:o["text-align"]=n.align,n.align=void 0),n.dir&&(o.direction=n.dir,n.dir=void 0),"font"===i.name&&(n.color&&(o.color=n.color,n.color=void 0),n.face&&(o["font-family"]=n.face,n.face=void 0),n.size)){let t=parseInt(n.size);isNaN(t)||(t<1?t=1:t>7&&(t=7),o["font-size"]=["x-small","small","medium","large","x-large","xx-large","xxx-large"][t-1]),n.size=void 0}if((n.class||"").includes("align-center")&&(o["text-align"]="center"),Object.assign(o,this.parseStyle(i)),"table"!==i.name&&parseInt(o.width)>s&&(o["max-width"]="100%",o["box-sizing"]="border-box"),e.blockTags[i.name]?i.name="div":e.trustTags[i.name]||this.xml||(i.name="span"),"a"===i.name||"ad"===i.name)this.expose();else if("video"===i.name)(o.height||"").includes("auto")&&(o.height=void 0);else if("ul"!==i.name&&"ol"!==i.name||!i.c)if("table"===i.name){let t=parseFloat(n.cellpadding),e=parseFloat(n.cellspacing);const s=parseFloat(n.border),r=o["border-color"],l=o["border-style"];if(i.c&&(isNaN(t)&&(t=2),isNaN(e)&&(e=2)),s&&(n.style+=`;border:${s}px ${l||"solid"} ${r||"gray"}`),i.flag&&i.c){o.display="grid","collapse"===o["border-collapse"]&&(o["border-collapse"]=void 0,e=0),e?(o["grid-gap"]=e+"px",o.padding=e+"px"):s&&(n.style+=";border-left:0;border-top:0");const h=[],c=[],d=[],p={};!function t(e){for(let i=0;i=50&&i.c&&!(o.display||"").includes("flex")&&h(a);for(const t in o)if(o[t]){const e=`;${t}:${o[t].replace(" !important","")}`;c&&(t.includes("flex")&&"flex-direction"!==t||"align-self"===t||t.includes("grid")||"-"===o[t][0]||t.includes("width")&&e.includes("%"))?(i.f+=e,"width"===t&&(n.style+=";width:100%")):n.style+=e}n.style=n.style.substr(1)||void 0;for(const t in n)n[t]||delete n[t]},c.prototype.onText=function(e){if(!this.pre){let t,i="";for(let s=0,n=e.length;s"===this.content[this.i]||e&&">"===this.content[this.i+1])&&(t&&this.handler[t](this.content.substring(this.start,this.i)),this.i+=e?2:1,this.start=this.i,this.handler.onOpenTag(e),"script"===this.handler.tagName?(this.i=this.content.indexOf("",this.i),-1!==this.i&&(this.i+=2,this.start=this.i),this.state=this.endTag):this.state=this.text,!0)},d.prototype.text=function(){if(this.i=this.content.indexOf("<",this.i),-1===this.i)return void(this.start="a"&&t<="z"||t>="A"&&t<="Z")this.start!==this.i&&this.handler.onText(this.content.substring(this.start,this.i)),this.start=++this.i,this.state=this.tagName;else if("/"===t||"!"===t||"?"===t){this.start!==this.i&&this.handler.onText(this.content.substring(this.start,this.i));const e=this.content[this.i+2];if("/"===t&&(e>="a"&&e<="z"||e>="A"&&e<="Z"))return this.i+=2,this.start=this.i,void(this.state=this.endTag);let i="--\x3e";"!"===t&&"-"===this.content[this.i+2]&&"-"===this.content[this.i+3]||(i=">"),this.i=this.content.indexOf(i,this.i),-1!==this.i&&(this.i+=i.length,this.start=this.i)}else this.i++},d.prototype.tagName=function(){if(a[this.content[this.i]]){for(this.handler.onTagName(this.content.substring(this.start,this.i));a[this.content[++this.i]];);this.i"===t||"/"===t){if(this.handler.onCloseTag(this.content.substring(this.start,this.i)),">"!==t&&(this.i=this.content.indexOf(">",this.i),-1===this.i))return;this.start=++this.i,this.state=this.text}else this.i++},exports.Parser=c;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
new file mode 100644
index 0000000..bf0d9a6
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
@@ -0,0 +1 @@
+"use strict";function e(e,t=2){for(e+="";e.lengthe(t.year,4),yy:t=>e(t.year),MM:t=>e(t.month),M:e=>e.month,dd:t=>e(t.day),d:e=>e.day,hh:t=>e(t.hour),h:e=>e.hour,mm:t=>e(t.minute),m:e=>e.minute,ss:t=>e(t.second),s:e=>e.second,SSS:t=>e(t.millisecond,3),S:e=>e.millisecond};function n(e){return e instanceof Date?e:"string"==typeof e?e.indexOf("T")>-1?new Date(e):new Date(e.replace(/-/g,"/")):new Date(e)}exports.friendlyDate=function(e,{locale:o="zh",threshold:r=[6e4,36e5],format:a="yyyy/MM/dd hh:mm:ss"}){if("-"===e)return e;if(!e&&0!==e)return"";const s={zh:{year:"年",month:"月",day:"天",hour:"小时",minute:"分钟",second:"秒",ago:"前",later:"后",justNow:"刚刚",soon:"马上",template:"{num}{unit}{suffix}"},en:{year:"year",month:"month",day:"day",hour:"hour",minute:"minute",second:"second",ago:"ago",later:"later",justNow:"just now",soon:"soon",template:"{num} {unit} {suffix}"}},u=s[o]||s.zh;let i,h,l=n(e),c=l.getTime()-Date.now(),y=Math.abs(c);if(y=r[1])return function(e,o="yyyy/MM/dd hh:mm:ss"){if(!e&&0!==e)return"";const r={year:(e=n(e)).getFullYear(),month:e.getMonth()+1,day:e.getDate(),hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()},a=/yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/;let s=!0,u=o;for(;s;)s=!1,u=u.replace(a,(function(e){return s=!0,t[e](r)}));return u}(l,a);let m=u.later;c<0&&(m=u.ago,c=-c);const d=Math.floor(c/1e3),f=Math.floor(d/60),M=Math.floor(f/60),g=Math.floor(M/24),S=Math.floor(g/30),p=Math.floor(S/12);switch(!0){case p>0:i=p,h=u.year;break;case S>0:i=S,h=u.month;break;case g>0:i=g,h=u.day;break;case M>0:i=M,h=u.hour;break;case f>0:i=f,h=u.minute;break;default:i=d,h=u.second}return"en"===o&&(1===i?i="a":h+="s"),u.template.replace(/{\s*num\s*}/g,i+"").replace(/{\s*unit\s*}/g,h).replace(/{\s*suffix\s*}/g,m)};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js
new file mode 100644
index 0000000..85211bc
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js
@@ -0,0 +1 @@
+"use strict";const e=require("./date-format.js"),t=require("../../../../common/vendor.js"),r={name:"uniDateformat",props:{date:{type:[Object,String,Number],default:()=>"-"},locale:{type:String,default:"zh"},threshold:{type:Array,default:()=>[0,0]},format:{type:String,default:"yyyy/MM/dd hh:mm:ss"},refreshRate:{type:[Number,String],default:0}},data:()=>({refreshMark:0}),computed:{dateShow(){return this.refreshMark,e.friendlyDate(this.date,{locale:this.locale,threshold:this.threshold,format:this.format})}},watch:{refreshRate:{handler(){this.setAutoRefresh()},immediate:!0}},methods:{refresh(){this.refreshMark++},setAutoRefresh(){clearInterval(this.refreshInterval),this.refreshRate&&(this.refreshInterval=setInterval((()=>{this.refresh()}),parseInt(this.refreshRate)))}}};const s=t._export_sfc(r,[["render",function(e,r,s,a,h,o){return{a:t.t(o.dateShow)}}]]);wx.createComponent(s);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.wxml
new file mode 100644
index 0000000..05d2f87
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.wxml
@@ -0,0 +1 @@
+{{a}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js
new file mode 100644
index 0000000..482857b
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js
@@ -0,0 +1 @@
+"use strict";const t=require("./uniicons_file_vue.js"),e=require("../../../../common/vendor.js"),i={name:"UniIcons",emits:["click"],props:{type:{type:String,default:""},color:{type:String,default:"#333333"},size:{type:[Number,String],default:16},customPrefix:{type:String,default:""},fontFamily:{type:String,default:""}},data:()=>({icons:t.fontData}),computed:{unicode(){let t=this.icons.find((t=>t.font_class===this.type));return t?t.unicode:""},iconSize(){return"number"==typeof(t=this.size)||/^[0-9]*$/g.test(t)?t+"px":t;var t},styleObj(){return""!==this.fontFamily?`color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`:`color: ${this.color}; font-size: ${this.iconSize};`}},methods:{_onClick(){this.$emit("click")}}};const n=e._export_sfc(i,[["render",function(t,i,n,o,s,r){return{a:e.s(r.styleObj),b:e.n("uniui-"+n.type),c:e.n(n.customPrefix),d:e.n(n.customPrefix?n.type:""),e:e.o(((...t)=>r._onClick&&r._onClick(...t)))}}]]);wx.createComponent(n);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.wxml
new file mode 100644
index 0000000..79d6edd
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.wxss
new file mode 100644
index 0000000..7399ecd
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.wxss
@@ -0,0 +1 @@
+.uniui-cart-filled:before{content:"\e6d0"}.uniui-gift-filled:before{content:"\e6c4"}.uniui-color:before{content:"\e6cf"}.uniui-wallet:before{content:"\e6b1"}.uniui-settings-filled:before{content:"\e6ce"}.uniui-auth-filled:before{content:"\e6cc"}.uniui-shop-filled:before{content:"\e6cd"}.uniui-staff-filled:before{content:"\e6cb"}.uniui-vip-filled:before{content:"\e6c6"}.uniui-plus-filled:before{content:"\e6c7"}.uniui-folder-add-filled:before{content:"\e6c8"}.uniui-color-filled:before{content:"\e6c9"}.uniui-tune-filled:before{content:"\e6ca"}.uniui-calendar-filled:before{content:"\e6c0"}.uniui-notification-filled:before{content:"\e6c1"}.uniui-wallet-filled:before{content:"\e6c2"}.uniui-medal-filled:before{content:"\e6c3"}.uniui-fire-filled:before{content:"\e6c5"}.uniui-refreshempty:before{content:"\e6bf"}.uniui-location-filled:before{content:"\e6af"}.uniui-person-filled:before{content:"\e69d"}.uniui-personadd-filled:before{content:"\e698"}.uniui-arrowthinleft:before{content:"\e6d2"}.uniui-arrowthinup:before{content:"\e6d3"}.uniui-arrowthindown:before{content:"\e6d4"}.uniui-back:before{content:"\e6b9"}.uniui-forward:before{content:"\e6ba"}.uniui-arrow-right:before{content:"\e6bb"}.uniui-arrow-left:before{content:"\e6bc"}.uniui-arrow-up:before{content:"\e6bd"}.uniui-arrow-down:before{content:"\e6be"}.uniui-arrowthinright:before{content:"\e6d1"}.uniui-down:before{content:"\e6b8"}.uniui-bottom:before{content:"\e6b8"}.uniui-arrowright:before{content:"\e6d5"}.uniui-right:before{content:"\e6b5"}.uniui-up:before{content:"\e6b6"}.uniui-top:before{content:"\e6b6"}.uniui-left:before{content:"\e6b7"}.uniui-arrowup:before{content:"\e6d6"}.uniui-eye:before{content:"\e651"}.uniui-eye-filled:before{content:"\e66a"}.uniui-eye-slash:before{content:"\e6b3"}.uniui-eye-slash-filled:before{content:"\e6b4"}.uniui-info-filled:before{content:"\e649"}.uniui-reload:before{content:"\e6b2"}.uniui-micoff-filled:before{content:"\e6b0"}.uniui-map-pin-ellipse:before{content:"\e6ac"}.uniui-map-pin:before{content:"\e6ad"}.uniui-location:before{content:"\e6ae"}.uniui-starhalf:before{content:"\e683"}.uniui-star:before{content:"\e688"}.uniui-star-filled:before{content:"\e68f"}.uniui-calendar:before{content:"\e6a0"}.uniui-fire:before{content:"\e6a1"}.uniui-medal:before{content:"\e6a2"}.uniui-font:before{content:"\e6a3"}.uniui-gift:before{content:"\e6a4"}.uniui-link:before{content:"\e6a5"}.uniui-notification:before{content:"\e6a6"}.uniui-staff:before{content:"\e6a7"}.uniui-vip:before{content:"\e6a8"}.uniui-folder-add:before{content:"\e6a9"}.uniui-tune:before{content:"\e6aa"}.uniui-auth:before{content:"\e6ab"}.uniui-person:before{content:"\e699"}.uniui-email-filled:before{content:"\e69a"}.uniui-phone-filled:before{content:"\e69b"}.uniui-phone:before{content:"\e69c"}.uniui-email:before{content:"\e69e"}.uniui-personadd:before{content:"\e69f"}.uniui-chatboxes-filled:before{content:"\e692"}.uniui-contact:before{content:"\e693"}.uniui-chatbubble-filled:before{content:"\e694"}.uniui-contact-filled:before{content:"\e695"}.uniui-chatboxes:before{content:"\e696"}.uniui-chatbubble:before{content:"\e697"}.uniui-upload-filled:before{content:"\e68e"}.uniui-upload:before{content:"\e690"}.uniui-weixin:before{content:"\e691"}.uniui-compose:before{content:"\e67f"}.uniui-qq:before{content:"\e680"}.uniui-download-filled:before{content:"\e681"}.uniui-pyq:before{content:"\e682"}.uniui-sound:before{content:"\e684"}.uniui-trash-filled:before{content:"\e685"}.uniui-sound-filled:before{content:"\e686"}.uniui-trash:before{content:"\e687"}.uniui-videocam-filled:before{content:"\e689"}.uniui-spinner-cycle:before{content:"\e68a"}.uniui-weibo:before{content:"\e68b"}.uniui-videocam:before{content:"\e68c"}.uniui-download:before{content:"\e68d"}.uniui-help:before{content:"\e679"}.uniui-navigate-filled:before{content:"\e67a"}.uniui-plusempty:before{content:"\e67b"}.uniui-smallcircle:before{content:"\e67c"}.uniui-minus-filled:before{content:"\e67d"}.uniui-micoff:before{content:"\e67e"}.uniui-closeempty:before{content:"\e66c"}.uniui-clear:before{content:"\e66d"}.uniui-navigate:before{content:"\e66e"}.uniui-minus:before{content:"\e66f"}.uniui-image:before{content:"\e670"}.uniui-mic:before{content:"\e671"}.uniui-paperplane:before{content:"\e672"}.uniui-close:before{content:"\e673"}.uniui-help-filled:before{content:"\e674"}.uniui-paperplane-filled:before{content:"\e675"}.uniui-plus:before{content:"\e676"}.uniui-mic-filled:before{content:"\e677"}.uniui-image-filled:before{content:"\e678"}.uniui-locked-filled:before{content:"\e668"}.uniui-info:before{content:"\e669"}.uniui-locked:before{content:"\e66b"}.uniui-camera-filled:before{content:"\e658"}.uniui-chat-filled:before{content:"\e659"}.uniui-camera:before{content:"\e65a"}.uniui-circle:before{content:"\e65b"}.uniui-checkmarkempty:before{content:"\e65c"}.uniui-chat:before{content:"\e65d"}.uniui-circle-filled:before{content:"\e65e"}.uniui-flag:before{content:"\e65f"}.uniui-flag-filled:before{content:"\e660"}.uniui-gear-filled:before{content:"\e661"}.uniui-home:before{content:"\e662"}.uniui-home-filled:before{content:"\e663"}.uniui-gear:before{content:"\e664"}.uniui-smallcircle-filled:before{content:"\e665"}.uniui-map-filled:before{content:"\e666"}.uniui-map:before{content:"\e667"}.uniui-refresh-filled:before{content:"\e656"}.uniui-refresh:before{content:"\e657"}.uniui-cloud-upload:before{content:"\e645"}.uniui-cloud-download-filled:before{content:"\e646"}.uniui-cloud-download:before{content:"\e647"}.uniui-cloud-upload-filled:before{content:"\e648"}.uniui-redo:before{content:"\e64a"}.uniui-images-filled:before{content:"\e64b"}.uniui-undo-filled:before{content:"\e64c"}.uniui-more:before{content:"\e64d"}.uniui-more-filled:before{content:"\e64e"}.uniui-undo:before{content:"\e64f"}.uniui-images:before{content:"\e650"}.uniui-paperclip:before{content:"\e652"}.uniui-settings:before{content:"\e653"}.uniui-search:before{content:"\e654"}.uniui-redo-filled:before{content:"\e655"}.uniui-list:before{content:"\e644"}.uniui-mail-open-filled:before{content:"\e63a"}.uniui-hand-down-filled:before{content:"\e63c"}.uniui-hand-down:before{content:"\e63d"}.uniui-hand-up-filled:before{content:"\e63e"}.uniui-hand-up:before{content:"\e63f"}.uniui-heart-filled:before{content:"\e641"}.uniui-mail-open:before{content:"\e643"}.uniui-heart:before{content:"\e639"}.uniui-loop:before{content:"\e633"}.uniui-pulldown:before{content:"\e632"}.uniui-scan:before{content:"\e62a"}.uniui-bars:before{content:"\e627"}.uniui-checkbox:before{content:"\e62b"}.uniui-checkbox-filled:before{content:"\e62c"}.uniui-shop:before{content:"\e62f"}.uniui-headphones:before{content:"\e630"}.uniui-cart:before{content:"\e631"}@font-face{font-family:uniicons;src:url(data:font/ttf;base64,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5nkAAOZ5AAAAVgAA5noAAOZ6AAAAVwAA5nsAAOZ7AAAAWAAA5nwAAOZ8AAAAWQAA5n0AAOZ9AAAAWgAA5n4AAOZ+AAAAWwAA5n8AAOZ/AAAASQAA5oAAAOaAAAAASgAA5oEAAOaBAAAASwAA5oIAAOaCAAAATAAA5oMAAOaDAAAAKwAA5oQAAOaEAAAATQAA5oUAAOaFAAAATgAA5oYAAOaGAAAATwAA5ocAAOaHAAAAUAAA5ogAAOaIAAAALAAA5okAAOaJAAAAUQAA5ooAAOaKAAAAUgAA5osAAOaLAAAAUwAA5owAAOaMAAAAVAAA5o0AAOaNAAAAVQAA5o4AAOaOAAAARgAA5o8AAOaPAAAALQAA5pAAAOaQAAAARwAA5pEAAOaRAAAASAAA5pIAAOaSAAAAQAAA5pMAAOaTAAAAQQAA5pQAAOaUAAAAQgAA5pUAAOaVAAAAQwAA5pYAAOaWAAAARAAA5pcAAOaXAAAARQAA5pgAAOaYAAAAFgAA5pkAAOaZAAAAOgAA5poAAOaaAAAAOwAA5psAAOabAAAAPAAA5pwAAOacAAAAPQAA5p0AAOadAAAAFQAA5p4AAOaeAAAAPgAA5p8AAOafAAAAPwAA5qAAAOagAAAALgAA5qEAAOahAAAALwAA5qIAAOaiAAAAMAAA5qMAAOajAAAAMQAA5qQAAOakAAAAMgAA5qUAAOalAAAAMwAA5qYAAOamAAAANAAA5qcAAOanAAAANQAA5qgAAOaoAAAANgAA5qkAAOapAAAANwAA5qoAAOaqAAAAOAAA5qsAAOarAAAAOQAA5qwAAOasAAAAKAAA5q0AAOatAAAAKQAA5q4AAOauAAAAKgAA5q8AAOavAAAAFAAA5rAAAOawAAAAJwAA5rEAAOaxAAAABAAA5rIAAOayAAAAJgAA5rMAAOazAAAAIwAA5rQAAOa0AAAAJAAA5rUAAOa1AAAAHgAA5rYAAOa2AAAAHwAA5rcAAOa3AAAAIAAA5rgAAOa4AAAAHQAA5rkAAOa5AAAAGgAA5roAAOa6AAAAGwAA5rsAAOa7AAAAHAAA5rwAAOa8AAAAFwAA5r0AAOa9AAAAGAAA5r4AAOa+AAAAGQAA5r8AAOa/AAAAEwAA5sAAAObAAAAADgAA5sEAAObBAAAADwAA5sIAAObCAAAAEAAA5sMAAObDAAAAEQAA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AZ8BoAALY2FydC1maWxsZWQLZ2lmdC1maWxsZWQFY29sb3IGd2FsbGV0D3NldHRpbmdzLWZpbGxlZAthdXRoLWZpbGxlZAtzaG9wLWZpbGxlZAxzdGFmZi1maWxsZWQKdmlwLWZpbGxlZAtwbHVzLWZpbGxlZBFmb2xkZXItYWRkLWZpbGxlZAxjb2xvci1maWxsZWQLdHVuZS1maWxsZWQPY2FsZW5kYXItZmlsbGVkE25vdGlmaWNhdGlvbi1maWxsZWQNd2FsbGV0LWZpbGxlZAxtZWRhbC1maWxsZWQLZmlyZS1maWxsZWQMcmVmcmVzaGVtcHR5D2xvY2F0aW9uLWZpbGxlZA1wZXJzb24tZmlsbGVkEHBlcnNvbmFkZC1maWxsZWQNYXJyb3d0aGlubGVmdAthcnJvd3RoaW51cA1hcnJvd3RoaW5kb3duBGJhY2sHZm9yd2FyZAthcnJvdy1yaWdodAlhcnJvd2Rvd24KYXJyb3dyaWdodAN0b3AJYXJyb3dsZWZ0A2V5ZQpleWUtZmlsbGVkCWV5ZS1zbGFzaBBleWUtc2xhc2gtZmlsbGVkC2luZm8tZmlsbGVkBnJlbG9hZA1taWNvZmYtZmlsbGVkD21hcC1waW4tZWxsaXBzZQdtYXAtcGluCGxvY2F0aW9uCHN0YXJoYWxmBHN0YXILc3Rhci1maWxsZWQIY2FsZW5kYXIEZmlyZQVtZWRhbARmb250BGdpZnQEbGluawxub3RpZmljYXRpb24Fc3RhZmYDdmlwCmZvbGRlci1hZGQEdHVuZQRhdXRoBnBlcnNvbgxlbWFpbC1maWxsZWQMcGhvbmUtZmlsbGVkBXBob25lBWVtYWlsCXBlcnNvbmFkZBBjaGF0Ym94ZXMtZmlsbGVkB2NvbnRhY3QRY2hhdGJ1YmJsZS1maWxsZWQOY29udGFjdC1maWxsZWQJY2hhdGJveGVzCmNoYXRidWJibGUNdXBsb2FkLWZpbGxlZAZ1cGxvYWQGd2VpeGluB2NvbXBvc2UCcXEPZG93bmxvYWQtZmlsbGVkA3B5cQVzb3VuZAx0cmFzaC1maWxsZWQMc291bmQtZmlsbGVkBXRyYXNoD3ZpZGVvY2FtLWZpbGxlZA1zcGlubmVyLWN5Y2xlBXdlaWJvCHZpZGVvY2FtCGRvd25sb2FkBGhlbHAPbmF2aWdhdGUtZmlsbGVkCXBsdXNlbXB0eQtzbWFsbGNpcmNsZQxtaW51cy1maWxsZWQGbWljb2ZmCmNsb3NlZW1wdHkFY2xlYXIIbmF2aWdhdGUFbWludXMFaW1hZ2UDbWljCnBhcGVycGxhbmUFY2xvc2ULaGVscC1maWxsZWQRcGFwZXJwbGFuZS1maWxsZWQEcGx1cwptaWMtZmlsbGVkDGltYWdlLWZpbGxlZA1sb2NrZWQtZmlsbGVkBGluZm8GbG9ja2VkDWNhbWVyYS1maWxsZWQLY2hhdC1maWxsZWQGY2FtZXJhBmNpcmNsZQ5jaGVja21hcmtlbXB0eQRjaGF0DWNpcmNsZS1maWxsZWQEZmxhZwtmbGFnLWZpbGxlZAtnZWFyLWZpbGxlZARob21lC2hvbWUtZmlsbGVkBGdlYXISc21hbGxjaXJjbGUtZmlsbGVkCm1hcC1maWxsZWQDbWFwDnJlZnJlc2gtZmlsbGVkB3JlZnJlc2gMY2xvdWQtdXBsb2FkFWNsb3VkLWRvd25sb2FkLWZpbGxlZA5jbG91ZC1kb3dubG9hZBNjbG91ZC11cGxvYWQtZmlsbGVkBHJlZG8NaW1hZ2VzLWZpbGxlZAt1bmRvLWZpbGxlZARtb3JlC21vcmUtZmlsbGVkBHVuZG8GaW1hZ2VzCXBhcGVyY2xpcAhzZXR0aW5ncwZzZWFyY2gLcmVkby1maWxsZWQEbGlzdBBtYWlsLW9wZW4tZmlsbGVkEGhhbmQtZG93bi1maWxsZWQJaGFuZC1kb3duDmhhbmQtdXAtZmlsbGVkB2hhbmQtdXAMaGVhcnQtZmlsbGVkCW1haWwtb3BlbgVoZWFydARsb29wCHB1bGxkb3duBHNjYW4EYmFycwhjaGVja2JveA9jaGVja2JveC1maWxsZWQEc2hvcApoZWFkcGhvbmVzBGNhcnQAAA==)}.uni-icons{font-family:uniicons;text-decoration:none;text-align:center}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
new file mode 100644
index 0000000..83e4f63
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
@@ -0,0 +1 @@
+"use strict";exports.fontData=[{font_class:"arrow-down",unicode:""},{font_class:"arrow-left",unicode:""},{font_class:"arrow-right",unicode:""},{font_class:"arrow-up",unicode:""},{font_class:"auth",unicode:""},{font_class:"auth-filled",unicode:""},{font_class:"back",unicode:""},{font_class:"bars",unicode:""},{font_class:"calendar",unicode:""},{font_class:"calendar-filled",unicode:""},{font_class:"camera",unicode:""},{font_class:"camera-filled",unicode:""},{font_class:"cart",unicode:""},{font_class:"cart-filled",unicode:""},{font_class:"chat",unicode:""},{font_class:"chat-filled",unicode:""},{font_class:"chatboxes",unicode:""},{font_class:"chatboxes-filled",unicode:""},{font_class:"chatbubble",unicode:""},{font_class:"chatbubble-filled",unicode:""},{font_class:"checkbox",unicode:""},{font_class:"checkbox-filled",unicode:""},{font_class:"checkmarkempty",unicode:""},{font_class:"circle",unicode:""},{font_class:"circle-filled",unicode:""},{font_class:"clear",unicode:""},{font_class:"close",unicode:""},{font_class:"closeempty",unicode:""},{font_class:"cloud-download",unicode:""},{font_class:"cloud-download-filled",unicode:""},{font_class:"cloud-upload",unicode:""},{font_class:"cloud-upload-filled",unicode:""},{font_class:"color",unicode:""},{font_class:"color-filled",unicode:""},{font_class:"compose",unicode:""},{font_class:"contact",unicode:""},{font_class:"contact-filled",unicode:""},{font_class:"down",unicode:""},{font_class:"bottom",unicode:""},{font_class:"download",unicode:""},{font_class:"download-filled",unicode:""},{font_class:"email",unicode:""},{font_class:"email-filled",unicode:""},{font_class:"eye",unicode:""},{font_class:"eye-filled",unicode:""},{font_class:"eye-slash",unicode:""},{font_class:"eye-slash-filled",unicode:""},{font_class:"fire",unicode:""},{font_class:"fire-filled",unicode:""},{font_class:"flag",unicode:""},{font_class:"flag-filled",unicode:""},{font_class:"folder-add",unicode:""},{font_class:"folder-add-filled",unicode:""},{font_class:"font",unicode:""},{font_class:"forward",unicode:""},{font_class:"gear",unicode:""},{font_class:"gear-filled",unicode:""},{font_class:"gift",unicode:""},{font_class:"gift-filled",unicode:""},{font_class:"hand-down",unicode:""},{font_class:"hand-down-filled",unicode:""},{font_class:"hand-up",unicode:""},{font_class:"hand-up-filled",unicode:""},{font_class:"headphones",unicode:""},{font_class:"heart",unicode:""},{font_class:"heart-filled",unicode:""},{font_class:"help",unicode:""},{font_class:"help-filled",unicode:""},{font_class:"home",unicode:""},{font_class:"home-filled",unicode:""},{font_class:"image",unicode:""},{font_class:"image-filled",unicode:""},{font_class:"images",unicode:""},{font_class:"images-filled",unicode:""},{font_class:"info",unicode:""},{font_class:"info-filled",unicode:""},{font_class:"left",unicode:""},{font_class:"link",unicode:""},{font_class:"list",unicode:""},{font_class:"location",unicode:""},{font_class:"location-filled",unicode:""},{font_class:"locked",unicode:""},{font_class:"locked-filled",unicode:""},{font_class:"loop",unicode:""},{font_class:"mail-open",unicode:""},{font_class:"mail-open-filled",unicode:""},{font_class:"map",unicode:""},{font_class:"map-filled",unicode:""},{font_class:"map-pin",unicode:""},{font_class:"map-pin-ellipse",unicode:""},{font_class:"medal",unicode:""},{font_class:"medal-filled",unicode:""},{font_class:"mic",unicode:""},{font_class:"mic-filled",unicode:""},{font_class:"micoff",unicode:""},{font_class:"micoff-filled",unicode:""},{font_class:"minus",unicode:""},{font_class:"minus-filled",unicode:""},{font_class:"more",unicode:""},{font_class:"more-filled",unicode:""},{font_class:"navigate",unicode:""},{font_class:"navigate-filled",unicode:""},{font_class:"notification",unicode:""},{font_class:"notification-filled",unicode:""},{font_class:"paperclip",unicode:""},{font_class:"paperplane",unicode:""},{font_class:"paperplane-filled",unicode:""},{font_class:"person",unicode:""},{font_class:"person-filled",unicode:""},{font_class:"personadd",unicode:""},{font_class:"personadd-filled",unicode:""},{font_class:"personadd-filled-copy",unicode:""},{font_class:"phone",unicode:""},{font_class:"phone-filled",unicode:""},{font_class:"plus",unicode:""},{font_class:"plus-filled",unicode:""},{font_class:"plusempty",unicode:""},{font_class:"pulldown",unicode:""},{font_class:"pyq",unicode:""},{font_class:"qq",unicode:""},{font_class:"redo",unicode:""},{font_class:"redo-filled",unicode:""},{font_class:"refresh",unicode:""},{font_class:"refresh-filled",unicode:""},{font_class:"refreshempty",unicode:""},{font_class:"reload",unicode:""},{font_class:"right",unicode:""},{font_class:"scan",unicode:""},{font_class:"search",unicode:""},{font_class:"settings",unicode:""},{font_class:"settings-filled",unicode:""},{font_class:"shop",unicode:""},{font_class:"shop-filled",unicode:""},{font_class:"smallcircle",unicode:""},{font_class:"smallcircle-filled",unicode:""},{font_class:"sound",unicode:""},{font_class:"sound-filled",unicode:""},{font_class:"spinner-cycle",unicode:""},{font_class:"staff",unicode:""},{font_class:"staff-filled",unicode:""},{font_class:"star",unicode:""},{font_class:"star-filled",unicode:""},{font_class:"starhalf",unicode:""},{font_class:"trash",unicode:""},{font_class:"trash-filled",unicode:""},{font_class:"tune",unicode:""},{font_class:"tune-filled",unicode:""},{font_class:"undo",unicode:""},{font_class:"undo-filled",unicode:""},{font_class:"up",unicode:""},{font_class:"top",unicode:""},{font_class:"upload",unicode:""},{font_class:"upload-filled",unicode:""},{font_class:"videocam",unicode:""},{font_class:"videocam-filled",unicode:""},{font_class:"vip",unicode:""},{font_class:"vip-filled",unicode:""},{font_class:"wallet",unicode:""},{font_class:"wallet-filled",unicode:""},{font_class:"weibo",unicode:""},{font_class:"weixin",unicode:""}];
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
new file mode 100644
index 0000000..3a23415
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
@@ -0,0 +1 @@
+"use strict";const o={en:{"uni-load-more.contentdown":"Pull up to show more","uni-load-more.contentrefresh":"loading...","uni-load-more.contentnomore":"No more data"},"zh-Hans":{"uni-load-more.contentdown":"上拉显示更多","uni-load-more.contentrefresh":"正在加载...","uni-load-more.contentnomore":"没有更多数据了"},"zh-Hant":{"uni-load-more.contentdown":"上拉顯示更多","uni-load-more.contentrefresh":"正在加載...","uni-load-more.contentnomore":"沒有更多數據了"}};exports.messages=o;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js
new file mode 100644
index 0000000..23dae56
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../../common/vendor.js"),n=require("./i18n/index.js");let o;setTimeout((()=>{o=e.index.getDeviceInfo().platform}),16);const{t:t}=e.initVueI18n(n.messages),i={name:"UniLoadMore",emits:["clickLoadMore"],props:{status:{type:String,default:"more"},showIcon:{type:Boolean,default:!0},iconType:{type:String,default:"auto"},iconSize:{type:Number,default:24},color:{type:String,default:"#777777"},contentText:{type:Object,default:()=>({contentdown:"",contentrefresh:"",contentnomore:""})},showText:{type:Boolean,default:!0}},data:()=>({webviewHide:!1,platform:o,imgBase64:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzlBMzU3OTlEOUM0MTFFOUI0NTZDNERBQURBQzI4RkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzlBMzU3OUFEOUM0MTFFOUI0NTZDNERBQURBQzI4RkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOUEzNTc5N0Q5QzQxMUU5QjQ1NkM0REFBREFDMjhGRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOUEzNTc5OEQ5QzQxMUU5QjQ1NkM0REFBREFDMjhGRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pt+ALSwAAA6CSURBVHja1FsLkFZV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"}),computed:{iconSnowWidth(){return 2*(Math.floor(this.iconSize/24)||1)},contentdownText(){return this.contentText.contentdown||t("uni-load-more.contentdown")},contentrefreshText(){return this.contentText.contentrefresh||t("uni-load-more.contentrefresh")},contentnomoreText(){return this.contentText.contentnomore||t("uni-load-more.contentnomore")}},mounted(){},methods:{onClick(){this.$emit("clickLoadMore",{detail:{status:this.status}})}}};const c=e._export_sfc(i,[["render",function(n,o,t,i,c,A){return e.e({a:!c.webviewHide&&("circle"===t.iconType||"auto"===t.iconType&&"android"===c.platform)&&"loading"===t.status&&t.showIcon},!c.webviewHide&&("circle"===t.iconType||"auto"===t.iconType&&"android"===c.platform)&&"loading"===t.status&&t.showIcon?{b:t.color,c:t.iconSize/12,d:t.color,e:t.iconSize/12,f:t.color,g:t.iconSize/12,h:t.iconSize+"px",i:t.iconSize+"px"}:!c.webviewHide&&"loading"===t.status&&t.showIcon?{k:c.imgBase64,l:t.iconSize+"px",m:t.iconSize+"px"}:{},{j:!c.webviewHide&&"loading"===t.status&&t.showIcon,n:t.showText},t.showText?{o:e.t("more"===t.status?A.contentdownText:"loading"===t.status?A.contentrefreshText:A.contentnomoreText),p:t.color}:{},{q:e.o(((...e)=>A.onClick&&A.onClick(...e)))})}]]);wx.createComponent(c);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.wxml
new file mode 100644
index 0000000..e9d8d89
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.wxml
@@ -0,0 +1 @@
+{{o}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.wxss
new file mode 100644
index 0000000..79fe9cb
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.wxss
@@ -0,0 +1 @@
+.uni-load-more{display:flex;flex-direction:row;height:40px;align-items:center;justify-content:center}.uni-load-more__text{font-size:14px;margin-left:8px}.uni-load-more__img{width:24px;height:24px}.uni-load-more__img--nvue{color:#666}.uni-load-more__img--android,.uni-load-more__img--ios{width:24px;height:24px;transform:rotate(0)}.uni-load-more__img--android{animation:loading-ios 1s 0s linear infinite}.uni-load-more__img--ios-H5{position:relative;animation:loading-ios-H5 1s 0s step-end infinite}.uni-load-more__img--ios-H5 image{position:absolute;width:100%;height:100%;left:0;top:0}@keyframes loading-ios-H5{0%{transform:rotate(0)}8%{transform:rotate(30deg)}16%{transform:rotate(60deg)}24%{transform:rotate(90deg)}32%{transform:rotate(120deg)}40%{transform:rotate(150deg)}48%{transform:rotate(180deg)}56%{transform:rotate(210deg)}64%{transform:rotate(240deg)}73%{transform:rotate(270deg)}82%{transform:rotate(300deg)}91%{transform:rotate(330deg)}to{transform:rotate(360deg)}}.uni-load-more__img--android-MP{position:relative;width:24px;height:24px;transform:rotate(0);animation:loading-ios 1s 0s ease infinite}.uni-load-more__img--android-MP .uni-load-more__img-icon{position:absolute;box-sizing:border-box;width:100%;height:100%;border-radius:50%;border:solid 2px transparent;border-top:solid 2px #777777;transform-origin:center}.uni-load-more__img--android-MP .uni-load-more__img-icon:nth-child(1){animation:loading-android-MP-1 1s 0s linear infinite}.uni-load-more__img--android-MP .uni-load-more__img-icon:nth-child(2){animation:loading-android-MP-2 1s 0s linear infinite}.uni-load-more__img--android-MP .uni-load-more__img-icon:nth-child(3){animation:loading-android-MP-3 1s 0s linear infinite}@keyframes loading-android{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes loading-android-MP-1{0%{transform:rotate(0)}50%{transform:rotate(90deg)}to{transform:rotate(360deg)}}@keyframes loading-android-MP-2{0%{transform:rotate(0)}50%{transform:rotate(180deg)}to{transform:rotate(360deg)}}@keyframes loading-android-MP-3{0%{transform:rotate(0)}50%{transform:rotate(270deg)}to{transform:rotate(360deg)}}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js
new file mode 100644
index 0000000..8a5495f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../../../common/vendor.js"),s={name:"uniPopup",components:{},emits:["change","maskClick"],props:{animation:{type:Boolean,default:!0},type:{type:String,default:"center"},isMaskClick:{type:Boolean,default:null},maskClick:{type:Boolean,default:null},backgroundColor:{type:String,default:"none"},safeArea:{type:Boolean,default:!0},maskBackgroundColor:{type:String,default:"rgba(0, 0, 0, 0.4)"},borderRadius:{type:String}},watch:{type:{handler:function(t){this.config[t]&&this[this.config[t]](!0)},immediate:!0},isDesktop:{handler:function(t){this.config[t]&&this[this.config[this.type]](!0)},immediate:!0},maskClick:{handler:function(t){this.mkclick=t},immediate:!0},isMaskClick:{handler:function(t){this.mkclick=t},immediate:!0},showPopup(t){}},data(){return{duration:300,ani:[],showPopup:!1,showTrans:!1,popupWidth:0,popupHeight:0,config:{top:"top",bottom:"bottom",center:"center",left:"left",right:"right",message:"top",dialog:"center",share:"bottom"},maskClass:{position:"fixed",bottom:0,top:0,left:0,right:0,backgroundColor:"rgba(0, 0, 0, 0.4)"},transClass:{backgroundColor:"transparent",borderRadius:this.borderRadius||"0",position:"fixed",left:0,right:0},maskShow:!0,mkclick:!0,popupstyle:"top"}},computed:{getStyles(){let t={backgroundColor:this.bg};return this.borderRadius,t=Object.assign(t,{borderRadius:this.borderRadius}),t},isDesktop(){return this.popupWidth>=500&&this.popupHeight>=500},bg(){return""===this.backgroundColor||"none"===this.backgroundColor?"transparent":this.backgroundColor}},mounted(){(()=>{const{windowWidth:s,windowHeight:i,windowTop:o,safeArea:e,screenHeight:a,safeAreaInsets:r}=t.index.getWindowInfo();this.popupWidth=s,this.popupHeight=i+(o||0),e&&this.safeArea?this.safeAreaInsets=a-e.bottom:this.safeAreaInsets=0})()},unmounted(){this.setH5Visible()},activated(){this.setH5Visible(!this.showPopup)},deactivated(){this.setH5Visible(!0)},created(){null===this.isMaskClick&&null===this.maskClick?this.mkclick=!0:this.mkclick=null!==this.isMaskClick?this.isMaskClick:this.maskClick,this.animation?this.duration=300:this.duration=0,this.messageChild=null,this.clearPropagation=!1,this.maskClass.backgroundColor=this.maskBackgroundColor},methods:{setH5Visible(t=!0){},closeMask(){this.maskShow=!1},disableMask(){this.mkclick=!1},clear(t){t.stopPropagation(),this.clearPropagation=!0},open(t){if(this.showPopup)return;t&&-1!==["top","center","bottom","left","right","message","dialog","share"].indexOf(t)||(t=this.type),this.config[t]?(this[this.config[t]](),this.$emit("change",{show:!0,type:t})):console.error("缺少类型:",t)},close(t){this.showTrans=!1,this.$emit("change",{show:!1,type:this.type}),clearTimeout(this.timer),this.timer=setTimeout((()=>{this.showPopup=!1}),300)},touchstart(){this.clearPropagation=!1},onTap(){this.clearPropagation?this.clearPropagation=!1:(this.$emit("maskClick"),this.mkclick&&this.close())},top(t){this.popupstyle=this.isDesktop?"fixforpc-top":"top",this.ani=["slide-top"],this.transClass={position:"fixed",left:0,right:0,backgroundColor:this.bg,borderRadius:this.borderRadius||"0"},t||(this.showPopup=!0,this.showTrans=!0,this.$nextTick((()=>{this.showPoptrans(),this.messageChild&&"message"===this.type&&this.messageChild.timerClose()})))},bottom(t){this.popupstyle="bottom",this.ani=["slide-bottom"],this.transClass={position:"fixed",left:0,right:0,bottom:0,backgroundColor:this.bg,borderRadius:this.borderRadius||"0"},t||this.showPoptrans()},center(t){this.popupstyle="center",this.ani=["fade"],this.transClass={position:"fixed",display:"flex",flexDirection:"column",bottom:0,left:0,right:0,top:0,justifyContent:"center",alignItems:"center",borderRadius:this.borderRadius||"0"},t||this.showPoptrans()},left(t){this.popupstyle="left",this.ani=["slide-left"],this.transClass={position:"fixed",left:0,bottom:0,top:0,backgroundColor:this.bg,borderRadius:this.borderRadius||"0",display:"flex",flexDirection:"column"},t||this.showPoptrans()},right(t){this.popupstyle="right",this.ani=["slide-right"],this.transClass={position:"fixed",bottom:0,right:0,top:0,backgroundColor:this.bg,borderRadius:this.borderRadius||"0",display:"flex",flexDirection:"column"},t||this.showPoptrans()},showPoptrans(){this.$nextTick((()=>{this.showPopup=!0,this.showTrans=!0}))}}};if(!Array){t.resolveComponent("uni-transition")()}Math;const i=t._export_sfc(s,[["render",function(s,i,o,e,a,r){return t.e({a:a.showPopup},a.showPopup?t.e({b:a.maskShow},a.maskShow?{c:t.o(r.onTap),d:t.p({name:"mask","mode-class":"fade",styles:a.maskClass,duration:a.duration,show:a.showTrans})}:{},{e:t.s(r.getStyles),f:t.n(a.popupstyle),g:t.o(((...t)=>r.clear&&r.clear(...t))),h:t.o(r.onTap),i:t.p({"mode-class":a.ani,name:"content",styles:a.transClass,duration:a.duration,show:a.showTrans}),j:t.o(((...t)=>r.touchstart&&r.touchstart(...t))),k:t.n(a.popupstyle),l:t.n(r.isDesktop?"fixforpc-z-index":"")}):{})}]]);wx.createComponent(i);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.json
new file mode 100644
index 0000000..3a0615f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "uni-transition": "../../../uni-transition/components/uni-transition/uni-transition"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.wxml
new file mode 100644
index 0000000..696e670
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.wxss
new file mode 100644
index 0000000..6f8759d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.wxss
@@ -0,0 +1 @@
+.uni-popup{position:fixed;z-index:99}.uni-popup.top,.uni-popup.left,.uni-popup.right{top:0}.uni-popup .uni-popup__wrapper{display:block;position:relative}.uni-popup .uni-popup__wrapper.left,.uni-popup .uni-popup__wrapper.right{padding-top:0;flex:1}.fixforpc-z-index{z-index:999}.fixforpc-top{top:0}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.js
new file mode 100644
index 0000000..6cf614a
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../../common/vendor.js"),t={name:"UniRate",props:{isFill:{type:[Boolean,String],default:!0},color:{type:String,default:"#ececec"},activeColor:{type:String,default:"#ffca3e"},disabledColor:{type:String,default:"#c0c0c0"},size:{type:[Number,String],default:24},value:{type:[Number,String],default:0},modelValue:{type:[Number,String],default:0},max:{type:[Number,String],default:5},margin:{type:[Number,String],default:0},disabled:{type:[Boolean,String],default:!1},readonly:{type:[Boolean,String],default:!1},allowHalf:{type:[Boolean,String],default:!1},touchable:{type:[Boolean,String],default:!0}},data:()=>({valueSync:"",userMouseFristMove:!0,userRated:!1,userLastRate:1}),watch:{value(e){this.valueSync=Number(e)},modelValue(e){this.valueSync=Number(e)}},computed:{stars(){const e=this.valueSync?this.valueSync:0,t=[],a=Math.floor(e),i=Math.ceil(e);for(let o=0;oo?t.push({activeWitch:"100%"}):i-1===o?t.push({activeWitch:100*(e-a)+"%"}):t.push({activeWitch:"0"});return t},marginNumber(){return Number(this.margin)}},created(){this.valueSync=Number(this.value||this.modelValue),this._rateBoxLeft=0,this._oldValue=null},mounted(){setTimeout((()=>{this._getSize()}),100)},methods:{touchstart(e){if(this.readonly||this.disabled)return;const{clientX:t,screenX:a}=e.changedTouches[0];this._getRateCount(t||a)},touchmove(e){if(this.readonly||this.disabled||!this.touchable)return;const{clientX:t,screenX:a}=e.changedTouches[0];this._getRateCount(t||a)},mousedown(e){},mousemove(e){},mouseleave(e){},_getRateCount(e){this._getSize();const t=Number(this.size);if(isNaN(t))return new Error("size 属性只能设置为数字");const a=e-this._rateBoxLeft;let i=parseInt(a/(t+this.marginNumber));i=i<0?0:i,i=i>this.max?this.max:i;const o=parseInt(a-(t+this.marginNumber)*i);let s=0;(this._oldValue!==i||this.PC)&&(this._oldValue=i,s=this.allowHalf?o>t/2?i+1:i+.5:i+1,s=Math.max(.5,Math.min(s,this.max)),this.valueSync=s,this._onChange())},_onChange(){this.$emit("input",this.valueSync),this.$emit("update:modelValue",this.valueSync),this.$emit("change",{value:this.valueSync})},_getSize(){e.index.createSelectorQuery().in(this).select(".uni-rate").boundingClientRect().exec((e=>{e&&(this._rateBoxLeft=e[0].left)}))}}};if(!Array){e.resolveComponent("uni-icons")()}Math;const a=e._export_sfc(t,[["render",function(t,a,i,o,s,l){return{a:e.f(l.stars,((t,a,i)=>({a:"cad6776a-0-"+i,b:"cad6776a-1-"+i,c:t.activeWitch,d:a,e:e.o(((...e)=>l.touchstart&&l.touchstart(...e)),a),f:e.o(((...e)=>l.touchmove&&l.touchmove(...e)),a),g:e.o(((...e)=>l.mousedown&&l.mousedown(...e)),a),h:e.o(((...e)=>l.mousemove&&l.mousemove(...e)),a),i:e.o(((...e)=>l.mouseleave&&l.mouseleave(...e)),a)}))),b:e.p({color:i.color,size:i.size,type:i.isFill?"star-filled":"star"}),c:e.p({color:i.disabled?i.disabledColor:i.activeColor,size:i.size,type:"star-filled"}),d:i.disabled?1:"",e:l.marginNumber+"px"}}]]);wx.createComponent(a);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.json
new file mode 100644
index 0000000..1e21d00
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "uni-icons": "../../../uni-icons/components/uni-icons/uni-icons"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.wxml
new file mode 100644
index 0000000..7aa08dd
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.wxss
new file mode 100644
index 0000000..ed23c2d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.wxss
@@ -0,0 +1 @@
+.uni-rate{display:flex;line-height:1;font-size:0;flex-direction:row}.uni-rate__icon{position:relative;line-height:1;font-size:0}.uni-rate__icon-on{overflow:hidden;position:absolute;top:0;left:0;line-height:1;text-align:left}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
new file mode 100644
index 0000000..5e3342d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
@@ -0,0 +1 @@
+"use strict";const e={en:{"uni-search-bar.cancel":"cancel","uni-search-bar.placeholder":"Search enter content"},"zh-Hans":{"uni-search-bar.cancel":"取消","uni-search-bar.placeholder":"请输入搜索内容"},"zh-Hant":{"uni-search-bar.cancel":"取消","uni-search-bar.placeholder":"請輸入搜索內容"}};exports.messages=e;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js
new file mode 100644
index 0000000..8eb7500
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../../common/vendor.js"),t=require("./i18n/index.js"),{t:a}=e.initVueI18n(t.messages),l={name:"UniSearchBar",emits:["input","update:modelValue","clear","cancel","confirm","blur","focus"],props:{placeholder:{type:String,default:""},radius:{type:[Number,String],default:5},clearButton:{type:String,default:"auto"},cancelButton:{type:String,default:"auto"},cancelText:{type:String,default:""},bgColor:{type:String,default:"#F8F8F8"},textColor:{type:String,default:"#000000"},maxlength:{type:[Number,String],default:100},value:{type:[Number,String],default:""},modelValue:{type:[Number,String],default:""},focus:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},data:()=>({show:!1,showSync:!1,searchVal:""}),computed:{cancelTextI18n(){return this.cancelText||a("uni-search-bar.cancel")},placeholderText(){return this.placeholder||a("uni-search-bar.placeholder")}},watch:{modelValue:{immediate:!0,handler(e){this.searchVal=e,e&&(this.show=!0)}},focus:{immediate:!0,handler(e){if(e){if(this.readonly)return;this.show=!0,this.$nextTick((()=>{this.showSync=!0}))}}},searchVal(e,t){this.$emit("input",e),this.$emit("update:modelValue",e)}},methods:{searchClick(){this.readonly||this.show||(this.show=!0,this.$nextTick((()=>{this.showSync=!0})))},clear(){this.searchVal="",this.$nextTick((()=>{this.$emit("clear",{value:""})}))},cancel(){this.readonly||(this.$emit("cancel",{value:this.searchVal}),this.searchVal="",this.show=!1,this.showSync=!1,e.index.hideKeyboard())},confirm(){e.index.hideKeyboard(),this.$emit("confirm",{value:this.searchVal})},blur(){e.index.hideKeyboard(),this.$emit("blur",{value:this.searchVal})},emitFocus(e){this.$emit("focus",e.detail)}}};if(!Array){e.resolveComponent("uni-icons")()}Math;const c=e._export_sfc(l,[["render",function(t,a,l,c,r,o){return e.e({a:e.p({color:"#c0c4cc",size:"18",type:"search"}),b:r.show||r.searchVal},r.show||r.searchVal?{c:r.showSync,d:l.readonly,e:o.placeholderText,f:l.maxlength,g:l.textColor,h:e.o(((...e)=>o.confirm&&o.confirm(...e))),i:e.o(((...e)=>o.blur&&o.blur(...e))),j:e.o(((...e)=>o.emitFocus&&o.emitFocus(...e))),k:r.searchVal,l:e.o((e=>r.searchVal=e.detail.value))}:{m:e.t(l.placeholder)},{n:r.show&&("always"===l.clearButton||"auto"===l.clearButton&&""!==r.searchVal)&&!l.readonly},r.show&&("always"===l.clearButton||"auto"===l.clearButton&&""!==r.searchVal)&&!l.readonly?{o:e.p({color:"#c0c4cc",size:"20",type:"clear"}),p:e.o(((...e)=>o.clear&&o.clear(...e)))}:{},{q:l.radius+"px",r:l.bgColor,s:e.o(((...e)=>o.searchClick&&o.searchClick(...e))),t:"always"===l.cancelButton||r.show&&"auto"===l.cancelButton},"always"===l.cancelButton||r.show&&"auto"===l.cancelButton?{v:e.t(o.cancelTextI18n),w:e.o(((...e)=>o.cancel&&o.cancel(...e)))}:{})}]]);wx.createComponent(c);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.json
new file mode 100644
index 0000000..1e21d00
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "uni-icons": "../../../uni-icons/components/uni-icons/uni-icons"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxml
new file mode 100644
index 0000000..45b96b1
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxml
@@ -0,0 +1 @@
+{{m}}{{v}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxss
new file mode 100644
index 0000000..032ba52
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxss
@@ -0,0 +1 @@
+.uni-searchbar{display:flex;flex-direction:row;position:relative;padding:10px}.uni-searchbar__box{display:flex;box-sizing:border-box;justify-content:left;overflow:hidden;position:relative;flex:1;flex-direction:row;align-items:center;height:36px;padding:5px 8px 5px 0}.uni-searchbar__box-icon-search{display:flex;flex-direction:row;padding:0 8px;justify-content:center;align-items:center;color:#b3b3b3}.uni-searchbar__box-search-input{flex:1;font-size:14px;color:#333;margin-left:5px;margin-top:1px;background-color:inherit}.uni-searchbar__box-icon-clear{align-items:center;line-height:24px;padding-left:8px}.uni-searchbar__text-placeholder{font-size:14px;color:#b3b3b3;margin-left:5px;text-align:left}.uni-searchbar__cancel{padding-left:10px;line-height:36px;font-size:14px;color:#333}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.js
new file mode 100644
index 0000000..2270fa0
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../../../common/vendor.js"),e={name:"UniTag",emits:["click"],props:{type:{type:String,default:"default"},size:{type:String,default:"normal"},text:{type:String,default:""},disabled:{type:[Boolean,String],default:!1},inverted:{type:[Boolean,String],default:!1},circle:{type:[Boolean,String],default:!1},mark:{type:[Boolean,String],default:!1},customStyle:{type:String,default:""}},computed:{classes(){const{type:t,disabled:e,inverted:i,circle:n,mark:a,size:r,isTrue:s}=this;return["uni-tag--"+t,"uni-tag--"+r,s(e)?"uni-tag--disabled":"",s(i)?"uni-tag--"+t+"--inverted":"",s(n)?"uni-tag--circle":"",s(a)?"uni-tag--mark":"",s(i)?"uni-tag--inverted uni-tag-text--"+t:"","small"===r?"uni-tag-text--small":""].join(" ")}},methods:{isTrue:t=>!0===t||"true"===t,onClick(){this.isTrue(this.disabled)||this.$emit("click")}}};const i=t._export_sfc(e,[["render",function(e,i,n,a,r,s){return t.e({a:n.text},n.text?{b:t.t(n.text),c:t.n(s.classes),d:t.s(n.customStyle),e:t.o(((...t)=>s.onClick&&s.onClick(...t)))}:{})}],["__scopeId","data-v-c3d81dd8"]]);wx.createComponent(i);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.wxml
new file mode 100644
index 0000000..8d34333
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.wxml
@@ -0,0 +1 @@
+{{b}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.wxss
new file mode 100644
index 0000000..961f225
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.wxss
@@ -0,0 +1 @@
+.uni-tag.data-v-c3d81dd8{line-height:14px;font-size:12px;font-weight:200;padding:4px 7px;color:#fff;border-radius:3px;background-color:#8f939c;border-width:1px;border-style:solid;border-color:#8f939c}.uni-tag--default.data-v-c3d81dd8{font-size:12px}.uni-tag--default--inverted.data-v-c3d81dd8{color:#8f939c;border-color:#8f939c}.uni-tag--small.data-v-c3d81dd8{padding:2px 5px;font-size:12px;border-radius:2px}.uni-tag--mini.data-v-c3d81dd8{padding:1px 3px;font-size:12px;border-radius:2px}.uni-tag--primary.data-v-c3d81dd8{background-color:#2979ff;border-color:#2979ff;color:#fff}.uni-tag--success.data-v-c3d81dd8{color:#fff;background-color:#18bc37;border-color:#18bc37}.uni-tag--warning.data-v-c3d81dd8{color:#fff;background-color:#f3a73f;border-color:#f3a73f}.uni-tag--error.data-v-c3d81dd8{color:#fff;background-color:#e43d33;border-color:#e43d33}.uni-tag--primary--inverted.data-v-c3d81dd8{color:#2979ff;border-color:#2979ff}.uni-tag--success--inverted.data-v-c3d81dd8{color:#18bc37;border-color:#18bc37}.uni-tag--warning--inverted.data-v-c3d81dd8{color:#f3a73f;border-color:#f3a73f}.uni-tag--error--inverted.data-v-c3d81dd8{color:#e43d33;border-color:#e43d33}.uni-tag--inverted.data-v-c3d81dd8{background-color:#fff}.uni-tag--circle.data-v-c3d81dd8{border-radius:15px}.uni-tag--mark.data-v-c3d81dd8{border-radius:0 15px 15px 0}.uni-tag--disabled.data-v-c3d81dd8{opacity:.5}.uni-tag-text.data-v-c3d81dd8{color:#fff;font-size:14px}.uni-tag-text--primary.data-v-c3d81dd8{color:#2979ff}.uni-tag-text--success.data-v-c3d81dd8{color:#18bc37}.uni-tag-text--warning.data-v-c3d81dd8{color:#f3a73f}.uni-tag-text--error.data-v-c3d81dd8{color:#e43d33}.uni-tag-text--small.data-v-c3d81dd8{font-size:12px}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/createAnimation.js
new file mode 100644
index 0000000..affdd6a
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/createAnimation.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../../../common/vendor.js");class e{constructor(e,i){this.options=e,this.animation=t.index.createAnimation({...e}),this.currentStepAnimates={},this.next=0,this.$=i}_nvuePushAnimates(t,e){let n=this.currentStepAnimates[this.next],s={};if(s=n||{styles:{},config:{}},i.includes(t)){s.styles.transform||(s.styles.transform="");let i="";"rotate"===t&&(i="deg"),s.styles.transform+=`${t}(${e+i}) `}else s.styles[t]=`${e}`;this.currentStepAnimates[this.next]=s}_animateRun(t={},e={}){let i=this.$.$refs.ani.ref;if(i)return new Promise(((n,s)=>{nvueAnimation.transition(i,{styles:t,...e},(t=>{n()}))}))}_nvueNextAnimate(t,e=0,i){let n=t[e];if(n){let{styles:s,config:a}=n;this._animateRun(s,a).then((()=>{e+=1,this._nvueNextAnimate(t,e,i)}))}else this.currentStepAnimates={},"function"==typeof i&&i(),this.isEnd=!0}step(t={}){return this.animation.step(t),this}run(t){this.$.animationData=this.animation.export(),this.$.timer=setTimeout((()=>{"function"==typeof t&&t()}),this.$.durationTime)}}const i=["matrix","matrix3d","rotate","rotate3d","rotateX","rotateY","rotateZ","scale","scale3d","scaleX","scaleY","scaleZ","skew","skewX","skewY","translate","translate3d","translateX","translateY","translateZ"];i.concat(["opacity","backgroundColor"],["width","height","left","right","top","bottom"]).forEach((t=>{e.prototype[t]=function(...e){return this.animation[t](...e),this}})),exports.createAnimation=function(t,i){if(i)return clearTimeout(i.timer),new e(t,i)};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js
new file mode 100644
index 0000000..bafc826
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js
@@ -0,0 +1 @@
+"use strict";const t=require("./createAnimation.js"),i=require("../../../../common/vendor.js"),s={name:"uniTransition",emits:["click","change"],props:{show:{type:Boolean,default:!1},modeClass:{type:[Array,String],default:()=>"fade"},duration:{type:Number,default:300},styles:{type:Object,default:()=>({})},customClass:{type:String,default:""},onceRender:{type:Boolean,default:!1}},data:()=>({isShow:!1,transform:"",opacity:0,animationData:{},durationTime:300,config:{}}),watch:{show:{handler(t){t?this.open():this.isShow&&this.close()},immediate:!0}},computed:{stylesObject(){let t={...this.styles,"transition-duration":this.duration/1e3+"s"},i="";for(let s in t){i+=this.toLine(s)+":"+t[s]+";"}return i},transformStyles(){return"transform:"+this.transform+";opacity:"+this.opacity+";"+this.stylesObject}},created(){this.config={duration:this.duration,timingFunction:"ease",transformOrigin:"50% 50%",delay:0},this.durationTime=this.duration},methods:{init(i={}){i.duration&&(this.durationTime=i.duration),this.animation=t.createAnimation(Object.assign(this.config,i),this)},onClick(){this.$emit("click",{detail:this.isShow})},step(t,i={}){return this.animation?(Object.keys(t).forEach((i=>{const s=t[i];"function"==typeof this.animation[i]&&(Array.isArray(s)?this.animation[i](...s):this.animation[i](s))})),this.animation.step(i),this):this},run(t){this.animation&&this.animation.run(t)},open(){clearTimeout(this.timer),this.isShow=!0,this.transform=this.styleInit(!1).transform||"",this.opacity=this.styleInit(!1).opacity||0,this.$nextTick((()=>{this.timer=setTimeout((()=>{this.animation=t.createAnimation(this.config,this),this.tranfromInit(!1).step(),this.animation.run((()=>{this.transform="",this.opacity=this.styleInit(!1).opacity||1,this.$emit("change",{detail:this.isShow})}))}),80)}))},close(t){this.animation&&this.tranfromInit(!0).step().run((()=>{this.isShow=!1,this.animationData=null,this.animation=null;let{opacity:t,transform:i}=this.styleInit(!1);this.opacity=t||1,this.transform=i,this.$emit("change",{detail:this.isShow})}))},styleInit(t){let i={transform:"",opacity:1};const s=(t,s)=>{const a=this.animationType(t)[s];s.startsWith("fade")?i.opacity=a:i.transform+=a+" "};return"string"==typeof this.modeClass?s(t,this.modeClass):this.modeClass.forEach((i=>s(t,i))),i},tranfromInit(t){let i=(t,i)=>{let s=null;"fade"===i?s=t?0:1:(s=t?"-100%":"0","zoom-in"===i&&(s=t?.8:1),"zoom-out"===i&&(s=t?1.2:1),"slide-right"===i&&(s=t?"100%":"0"),"slide-bottom"===i&&(s=t?"100%":"0")),this.animation[this.animationMode()[i]](s)};return"string"==typeof this.modeClass?i(t,this.modeClass):this.modeClass.forEach((s=>{i(t,s)})),this.animation},animationType:t=>({fade:t?1:0,"slide-top":`translateY(${t?"0":"-100%"})`,"slide-right":`translateX(${t?"0":"100%"})`,"slide-bottom":`translateY(${t?"0":"100%"})`,"slide-left":`translateX(${t?"0":"-100%"})`,"zoom-in":`scaleX(${t?1:.8}) scaleY(${t?1:.8})`,"zoom-out":`scaleX(${t?1:1.2}) scaleY(${t?1:1.2})`}),animationMode:()=>({fade:"opacity","slide-top":"translateY","slide-right":"translateX","slide-bottom":"translateY","slide-left":"translateX","zoom-in":"scale","zoom-out":"scale"}),toLine:t=>t.replace(/([A-Z])/g,"-$1").toLowerCase()}};const a=i._export_sfc(s,[["render",function(t,s,a,n,e,o){return{a:e.isShow,b:e.animationData,c:i.n(a.customClass),d:i.s(o.transformStyles),e:i.o(((...t)=>o.onClick&&o.onClick(...t)))}}]]);wx.createComponent(a);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.json b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.wxml
new file mode 100644
index 0000000..8fa2f75
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.wxml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/props.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/props.js
new file mode 100644
index 0000000..a90a131
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/props.js
@@ -0,0 +1 @@
+"use strict";var t,e;const r=require("../../../../common/vendor.js"),i={props:{icon:{type:String,default:""},text:{type:String,default:""},textColor:{type:String,default:"#c0c4cc"},textSize:{type:[String,Number],default:14},iconColor:{type:String,default:"#c0c4cc"},iconSize:{type:[String,Number],default:90},mode:{type:String,default:"data"},width:{type:[String,Number],default:160},height:{type:[String,Number],default:160},show:{type:Boolean,default:!0},marginTop:{type:[String,Number],default:0},...null==(e=null==(t=r.index.$uv)?void 0:t.props)?void 0:e.empty}};exports.props=i;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.js
new file mode 100644
index 0000000..dfee410
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../uv-ui-tools/libs/mixin/mpMixin.js"),i=require("../../../uv-ui-tools/libs/mixin/mixin.js"),t=require("./props.js"),o=require("../../../../common/vendor.js"),s={name:"uv-empty",mixins:[e.mpMixin,i.mixin,t.props],data:()=>({icons:{car:"购物车为空",page:"页面不存在",search:"没有搜索结果",address:"没有收货地址","wifi-off":"没有WiFi",order:"订单为空",coupon:"没有优惠券",favor:"暂无收藏",permission:"无权限",history:"无历史记录",news:"无新闻列表",message:"消息列表为空",list:"列表为空",data:"数据为空",comment:"暂无评论"}}),computed:{emptyStyle(){const e={};return e.marginTop=this.$uv.addUnit(this.marginTop),this.$uv.deepMerge(e,this.$uv.addStyle(this.customStyle))},textStyle(){const e={};return e.color=this.textColor,e.fontSize=this.$uv.addUnit(this.textSize),e},isImg(){const e=this.icon.indexOf("data:")>-1&&this.icon.indexOf("base64")>-1;return-1!==this.icon.indexOf("/")||e}}};if(!Array){o.resolveComponent("uv-icon")()}Math;const n=o._export_sfc(s,[["render",function(e,i,t,s,n,r){return o.e({a:e.show},e.show?o.e({b:!r.isImg},r.isImg?{d:e.$uv.addUnit(e.width),e:e.$uv.addUnit(e.height),f:e.icon}:{c:o.p({name:"message"===e.mode?"chat":`empty-${e.mode}`,size:e.iconSize,color:e.iconColor,"margin-top":"14"})},{g:o.t(e.text?e.text:n.icons[e.mode]),h:o.s(r.textStyle),i:o.s(r.emptyStyle)}):{})}],["__scopeId","data-v-9f4b14de"]]);wx.createComponent(n);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.json b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.json
new file mode 100644
index 0000000..30c0350
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "uv-icon": "../../../uv-icon/components/uv-icon/uv-icon"
+ }
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.wxml
new file mode 100644
index 0000000..bed8b4d
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.wxml
@@ -0,0 +1 @@
+{{g}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.wxss
new file mode 100644
index 0000000..69a1205
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.wxss
@@ -0,0 +1 @@
+view.data-v-9f4b14de,scroll-view.data-v-9f4b14de,swiper-item.data-v-9f4b14de{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}.uv-empty.data-v-9f4b14de{display:flex;flex-direction:row;flex-direction:column;justify-content:center;align-items:center}.uv-empty__text.data-v-9f4b14de,.uv-slot-wrap.data-v-9f4b14de{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-top:20rpx}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/icons.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/icons.js
new file mode 100644
index 0000000..3a78fdc
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/icons.js
@@ -0,0 +1 @@
+"use strict";exports.icons={"uvicon-level":"e68f","uvicon-checkbox-mark":"e659","uvicon-folder":"e694","uvicon-movie":"e67c","uvicon-star-fill":"e61e","uvicon-star":"e618","uvicon-phone-fill":"e6ac","uvicon-phone":"e6ba","uvicon-apple-fill":"e635","uvicon-backspace":"e64d","uvicon-attach":"e640","uvicon-empty-data":"e671","uvicon-empty-address":"e68a","uvicon-empty-favor":"e662","uvicon-empty-car":"e657","uvicon-empty-order":"e66b","uvicon-empty-list":"e672","uvicon-empty-search":"e677","uvicon-empty-permission":"e67d","uvicon-empty-news":"e67e","uvicon-empty-history":"e685","uvicon-empty-coupon":"e69b","uvicon-empty-page":"e60e","uvicon-empty-wifi-off":"e6cc","uvicon-reload":"e627","uvicon-order":"e695","uvicon-server-man":"e601","uvicon-search":"e632","uvicon-more-dot-fill":"e66f","uvicon-scan":"e631","uvicon-map":"e665","uvicon-map-fill":"e6a8","uvicon-tags":"e621","uvicon-tags-fill":"e613","uvicon-eye":"e664","uvicon-eye-fill":"e697","uvicon-eye-off":"e69c","uvicon-eye-off-outline":"e688","uvicon-mic":"e66d","uvicon-mic-off":"e691","uvicon-calendar":"e65c","uvicon-trash":"e623","uvicon-trash-fill":"e6ce","uvicon-play-left":"e6bf","uvicon-play-right":"e6b3","uvicon-minus":"e614","uvicon-plus":"e625","uvicon-info-circle":"e69f","uvicon-info-circle-fill":"e6a7","uvicon-question-circle":"e622","uvicon-question-circle-fill":"e6bc","uvicon-close":"e65a","uvicon-checkmark":"e64a","uvicon-checkmark-circle":"e643","uvicon-checkmark-circle-fill":"e668","uvicon-setting":"e602","uvicon-setting-fill":"e6d0","uvicon-heart":"e6a2","uvicon-heart-fill":"e68b","uvicon-camera":"e642","uvicon-camera-fill":"e650","uvicon-more-circle":"e69e","uvicon-more-circle-fill":"e684","uvicon-chat":"e656","uvicon-chat-fill":"e63f","uvicon-bag":"e647","uvicon-error-circle":"e66e","uvicon-error-circle-fill":"e655","uvicon-close-circle":"e64e","uvicon-close-circle-fill":"e666","uvicon-share":"e629","uvicon-share-fill":"e6bb","uvicon-share-square":"e6c4","uvicon-shopping-cart":"e6cb","uvicon-shopping-cart-fill":"e630","uvicon-bell":"e651","uvicon-bell-fill":"e604","uvicon-list":"e690","uvicon-list-dot":"e6a9","uvicon-zhifubao-circle-fill":"e617","uvicon-weixin-circle-fill":"e6cd","uvicon-weixin-fill":"e620","uvicon-qq-fill":"e608","uvicon-qq-circle-fill":"e6b9","uvicon-moments-circel-fill":"e6c2","uvicon-moments":"e6a0","uvicon-car":"e64f","uvicon-car-fill":"e648","uvicon-warning-fill":"e6c7","uvicon-warning":"e6c1","uvicon-clock-fill":"e64b","uvicon-clock":"e66c","uvicon-edit-pen":"e65d","uvicon-edit-pen-fill":"e679","uvicon-email":"e673","uvicon-email-fill":"e683","uvicon-minus-circle":"e6a5","uvicon-plus-circle":"e603","uvicon-plus-circle-fill":"e611","uvicon-file-text":"e687","uvicon-file-text-fill":"e67f","uvicon-pushpin":"e6d1","uvicon-pushpin-fill":"e6b6","uvicon-grid":"e68c","uvicon-grid-fill":"e698","uvicon-play-circle":"e6af","uvicon-play-circle-fill":"e62a","uvicon-pause-circle-fill":"e60c","uvicon-pause":"e61c","uvicon-pause-circle":"e696","uvicon-gift-fill":"e6b0","uvicon-gift":"e680","uvicon-kefu-ermai":"e660","uvicon-server-fill":"e610","uvicon-coupon-fill":"e64c","uvicon-coupon":"e65f","uvicon-integral":"e693","uvicon-integral-fill":"e6b1","uvicon-home-fill":"e68e","uvicon-home":"e67b","uvicon-account":"e63a","uvicon-account-fill":"e653","uvicon-thumb-down-fill":"e628","uvicon-thumb-down":"e60a","uvicon-thumb-up":"e612","uvicon-thumb-up-fill":"e62c","uvicon-lock-fill":"e6a6","uvicon-lock-open":"e68d","uvicon-lock-opened-fill":"e6a1","uvicon-lock":"e69d","uvicon-red-packet":"e6c3","uvicon-photo-fill":"e6b4","uvicon-photo":"e60d","uvicon-volume-off-fill":"e6c8","uvicon-volume-off":"e6bd","uvicon-volume-fill":"e624","uvicon-volume":"e605","uvicon-download":"e670","uvicon-arrow-up-fill":"e636","uvicon-arrow-down-fill":"e638","uvicon-play-left-fill":"e6ae","uvicon-play-right-fill":"e6ad","uvicon-arrow-downward":"e634","uvicon-arrow-leftward":"e63b","uvicon-arrow-rightward":"e644","uvicon-arrow-upward":"e641","uvicon-arrow-down":"e63e","uvicon-arrow-right":"e63c","uvicon-arrow-left":"e646","uvicon-arrow-up":"e633","uvicon-skip-back-left":"e6c5","uvicon-skip-forward-right":"e61f","uvicon-arrow-left-double":"e637","uvicon-man":"e675","uvicon-woman":"e626","uvicon-en":"e6b8","uvicon-twitte":"e607","uvicon-twitter-circle-fill":"e6cf"};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/props.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/props.js
new file mode 100644
index 0000000..40a6191
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/props.js
@@ -0,0 +1 @@
+"use strict";var e,t;const l=require("../../../../common/vendor.js"),r={props:{name:{type:String,default:""},color:{type:String,default:"#606266"},size:{type:[String,Number],default:"16px"},bold:{type:Boolean,default:!1},index:{type:[String,Number],default:null},hoverClass:{type:String,default:""},customPrefix:{type:String,default:"uvicon"},label:{type:[String,Number],default:""},labelPos:{type:String,default:"right"},labelSize:{type:[String,Number],default:"15px"},labelColor:{type:String,default:"#606266"},space:{type:[String,Number],default:"3px"},imgMode:{type:String,default:"aspectFit"},width:{type:[String,Number],default:""},height:{type:[String,Number],default:""},top:{type:[String,Number],default:0},stop:{type:Boolean,default:!1},...null==(t=null==(e=l.index.$uv)?void 0:e.props)?void 0:t.icon}};exports.props=r;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.js
new file mode 100644
index 0000000..ab6dc8e
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.js
@@ -0,0 +1 @@
+"use strict";const i=require("../../../uv-ui-tools/libs/mixin/mpMixin.js"),t=require("../../../uv-ui-tools/libs/mixin/mixin.js"),s=require("./icons.js"),e=require("./props.js"),o=require("../../../../common/vendor.js"),n={name:"uv-icon",emits:["click"],mixins:[i.mpMixin,t.mixin,e.props],data:()=>({colorType:["primary","success","info","error","warning"]}),computed:{uClasses(){let i=[];return i.push(this.customPrefix),i.push(this.customPrefix+"-"+this.name),this.color&&this.colorType.includes(this.color)&&i.push("uv-icon__icon--"+this.color),i},iconStyle(){let i={};return i={fontSize:this.$uv.addUnit(this.size),lineHeight:this.$uv.addUnit(this.size),fontWeight:this.bold?"bold":"normal",top:this.$uv.addUnit(this.top)},this.color&&!this.colorType.includes(this.color)&&(i.color=this.color),i},isImg(){const i=this.name.indexOf("data:")>-1&&this.name.indexOf("base64")>-1;return-1!==this.name.indexOf("/")||i},imgStyle(){let i={};return i.width=this.width?this.$uv.addUnit(this.width):this.$uv.addUnit(this.size),i.height=this.height?this.$uv.addUnit(this.height):this.$uv.addUnit(this.size),i},icon(){const i=s.icons["uvicon-"+this.name];return i?unescape(`%u${i}`):["uvicon"].indexOf(this.customPrefix)>-1?this.name:""}},methods:{clickHandler(i){this.$emit("click",this.index),this.stop&&this.preventEvent(i)}}};const l=o._export_sfc(n,[["render",function(i,t,s,e,n,l){return o.e({a:l.isImg},l.isImg?{b:i.name,c:i.imgMode,d:o.s(l.imgStyle),e:o.s(i.$uv.addStyle(i.customStyle))}:{f:o.t(l.icon),g:o.n(l.uClasses),h:o.s(l.iconStyle),i:o.s(i.$uv.addStyle(i.customStyle)),j:i.hoverClass},{k:""!==i.label},""!==i.label?{l:o.t(i.label),m:i.labelColor,n:i.$uv.addUnit(i.labelSize),o:"right"==i.labelPos?i.$uv.addUnit(i.space):0,p:"bottom"==i.labelPos?i.$uv.addUnit(i.space):0,q:"left"==i.labelPos?i.$uv.addUnit(i.space):0,r:"top"==i.labelPos?i.$uv.addUnit(i.space):0}:{},{s:o.o(((...i)=>l.clickHandler&&l.clickHandler(...i))),t:o.n("uv-icon--"+i.labelPos)})}],["__scopeId","data-v-eab170a5"]]);wx.createComponent(l);
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.json b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.wxml b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.wxml
new file mode 100644
index 0000000..fdc158f
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.wxml
@@ -0,0 +1 @@
+{{f}}{{l}}
\ No newline at end of file
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.wxss b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.wxss
new file mode 100644
index 0000000..df76620
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.wxss
@@ -0,0 +1 @@
+view.data-v-eab170a5,scroll-view.data-v-eab170a5,swiper-item.data-v-eab170a5{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}@font-face{font-family:uvicon-iconfont;src:url(data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI8FkmhAAABjAAAAGBjbWFw/gIDDAAABGAAAAsyZ2x5ZsYt8OIAABDQAAB/OGhlYWQk1QWSAAAA4AAAADZoaGVhB94EHgAAALwAAAAkaG10eHQAAAAAAAHsAAACdGxvY2FyP5AoAAAPlAAAATxtYXhwAcMBjQAAARgAAAAgbmFtZWHoas4AAJAIAAACu3Bvc3SaLU2qAACSxAAACAoAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAJ0AAQAAAAEAAPsGWphfDzz1AAsEAAAAAADg2uDLAAAAAODa4MsAAP+7BAADRAAAAAgAAgAAAAAAAAABAAAAnQGBABwAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQEAAGQAAUAAAKJAswAAACPAokCzAAAAesAMgEIAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOYB5tEDgP+AAAAD3ACAAAAAAQAAAAAAAAAAAAAAAAACBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAUAAAADAAAALAAAAAQAAAPSAAEAAAAAAswAAwABAAAALAADAAoAAAPSAAQCoAAAAFYAQAAFABbmBeYI5grmDuYU5hjmHOYq5izmNuY45jzmROZI5lHmU+ZX5lrmXeZg5mLmZuZo5nPmdeZ35nnmgOaF5ojmkeaY5qLmqeax5rTmtua95r/mxebI5tH//wAA5gHmB+YK5gzmEOYX5hzmHuYs5jDmOOY65j7mRuZK5lPmVeZZ5lzmX+Zi5mTmaOZr5nXmd+Z55nvmg+aH5ormk+ab5qXmrOaz5rbmuea/5sHmx+bL//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBWAF4AYABgAGQAbABuAG4AhgCGAJIAkgCWAKIApgC0ALQAuAC6ALwAvgC+AMIAwgDSANIA0gDSANwA4ADiAPAA+gEIARABGgEcARwBJAEkASwBLgAAAB8AFQAWABcAGAAZABoAGwAcAB0AHgAPABAAEQASABMAFAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4AmwCcAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgB/AIAAgQCCAIMAhACFAIYAhwCIAIkAigCLAIwAjQCOAI8AkACRAJIAkwCUAJUAlgCXAJgAmQCaACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAdgAAAAAAAAAJwAAOYBAADmAQAAAB8AAOYCAADmAgAAABUAAOYDAADmAwAAABYAAOYEAADmBAAAABcAAOYFAADmBQAAABgAAOYHAADmBwAAABkAAOYIAADmCAAAABoAAOYKAADmCgAAABsAAOYMAADmDAAAABwAAOYNAADmDQAAAB0AAOYOAADmDgAAAB4AAOYQAADmEAAAAA8AAOYRAADmEQAAABAAAOYSAADmEgAAABEAAOYTAADmEwAAABIAAOYUAADmFAAAABMAAOYXAADmFwAAABQAAOYYAADmGAAAAAEAAOYcAADmHAAAAAIAAOYeAADmHgAAAAMAAOYfAADmHwAAAAQAAOYgAADmIAAAAAUAAOYhAADmIQAAAAYAAOYiAADmIgAAAAcAAOYjAADmIwAAAAgAAOYkAADmJAAAAAkAAOYlAADmJQAAAAoAAOYmAADmJgAAAAsAAOYnAADmJwAAAAwAAOYoAADmKAAAAA0AAOYpAADmKQAAAA4AAOYqAADmKgAAAJsAAOYsAADmLAAAAJwAAOYwAADmMAAAAFAAAOYxAADmMQAAAFEAAOYyAADmMgAAAFIAAOYzAADmMwAAAFMAAOY0AADmNAAAAFQAAOY1AADmNQAAAFUAAOY2AADmNgAAAFYAAOY4AADmOAAAAFcAAOY6AADmOgAAAFgAAOY7AADmOwAAAFkAAOY8AADmPAAAAFoAAOY+AADmPgAAAFsAAOY/AADmPwAAAFwAAOZAAADmQAAAAF0AAOZBAADmQQAAAF4AAOZCAADmQgAAAF8AAOZDAADmQwAAAGAAAOZEAADmRAAAAGEAAOZGAADmRgAAAGIAAOZHAADmRwAAAGMAAOZIAADmSAAAAGQAAOZKAADmSgAAAGUAAOZLAADmSwAAAGYAAOZMAADmTAAAAGcAAOZNAADmTQAAAGgAAOZOAADmTgAAAGkAAOZPAADmTwAAAGoAAOZQAADmUAAAAGsAAOZRAADmUQAAAGwAAOZTAADmUwAAAG0AAOZVAADmVQAAAG4AAOZWAADmVgAAAG8AAOZXAADmVwAAAHAAAOZZAADmWQAAAHEAAOZaAADmWgAAAHIAAOZcAADmXAAAAHMAAOZdAADmXQAAAHQAAOZfAADmXwAAAHUAAOZgAADmYAAAAHYAAOZiAADmYgAAAHcAAOZkAADmZAAAAHgAAOZlAADmZQAAAHkAAOZmAADmZgAAAHoAAOZoAADmaAAAAHsAAOZrAADmawAAAHwAAOZsAADmbAAAAH0AAOZtAADmbQAAAH4AAOZuAADmbgAAAH8AAOZvAADmbwAAAIAAAOZwAADmcAAAAIEAAOZxAADmcQAAAIIAAOZyAADmcgAAAIMAAOZzAADmcwAAAIQAAOZ1AADmdQAAAIUAAOZ3AADmdwAAAIYAAOZ5AADmeQAAAIcAAOZ7AADmewAAAIgAAOZ8AADmfAAAAIkAAOZ9AADmfQAAAIoAAOZ+AADmfgAAAIsAAOZ/AADmfwAAAIwAAOaAAADmgAAAAI0AAOaDAADmgwAAAI4AAOaEAADmhAAAAI8AAOaFAADmhQAAAJAAAOaHAADmhwAAAJEAAOaIAADmiAAAAJIAAOaKAADmigAAAJMAAOaLAADmiwAAAJQAAOaMAADmjAAAAJUAAOaNAADmjQAAAJYAAOaOAADmjgAAAJcAAOaPAADmjwAAAJgAAOaQAADmkAAAAJkAAOaRAADmkQAAAJoAAOaTAADmkwAAACAAAOaUAADmlAAAACEAAOaVAADmlQAAACIAAOaWAADmlgAAACMAAOaXAADmlwAAACQAAOaYAADmmAAAACUAAOabAADmmwAAACYAAOacAADmnAAAACcAAOadAADmnQAAACgAAOaeAADmngAAACkAAOafAADmnwAAACoAAOagAADmoAAAACsAAOahAADmoQAAACwAAOaiAADmogAAAC0AAOalAADmpQAAAC4AAOamAADmpgAAAC8AAOanAADmpwAAADAAAOaoAADmqAAAADEAAOapAADmqQAAADIAAOasAADmrAAAADMAAOatAADmrQAAADQAAOauAADmrgAAADUAAOavAADmrwAAADYAAOawAADmsAAAADcAAOaxAADmsQAAADgAAOazAADmswAAADkAAOa0AADmtAAAADoAAOa2AADmtgAAADsAAOa5AADmuQAAADwAAOa6AADmugAAAD0AAOa7AADmuwAAAD4AAOa8AADmvAAAAD8AAOa9AADmvQAAAEAAAOa/AADmvwAAAEEAAObBAADmwQAAAEIAAObCAADmwgAAAEMAAObDAADmwwAAAEQAAObEAADmxAAAAEUAAObFAADmxQAAAEYAAObHAADmxwAAAEcAAObIAADmyAAAAEgAAObLAADmywAAAEkAAObMAADmzAAAAEoAAObNAADmzQAAAEsAAObOAADmzgAAAEwAAObPAADmzwAAAE0AAObQAADm0AAAAE4AAObRAADm0QAAAE8AAAAAAAAAaACcANgBXAHWAioDMgOiBCQETgSgBP4FOAXkBkQGqgcIB0gHYAfiCOAJMglqCdYKJAqACtoLPguqDDgMsg0EDTANtA4GDkgPrBB0EOIRQhGYEeQSNhKEEtYTFBOCE7oT/hRmFKoUzhT0FUYV7hYuFm4WtBbyF2AX7BhSGLoZRhmGGeAafhsWG2wb7hwwHLYdJB3WHmIewh8uH8AgEiBsIPAhMiFWIYoh0CH0IhoibiKkIsoi8CNKI7Qj6iRaJKQk2CT+JagmMCZUJowm7CdMJ6QoRijMKTApWCmSKhIq6CsOK0QrwCvuLXQt8DAUMGQwujD+MTQyCjJSMqgzBjM2M3I0BjRgNKI09DV8NZo2CjZGNqg3ljgEOKo43jkgOcY6QDrSO4A77j08PaI95j4yPnQ+9D9eP5wAAgAA//8DlAMEACsAQAAAAS4BJyYvAiYnJgYPAgYHBhQfAQcGFxYXFjMyPwE2HwEWOwE2NzYvATc2BwYfAScmDwE3Ni8BNzY/ARceAR8BA5MBBwYNEtlgCw0SJgph2BIKDg6eJgMJCRUHBw0LshERsgwMCBINDAQlnQ7dFAYjuxERvCQDEZHKGQ1YWgcUC8oBxwsSCRAEH8UOCAgMFMUgAwoPKA+a2BEPEgYCBl4ICF4GAxEOGNiaDoAUGMhhCQlhyBsRjR4EGLa2DA8BHgAAAAIAAP/vAvsDEQAPAB8AAAEjIgYHER4BOwEyNjcRLgEhIyIGBxEeATsBMjY3ES4BAVEEICoBASogBCAqAQEqAT4EICoBASogBCAqAQEqAxErH/1zICsrIAKNHysrH/1zICsrIAKNHysAAQAA//wDkQMEACIAAAEHFxYGByMiLwEHBi4BPwEnLgE3Nj8CPgEXFh8CHgEXBgODniYDFhUHDAzDwxMnEgMlnQ4BDwwP2WAKJRMOCWHZEhgDAQGsmdkWHwQGZmYLDCIQ2ZkOKA8MAiDFEg4JCQzFIAQhFA8AAAAABQAAAAAC5AKmABAAIgA3AD8ATwAAJR4BNyU2NzYmJyUmDgEVERQDPgE3MhcFHgEHBgcFBiYnJjUXIicmJyY1ET4BNzIXBR4BBwYHBQYDESU2NzYmJxMjIiYnET4BOwEyFhcRDgEBRwMKBQEWBgQGBgr+6gUKBRoBFhALCgEVFAoLBwz+6w8eCQYoBwYZDQgBIRgRDwEVGQ4OCRD+6w8LAQsDAQMCBWEDDREBARENAw0RAQERngYDA8sFBw0aCMsDAwkE/koFAbsUGgEHyw8zGA4JygoJEAwNQgEHGQ8SAbYcJQELyhNDHRILywoB7v5dxAEDBw4D/twRDQH+DRERDf4DDhEAAAAABgAAAAADjALEABYAHwAoADkAQwBNAAABMhcuAScOAQcUFhcHNx4BFzI3JjU+ASceARQGIiY+AQciJjQ2MhYUBgUuAScOAQceARcyNjcXJz4BJSImNDY3HgEUBjMiJjQ2Nx4BFAYCjA4NFJxqdp4DOzUcYhkvGQ0NCAKFMBATEyEZARm0EBkZIBMTAkkDiWFmhQMDhWYVKhVMFSs2/scLERELEBMTigsREQsQEhMCAQJWbQIDhWY6XiVUMQUIAQEdHl59TgESIBMTIBJFEyATEyAT4FZzAgJzVlZyAggFKkYgUlIRFhABARAWEREWEAEBEBYRAAQAAAAAA0kCyAASAB8AKAAxAAABIwYHAQYWHwEWNxY3ATY9AS4BAQYvASY3ATMVIxUHARMyNjQmIgYUFjcyFhQGIiY0NgMZ3xgV/r4TARLPEhsYFQFCEgEa/poCAswCAgFB1gIB/sDHICsrQSsrIQoPDxUODgLHARH+vhM1Ec4TAQETAUESG94UGv2uAQLNAwMBQcwEBf7AAVErQSsrQStlDxUPDxUPAAgAAP/AA8EDQQALABcALwBIAF0AdgClAK4AAAUuASc+ATceARcOASc+ATcuAScOAQceARciJy4BJyY0Nz4CMhceARcWFAcOAQcGAyIHDgEHBhQXHgEXFjI3PgE3NjQnLgEnJgMiLgI0PgE3NjIXHgEXFhQHDgIDIgcOAQcGFBceARcWMjc+ATc2NCcuAScmAxQGIiY9ATY3Nj8CPgE3NjUuASIGBxQGIiYnPgE3HgEXFQYHBgcGDwEOAQcGDwEeATI2NCYiBgIAvv0EBP2+vv0FBf2+pdsEBNulpdoEBNqlW1NRfCIjIyJ8pLZUUHwiJCQifFBUW1tTUHsiIyMie1BTtlNQfCIjIyJ8UFNbT45rPDxrRkieSEZsHR8fHWyOT09HRmsdHx8da0ZHnkhFax0fHx1rRUgxERoRAx4MDwwZEBQHEQFHbkcBERoQAQJpUFBpAgEgDRMNEwkQEQUMAUYBFiIXFyIWPwT9vr79BQX9vr79OATapaXbBATbpaXaQSMifFFTtlRQfEYjI3xQVLZTUXwiIwN/IyJ8UFO2U1B7IiMjIntQU7ZTUHwiI/y9PGuOno5sHR8fHWxGSJ5IRms8AwcfHWtFSJ5HRmsdHx8da0ZHnkhFax0f/gIMEREMFS0aCwgGCwcMBxInNERENQwREQxPZQICZU4BPSMPCggIBAcJBQoUdBEWFiIXFwAAAAUAAAAAA2wDAAAfACcALwA8AEkAAAEjNS4BJyMOAQcVIyIGFBY7AREeARchPgE3ETMyNjQmJTQ3MxYXFSMBBgchJicRIQE+AT0BNCYiBh0BFBYXPgE3NS4BIgYdARQWA067AScdnR0nAbsMEREMMQEnHQGxHScBMQwREf5NCp0JAbEBOwEJ/k8JAQHF/s8MEREZERGqDBEBAREYERECekEdJwEBJx1BERkR/gYdJwEBJx0B+hEZEUEJAQEJQf3LCQEBCQH2/nYBEQzFDBERDMUMEQEBEQzFDBERDMUMEQAABgAA/80DqAMzABIAGAAwAEYASgBPAAABGwEOAS8BIyImPQE0NjczNzYWBwUjFTMFEz4BFx4BFRQGBwYuATY3PgE1NCYnLgE3Bx4BFRQGBwYuATY/AT4BNTQnJjQ2MiUhESETARMHAQJwAwIDRiHzgRskJBt69SJFPf75kpkBBekJGQstMDcyCxkQAgonKyYjCgEINxYYHxwKGhECCgEREhsKFBn9nAEa/uaEAT8nJf6/Aun+mf6WKiAb2SQb/xskAdgaHyvo/+kCOwkBCCptPUJzKQgDFRgJIFozMFUgCRkLZRc3HyQ+FwgCFRkJAQ4kFSQcCRoTGv7LAQsBGf2iqgEYAAACAAD/uwPBAz0ACwAXAAABISImNDYzITIWFAYBETQ2MhYVERQGIiYDmvzMDxcXDwM0EBYW/jYTGhMTGhMBXBMaExMaE/6GAzQQFhYQ/MwQFhYAAAACAAD/3AMOAyoAKQA1AAAlIzU+AScuAQcOARceARcVIyIGBxUeATsBFQYWFzMyNj0BMxY2NzU0JiMBPgE3HgEXDgEHLgECuJ5vhQkOom9vhQkLgV+eCw8BAQ4LngENCgUKDp4LEAEOC/50A3ZaWXYDA3ZZWnbITw6icG+ECA6icF+BC08NCwILD50LDwEOC50BDgsECw8BVll3AgJ3WVl3AgJ3AAEAAAAAA3wC5gA7AAABBwYPAQYjIi8BLgE+AR8BLgEnIg4CFB4CMz4BNz4BHgEHDgEHIicmJy4BNDY3Njc2Nx4BFzc+AR4BA3sqBAoEBQcCA6ENDAYVDGYklFs9bVUuLVZtPWGaIgUWGAsEKbl1SURBMjQ2NjQyQURJZKczEgMVGQwCY58NBQICASoEFRkNAx1QXwEuU2t3a1UsAWlZDQoJFg1rfwIcGzIzgZCCMzEcGwEBYVVCDA0HFAAAAgAAAAADWQK5AAkAIwAAASMRMzIWFREUBg8BBi8BLgE/ASMiJic1ND8BPgEzITIWFREUAzpfXw0SErTKCQsbDAkEJMoaJAEFYgMQCgFVDRIBPwF6Eg3+xQ4SKckJBxUJGg6PJBtCDAzsCQsSDv6UDQAAAAAEAAAAAANFAvAAPwBOAF8AbgAAJS4BJyYiBwYHJzYnJic3FhcWMjc+AiYnLgEiBw4BBwYXByYnJiIGBw4BHgEXFjI3NjcXBhceARcWMjY3PgEnAzY3NjIWFxYGBwYiJicmBw4BIicuATc+ATIXFhcWFRQBIicuATc+ATIXHgEHDgEDPQghGSFLIRQQgRQMAwWBEBQhSyEZIQ8HDhRCSyEXIQgODoUMDSFMQRQOCA8iGSFLIA8MhQ0LCCEZIUtCFA4HB9cJHBMsJQsREhwTLCULEc8LJSwTHREQDCUrEx0JAwEbFhMcEhELJSwTHBIRCyXEGywPEhIMEUouMAoKSxIMEhMOLDg3GSElEw0oGiwsTQsIEyYhGTc3LA8SEggLTSgpHCwOEyYhGTcbAbQgEQsWEx1BEQoVEx3+ExYLEUEdExUKEiAKCxX+4woSQB0TFgsRQR0TFQAAAAEAAP/AA5sDLABAAAABFQ4BBw4BBw4BIyImNDY3MhYXPgE3IyImJzU+ATczNS4BJw4BBxUzHgEXFQ4BByMuAT0BNDY3NT4BNx4BFxUeAQOaASgeDW15CB0RHCMjHBEcCVdPCxUfKgEBKh8gA6J4eKEDIB4qAQEqHlUfKiMcBMSUk8QEHCMBfagfKQI9YgoQESM3IwERDwg8JiofqR8qAQp4oQQEoXgKASofqR4qAQEqHqkcKAQMlMQEBMSUDAQnAAQAAP+/A8IDQAALABcAIwA/AAABDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgEDDgEHHgEXPgE3LgEDIxUUBiImJzUjIiY0NjsBNT4BMhYXFTMyFhQGAgG+/QUF/b6+/gUF/r6h2QQE2aGi2QQE2aKw6gQE6rCw6gUF6gGOExsTAY4NExMNjgETGxIBjg4SEgNABf2/vv0FBf2+v/38xgTZoaLZBATZoqHZAxkF6bGw6QUF6bCx6f5Gjg4TEw6OExsTjg4TEw6OExsTAAAAAAMAAAAAA2kC2QAdACcAPAAAASYrATU0JyMmIwYHBhUPASMOAQcVHgEzITI2NxM2ASMiJj0BNDY7AQEhETc2Fx4BFxUUFjsBFhcWBwMOAQNNHiqeTQETDyQVAgJtTyc5AQE4KAHYIjcGLQf93EcQFRUQRwGR/qpxBgUOIAESDLoQDAsCLwEUAeMgZTouCQEfAgED9AE4JuEoNy4iASUo/p8UD98PFP7bAUP8BgMIHRGCDREBDA4O/tsNEQAAAwAAAAADSQLIABIAGwAkAAABIwYHAQYWHwEWMzI3ATY9ATQmAyImNDYyFhQGJxY+AS4BDgEWAxnfGBX+vxQBE84SGxgVAUISG5sgKytBKionCxEFCxURBQsCxwER/r4TNBLOEhIBQRIb3hQa/v8rQSsrQSszAgoVEgULFREAAAABAAAAAAPBAZwACwAAASEiJjQ2MyEyFhQGA5r8zA8XFw8DNBAWFgFcExoTExoTAAACAAD/wAPAA0AAEgBVAAABDgEHBhYXHgEXFjY3PgE3LgEGBTY3LgEnDgEHHgEXPgE3JQ4BBw4BLgInFyYnJic1ND4BNz4BFx4BFz4BNyE1MzUjNTM1NDY7ARUzFSMVMxQGBxYXAQoIDwIECBATLw4iQxwLIBInX2gCdyMBBf2+vv0FBf2+cbw+/uYdTy8dNzcnGQsBAQYCAQQODyFJGCJlMg0SBv7ziqenBQpBtbWRGyFQVQFIBxIMESUQEw4BAhsUBx4YFSEEhlFevv0FBf2+vv0FAWNWiyE4DgkGDBcaFAMBEAgIDAoYHQ8eDwEBGBEdOBUdOh06BghIHToDYD8dIAAAAAQAAP+/A8ADQABPAJMAnQCmAAABLwE3NiYvAS4BDwEvAS4BJyMOAQ8CJyYGDwEOAR8BDwEOAQcVFBYfAgcGFh8BHgE/AR8BHgEXMz4BPwIXFjY/AT4BLwE/AT4BPQEuAQ8BBg8BBh8BBycuAQ8BBg8BIycmLwEmDwEnNz4BLwEmLwE1NzY/ATYvATcXHgE/ATY/ATMXFh8BFj8BFwcOAR8BFh8BJQ4BFBYXPgE0JgcuATQ2MhYUBgONVhIyCwMONw8lEUgnDwIcFEwUHQUPKEkRJg82DwMLMhFXERcBGhRWEjQMBA43DyURSCcPAx4VTBQdBg8nRxEmDzYPAwsyEVcUGQMbJ2AQBx8GCjcqTgYRB0oQAxI6EgMQSBENTyk3BAMDHwcQYGAQBx8GCjcpTwYRB0oQAxI6EgMQSBENTio3BQIDHwYRYP6EMkREMjJERDIXHx8uHx8B3Q8nSBElDzcOAwsyElYTGAEBGRRXETQLAw43DyYQSCcPBBwUTBQdBRAnShAmDzYPAwsyEVcUGQEBGRRXETILAw82DyYQSCcPBB0WTBUddBEDEEgRDU8pNgUDAyEHEV9fEQcfBQo2KU4HEQdKEAMROxEEEEgQDk4pNgUDBB4HEWBgEQceBgo2KU4HEQZKEQMRWwFEZEQCAkRkRK0BHi8eHi8eAAADAAD/vwPCA0AACwAXADMAAAEOAQceARc+ATcuAQMuASc+ATceARcOARMjNTQmIgYHFSMiBhQWOwEVHgEyNjc1MzI2NCYCAb79BQX9vr7+BQX+vqHZBATZoaLZBATZDY4TGxMBjg0TEw2OARMbEgGODhISA0AF/b++/QUF/b6//fzGBNmhotkEBNmiodkBm44OExMOjhMbE44OExMOjhMbEwAAAAIAAP/fA2QDIQAFACAAACUeATI2PwEmLwE1LgEnLgEiBgcOAQcVBwYHHgEXIT4BNwGKEj1OPhHuBEkEAlhJBD9aPwRJWAEETQEBEQ0Cig0RASYgJiYgWmRBBJRVhCEtPDwtIYRVlARFaA0RAQERDQAEAAD/4wOQAxgAEgAYAC4ARAAAARsBDgEvASMuAT0BNDY3Mzc2Fg8BIxUzFxM+ARceARUUBgcGLgE2Nz4BNCYnLgEHHgEVFAYHBi4BNj8BPgE1JicmNDYyAmkDAgNCIOV5GiIiGnLoIEE5+YmQ99sJGAoqLjQvChgQAwklKCQhCQEsFBcdGgoYEQIKAQ8SARkJEhgC0v6t/qooHhnNASIZ8RkiAc0YHSnb8dwCGwkBCCdoOj5sJwgDFBcIH1ReUB4JGFYVNB4hOxUIAhQYCAEMIxQiGgkYEgABAAAAAAN5ArAAMAAAAQYHPgE3BgcuAScOAQcUFy4BJwYUFhcmJxUeARcGIyInHgEXDgEjIiceARc2Ejc1NgN5Ki8YIwktNRY6IUJXAgRhpDkVJR8mIAJENhMVDw4PTTQoYTcTEjR3QtbhAS0CZxIGDiwbGgsXGQECV0ISEQVWRiJUQxUCEQI5UgwGAy86AiAiAiEkAQkBDqEUIQABAAD//ANzAwQAOgAAEw4BFxY2NxYXDgEVHgEXPgE3Mx4BFz4BNzQmJzY3HgE3NiYnLgEnNTQnNTQnLgEnDgEHBh0BBgcXDgGrFgYRDCMSDzIaHwFNOjRKCRAJSjQ6TQEfGjMPESMMEgYWEikSDwYGf29vfwUGDwEBEioBRDVSCwUZGjoqCh0SHigBASEZGSEBASgeEh0KKjoaGQYKUjUpNgcKHxgEDgxrjAMDjGsMDgQYHwoHNgAAAwAAAAADZALZABsAMAA6AAABJiMhIgYHAwYXFjsBFRQXFjI2PwIzMjY9ATQDBwYnLgEnNS4BJyMiJyY3Ez4BMyE7ATIWFxUOASsBA0cdJ/4oIzYGLQgdHSueTRMhHgoDbk8nOeNxBQUPHwEBEQy6EAwLAi4CEw8BVTxHDxUBARUPRwK+Gy4i/tsoJiBkOy0KEQ8G9Tgm4Sj+ufwGAwgcEoIMEQEMDg4BJg0QFA/fDxQAAAAABQAA/8ADvgNAAAsAFwAjAC8AOwAAAQ4BBx4BFz4BNy4BAy4BJz4BNx4BFw4BAw4BBx4BFz4BNy4BAQ4BIiYnNT4BMhYfARQGIiY9ATQ2MhYVAf++/QQE/b6+/QQE/b6h2QQE2aGh2QQE2Z6r4gQE4quq4wQE4/75ARIcEgEBEhwSAfASHBMTHBIDPwX8vr79BAT9vr78/MgE2aGh2QQE2aGh2QMFBeKqq+IEBOKrquL+BA4TEw7gDhISDuAOExMO4A4SEg4AAAAFAAAAAANbAtkAEAAcADAAOQBCAAABJiMhIgYVERQWFyE+ATURJgMhATQzHwEWFxUOASEjIiYnET4BNyEeARcRJyYiBwEGEw4BFBYyNjQmByImNDYyFhQGAz4cJv4GJjc2JwH7JjcBXf5wAR4FBYMFBQMU/hEZDxIBARIPAfsOEwFiEjcS/r8Fcic0NE8zMygNEhIaEhICvhs3Jv4EJjYBATYmAfwn/b4BHQEBgwUBchASEw4B+g4TAQETDv7JYhER/sMEAeUBM040M08zeRIaEREaEgAAAAAEAAAAAAOaAuAALAA4AEQAYAAAJQ4BBxUWBichBiY1ETQ2FyE2FgcVHgEyNj0BLgEnIQ4BFREUFhchPgE3NTQmASMiBhQWOwEyNjQmByMiBhQWOwEyNjQmJTc2NCYiDwEnJiIGFB8BBwYUFjI/ARcWMjY0JwMjDREBAREZ/lAYEREZAa8ZEQEBERoSASIb/f4aIyMbAgEbIgES/ui5DRISDbkNERENuQ0SEg25DRERAStACRIZCUBACRkSCUBACRIZCUBACRkSCdQBEQ0pGREBAREZAe0ZEQEBERlnDRERDZEaIgEBIhv9wRojAQEjGlINEQEWERsRERsRkBEbEREbERRACRgTCUBACRMYCj9ACRkSCT8/CRIZCQAAAAIAAP/gA3QDJAAlAE4AAAE1NiYnJicuASIGBwYHDgEXFQ4BFx4BFxYzHgEyNjczMjc2NzYmBxQHDgEHJicOARQWMjY3Njc2NzY3DgEHIy4BLwE3PgE3HgEXHgIfAQNUAS8vLUAGUXdRBj8uLy8BDQ0HBRoSEhcYldiUGQIdFRwJBxFiBCNvSAwaExgYIxcDLio7LAcGG4FbAXWPAQECMU4SEEo5KlVLGwIBUhhShzEuGS07Oy0ZLjGGUh0NJhoUHAYMZXh4ZREQIR0oPBoYOUUIDwEBEBkQDQsFERgtBwdQXAECk3kQKhViIxhEFw8QHCICAAADAAAAAAOGAt4AEAAkADAAAAkCLgE/AT4BMyEyFh8BFgY3Jy4BIyEiBg8BBhYXARYyNwE+ASUjDgEUFjsBMjY0JgM9/sP+wwMCAjoCCgQB7QQJAjoCAj47CioY/hMZKgo6CQgOAUISOBMBQQ8H/u7nDxISD+cOExMB7f5/AYAEDwSOAwcHA44EDiyNFh0dFo4VMhP+exYWAYYSMhABFB4VFR4UAAIAAAAAA2cCvwAOABgAAAE1LgEnITUuAScjDgEHHQIeARchPgE3NQNmAS8k/uwBMCO8JC8BAS8kAiQkLwEBwi4kLwEmJC8BAS8kqDj1JDABATAk9QAAAAAFAAAAAANUAs0AJQAyAD8ATABZAAABEQ4BByEuAScRPgE3MxUjDgEHER4BMyEyNjURNCYnIzUzMhYXFgMUBiMhIiY0NjMhMhYDFAYrASImNDY7ATIWExQGIyEiJjQ2MyEyFjUUBgchLgE0NjchHgEDUwI8Lf43LT0BAT0tXV0TGgEBGhMByRMaGhNYWBYoDx11Eg3+mgwSEQ0BZg0SfBINdQ0REQ12DRF8Eg3+mg0REQ0BZg0SEg3+mg0REQ0BZg0SAmb+DSs5AgI5LAHyKzoBPQEXEf4OEhcXEgHyERcBPRAPHv5ZDhESGhESAboOEREbERH+pw0RERoSEm4NEQEBERoRAQERAAAEAAD/wAO+A0AACwAXACQAMQAAAQ4BBx4BFz4BNy4BAy4BJz4BNx4BFw4BJSImJzU+ATIWFxUOATMiJj0BNDYyFh0BFAYB/779BAT9vr79BAT9vqHZBATZoaHZBATZ/uQOEgEBEhwSAQES4w4TExwSEgM/Bfy+vv0EBP2+vvz8yATZoaHZBATZoaHZ4xMN4Q4SEg7gDhMTDeEOEhIO4A4TAAAAAAMAAAAAA8QCzAALABsAJAAAAR4BPgImJyYiBhQlJgInBgIHBhcWEhc2Ejc2BQ4BIiY0NjIWAcsPJiccCwsOFzwtAgcF49XT5AYGBgbj1NXjBQf+yAFPdk9Pdk8BRA4KChwnJw4WLTwxHQEPExL+8hwRDR3+8hITAQ0aEQY7T092T08AABwAAAAAA0UCzQAPABMAIwAnADcAOwBLAE8AXwBvAH8AjwCTAJcAmwCfAK8AvwDPAN8A4wDnAOsA7wDzAPcA+wD/AAABIy4BPQE0NjsBMhYXFQ4BJzM1IwUjLgEnNT4BOwEyFh0BFAYnMzUjEyMiJic1PgE7ATIWHQEUBiczNSMHIyImPQE0NjsBMhYXFQ4BJzM1IwUjLgEnNT4BNzMeAR0BFAYDIgYHFR4BOwEyNj0BNCYjASMuAT0BNDY3Mx4BFxUOAQMiBh0BFBY7ATI2PQE0JiMFIzUzBzM1IwcjNTMHMzUjJSMiJic1PgE7ATIWHQEUBgMOAQcVHgEXMz4BPQE0JicBIyImPQE0NjsBMhYXFQ4BAw4BHQEUFhczPgE9ATQmJwUjNTMHMzUjByM1MwczNSMnMxUjJTMVIxUzFSMlMxUjAabJEhgYEskSFwEBF9O4uAIxyRIXAQEXEskSGBjSuLjAyRIXAQEXEskSGBjSuLiwyRIYGBLJEhcBARfTuLgCMckUGgEBGhTJFBsb3RAUAQEUEMkQFRUQ/pDJFRoaFckUGgEBGt0QFRUQyQ8VFQ8BbcLCuK6uucLCuK6uAizJFBoBARoUyRQbG90QFAEBFBDJEBUVEP6QyRUaGhXJFBoBARrdEBUVEMkPFRUPAW3CwriurrnCwriurhTq6gFn6urq6v6P6uoBqwEXEskSGBgSyRIXMbnrARcSyRIYGBLJEhcxuf2lFxLKERgXEskTFzK46hcSyhEYFxLJExcyuPABGhTKFBoBARoUyRUaARwVEMkPFRUPyRAV/uMBGhTKFBoBARoUyRUaARwVEMkPFRUPyRAV6sK4rrjCuK6GGxTJFBsbFMkUGwEdARQQyRAUAQEUEMkQFAH+4xsUyRQbGxTJFBsBHQEUEMkQFAEBFBDJEBQB68O5r7nDua8Uzc3NqszMzAAAAAAFAAAAAANYAuIALQAzADgAVgCNAAABIiY0NjsBNS4BJyMnJgYPAScjJiMiBg8BIw4BBxUzHgEUBisBFR4BFyE+ATc1AT4BHwEnBzY3FyMBFAYjISImPQE+ATc2Jic1NDYzITIWHQEOARQXFhcnDgEHIxUUBiImPQEjLgE0NjsBNSMiJjQ2NzMnJjQ2Mh8BNz4BHwEWFA8BMx4BFAYHFSMVMzIWA0cWHR4VEAErHxbwHTgREh8EBwgaJwgJFyAqAQ8WHh4WDwEqIAIZHysB/n0DCwVmg3wDC26BAdEIBv3nBggUHwgQIikIBgIYBgkdJhQSHacBEg07ExsSOw0TEw07Ow0TEw0UKgoTGQpFRAkaCQEJCSsUDhINCkM6DhIBDx4rHocgKgGLDw8cIAkBHhohASoghwEdLB2WICoBASoglgGKBQMDOyQtCgEd/jEGCAgGYgogFitQFFMGCAgGUw04Rh0aDSYOEgEYDRMTDRgBEhsTBhMbEgEsCRoUCUZFCQEJAQoaCisBExgRAwEGEwAAAwAAAAADiQLEABwALgBEAAAlASYiBhQfAQ4BDwEGFxUeARcWFxYzMjcXFjI2NCUGIy4BJzY/ARcGFR4BFzI3FyUOAQcVDgEjBicBJy4BNjc2Mx4BFxYDTP21CRgSCU0vVCADBgYBNDI5P05Ua2VRCBwR/v0hLDZJAQEZAR4KATMmFhMdASwCIx8FDQYLCf6sAwsHDwwfHrfEBglvAksJEhgJTiNiOwQMDwEEUzY6ISlFUggSF60ZAUg3LCECHhMWJjMBCh1OBzklAQQFAQYBVwQIGRMDBhDpGg4AAAQAAAAAA0UC6wAbACMAMwA/AAABIzU0LgIiDgIdASMOAQcRHgEXIT4BNxEuASU+ATIWFxUjARQGIyEiJjURNDY3IR4BFQcVFAYiJj0BNDYyFgLsMxszQEdAMxtCJjIBATImAdgmMgEBMv6AAURhRAHrAXcRDP4oDBERDAHYDBHrEhgSEhgSAdZnIj8yGhoyPiNnATIm/vMmMwEBMyYBDSYyaC9CQi9n/pkLERELAQ4LEQEBEAwlXA0REQ1cDBISAAUAAP+9A8ADPwALABcAIAApADIAAAEOAQceARc+ATcuAQMuASc+ATceARcOAQMeATI2NCYiBgcUFjI2NCYiBgUeATI2NCYiBgIAvv0FBf2+vv0FBf2+odkEBNmhotgFBdjOARklGBglGa8ZJRgYJRkBXQEYJRkYJhgDPgX9vr79BQX9vr79/McE2KKi2AUF2KKi2AF6ExgYJhgYExMYGCYYGBMTGBgmGBgAAAAEAAD/wAPCA0AACwAXACAALQAAAQ4BBx4BFz4BNy4BAy4BJz4BNx4BFw4BAxQWMjY0JiIGFyIGHQEUFjI2PQE0JgIBvv4EBP6+vv0FBf2+otkEBNmiodkEBNnNGSUZGSUZLA4TExsTEwNABf2+vv4EBP6+vv38xgTZoqHZBATZoaLZAj8SGRklGRmLEw7wDhISDvAOEwAAAAgAAP++A8UDQwAEAAkADgATABgAHQAiACcAAAkBJjY3FwMuASc3AQYmJzcFDgEHJwEWBgcnEx4BFwcBNhYXByU+ATcBlv6+FAYh0w9SVx7vAS1fgkx/Abo2YUw7AUMUByHTD1JXHu/+01+CTH/+RzVhTAIv/tNggUx//kc1YUw7/r0TBiHUEFFYHu8BLV+CTIABuTZgTTsBQxMGIdMPUlceAAAAAgAAAAADSQLwACUAMQAAASE1PgE3HgEXHgE+AScuASMiDgIdASMOAQcRHgEXIT4BNREuAQcUBiImPQE0NjIWFQLs/qYBQzAmPAwFGBoLBBNeOyRCNBtAJzQBATQnAdsoNAE0+g8UDw8UDwHZZS5BAQEpIw0LCRgNNkIbM0AjZQE0KP7xJzQBATQnARAnNNwLDg4LXAoPDwoAAAAAAgAAAAADkALrABgAMAAAAS4BIgYPAScuASIGBwYUFwEWNjcBPgImBwkBJjQ3PgEyFh8BFjI/AT4BMh4CFAYDTyFRXFIhDhEgUltTIUJCATkKGQoBOSAhASBL/tz+3DAwFztBPBclChkIJRg7QTsvGBQCpiAkJCARESAkJCBGuEf+wQkCBwE/IVNdU/f+1gEqNIc0FxoZGCgJCSgXGhkwPUU9AAADAAD/vwPAA0AACwAXACMAAAUuASc+ATceARcOAQMOAQceARc+ATcuARMhIiY0NjMhMhYUBgH/vv4FBf6+v/0FBf2/otkEBNmiotkFBdkO/qENExMNAV8NExNBBP6/vv4EBP6+v/4DPAXZoaLZBQXZoqHZ/mUTGxMTGxMABQAAAAADRALoABkAIQAyADYAQgAAASM1LgEnDgEHFSMOAQcRHgEXIT4BNxEuASMlPgEyFhcVIwEOAQchLgEnET4BMyEyFhURAREhEQUOASImJzU+ATIWFwLsNQJkSklkAkQlMQEBMSUB2CUxAQExJf6kAUNmRAHvAXwBEg3+KA0SAQESDQHYDRL92QI9/vsBEBYQAQEQFhABAdRpSGECAmFIaQExJf7zJTEBATElAQ0lMWoxQkIxaf6cDRIBARINAQ0NEhIN/vIBN/6TAW2qDBAQDFwLEBALAAAAAAMAAP/AA8IDQAALABcAIAAAAQ4BBx4BFz4BNy4BAzU0NjIWHQEUBiImEyImNDYyFhQGAgG+/gQE/r6+/QUF/d8TGxMTGxMhExkZJRkZA0AF/b6+/gQE/r6+/f2A8A4TEw7wDhISAWwZJRkZJRkAAAAEAAD/wANwA0AADgAaABsAJAAAAQ4BBxYAFxYyNzYANy4BAw4BBy4BJz4BNx4BByMeATI2NCYiBgH+ndEDFAErIAkTCB4BLBUE0QsBUj4+UgICUj4+UpBPASxDLCxDLAM/BNOc1v7dDAcHDAEj1pzT/nw+UQICUT4+UgICUj4hLCxDLCwAAAAABgAAAAADaAK5AAgAEQAaACcANABBAAATHgEyNjQmIgYDHgEyNjQmIgYDHgEyNjQmIgYBDgEHIS4BNDYzITIWEw4BIyEiJjQ2MyEyFjcOASMhIiY0NjchHgGfAR8vHx8vHwEBHy8fHy8fAQEfLx8fLx8CxwERDP4zDBERDAHNDBEBAREM/jMMEREMAc0MEQEBEQz+MwwREQwBzQwRAoEXHx8vHx/+5xgfHy8fH/7nGB8fLyAgAewMEQEBERkREf3wDRERGRIS9g0RERkRAQERAAEAAAAAA2wC7AApAAAlFQ4DKwEuAScuAScuAScmNjc2NzMeARcWFxYGDwEWFzc+ARcWFx4BA2oBDxsfEQdNkEA7ZSUqMwkBDQwaK14jMgUGDwkLExg5XRgUMxkpKiIs+V4TIxgNCTMqJWU8P5BNFCQOHQEBKyIsJxkzFBhcOhgTCwkPBgYzAAABAAAAAAM+AvgAEQAAAQYHAQYmJyY1ET4BNzIXAR4BAykNFf4yGzkRCwEqHxURAc4kEwFNFQ3+6RAOGxEVAlsfKgEL/ukXTgABAAAAAAM4Av0AEQAAAREOAQciJwEuATc2NwE2FhcWAzcBKSAUEv4yIxMVDBUBzhs6EAsCrv2lICkBCwEXF00lFQ0BFxAPGhIAAAAABAAA/8ADvgNAAAsAFwAsAC8AAAEOAQceARc+ATcuAQMuASc+ATceARcOARMnJiMOARURFBYXHgEyPwE2NzYnJgU1FwH/vv0EBP2+vv0EBP2+odkEBNmhodkEBNko8A0NGB8DAwkZGw7wDQYLBgT+7NADPwX8vr79BAT9vr78/MgE2aGh2QQE2aGh2QGqiQcBHhj+7QYPBQ0PBooGDRUVFpnsdgAGAAAAAANMAwQADwAfAEYAVABgAHAAAAEhIgYVERQWFyE+ATcRLgEDDgErASImNRE0NjsBMhYXASM3Njc+AS4BBwYPAScmJyYOARYXFh8BIyIGHQEUFjMhMjY9ATQmJz8BFTY3Nh4BBgcGDwEnMyYnLgE+ARcWHwIOASsBIiY9ATQ2OwEyFhcDD/3hDRERDQIfDRABARH9AQgHHgYJCQYeBwgBAQ/PMh0ZHAcySB4VBzY1CBUeSDEGHRkdMs8NERENAlsNERHWAQEEBg8kGQMPBQZp1wEGBg4DGCQPBwQvVgEIBx4GCQkGHgcIAQFqEQ3+0gwRAQERDAEuDRH+wwYJCQYBEAYJCQYBAA4BFBpHOwcYExh0dBkSGAc6SBoUAQ4RDXkMEhIMeQ0RgQEDAQgFDAMdJA0EAycnAwQNJB0DDAUHZ6YGCQkGWwYJCQYAAAACAAAAAAOGAtoACwAnAAABIyImNDY7ATIWFAY3JyYnNSMuASMhIgYHIxUGDwEGFhcBFjI3AT4BAnPoDhISDugOExP8OgQFAgwjE/4SEiMMAgYDOwkIDgFDEjgTAUIPBwHSExwTExwTSI0ICAIPEhIPAgcJjRYyE/56FhYBhxIyAAIAAAAAAz4C+AARACMAAAkBJiMOAQcRFBceATcBNjc2JgcUBgcBBiciLgE1ETQ+ARcBFgMH/jIRFR8qAQsRORsBzhUNFRMxCwj+MwUFAwQDBQoFAc0SAdYBFwsBKh/9pRURGw4QARcNFSROPwoSBf7pAwIDBQQCWwMIAgL+6AwAAwAAAAADUwLRAA8AGAAoAAABISIGBxEeARchPgE1ETQmBT4BMhYUBiImAQ4BByEuATcBNhYfAhYVAxb92RoiAQEiGgInGSMj/g0BJzonJzonAeIBDQr+chINDAE2CBUHAlcGAtEjGf3ZGiIBASIaAicZI84dJyc7Jyf+mgsOAQEdDQEWBwEIAngFCAABAAAAAAOoAusAJAAAAQ8BDgEPAQYjIi8BBw4BJyImND8BJy4BPwE+ATM/ATYWHwEWFAObyQwBBQI0ERIVDoW0BAwFChMJtYUOAQ8zAgkFVewOJQ7EDQHT7FUFCQIzDg6FswUEARMXCbWGDScPNAIGDcsMAQ3EDSYAAAAAAgAA/8ADwANAAAsARgAAAQ4BBx4BFz4BNy4BEwYmJwYHHgEXDgEjIiYnIw4BIyImJzQ2NyYnDgEnJjY3PgE3NTQ3NSY3PgE3HgEXFhcVFh0BHgEXHgECAL/8BQX8v779BAT9LggXDAkhERMBATMmIjAGCwYxIiYyARQRIQoMFwcMBA4LHAwKAQUFVEhJVAMEAQoMGwsOAwNABf2+vv0FBf2+vv39ugQRESUbBhQLFBoWEBAWGhQMEwYbJREQAwc2IRsjBAcUEAIKB0ZcAQFbRggJAhAUBwQjGyI2AAIAAAAAA2wC7AApAFkAAAEmJyYGDwEmJzc+AScmJy4BJyMGBw4BFx4BFx4BFx4BFzMyPgI3NTYmBxUUBgcGJy4BJy4BJy4BJyY2NzY7ATIWFx4BFxYGDwEOARceARcWPwE+ARcWFx4BAx4qKRkzFBhdORgTCwkPBgUyI14rGgwNAQkzKiVlO0CQTQcRHxsPAQIsDAUGCw9FhTo2XCMmLwcBBAYLD14OEwIDDAkEBAcpBwIFJGU/Eg8pBxMKMC8MEQFVBg8JCxMYOlwYFDMZJywiKwEBHQ4kFE2QPzxlJSozCQ0YIxNeIzNWXgcPBAoBBy8mI1w2O4RFBw8GCxEMGDAXCRQHKQcSCD9kJQgMKQcEBBAIAhQAAAABAAAAAANTAv0AQAAAJQYHDgEjIicuAScmNycGBwYiJy4CNjc+ATIXFhc3Jjc+ATc2MhYXHgEOAQcGIicmJwcWFxYHFzY3NjIXHgIGAzwTIhAkEiYhGSIIDBGZDhEhSyEZIg8HDxNDSyERDZkSDwkgFyJLQhQOCA8iGSFMIRcRlQcDDhiVERchTCEZIg8ISCITCQoTDywcLStYDgoSEw4tNzgYIiYTCg1YLzAZKQ0TJSIZNzgsDxMTDRVWDQ40MFYVDRITDi03NwAAAAADAAD/wAPAA0AACwAUAEIAAAEOAQceARc+ATcuAQM+ATIWFAYiJjcVFAYiJic1Njc2PwI+ATc2NS4BIgYHFAYiJic+ATceARcUBwYHBg8CBgcGAf++/AUF/L6+/QUF/eYBFiIXFyIWRREaEAEDHgwQCxkQFQYRAUdtRwIRGREBAmlQUGkCIA4SDRMKFwkGCwNABf2+vv0FBf2+vv39aBEXFyIWFoUSDRERDRUtGgsIBgoIDAcRKDRERDUMEREMT2UCAmVPPSMPCwgIAwsFBQoABQAA/+UDkwMaABQAHQAzAEgAVgAAPwEjNTM3FzcnLgEPASMOAR0BFBYXAQcTJwcXFjY3EyYiBhQXFhcUBgcjDgEeATc+ATU0JjcmDgEWFx4BFAYHDgEeATc+ATU0JgEuATcBPgEeAQcBDgEn/DOCifkBPAEDQSDochoiIhoBwDwDriesIEIDawoYEgkZAREQAQoCERgKGh0XSwoYEQEJISQoJQkDEBgKLzQu/VwLAgkCGQobFgMK/egKGwzMPPHbnkZZKB0ZzAEiGfEaIQEBCkb+nJsumhkeKAG7CRIYCRojEyMNCRgTAggVOyEeNHcIARMYCR5QXlQfCBcUAwgnbD46aP4PCRwLAncLAhMcC/2JCwIJAAAAAAIAAAAAAzcC/QARACIAAAEuAQcBBgcGFhcBFjM+ATcRNAcRFA4BJwEmNSY2NwE2HgIDLBA6G/4yFQwVEyMBzhIUICkBPQUKBP4yEgELCAHOBAgEAwLUGg8Q/ukNFSVNF/7pCwEpIAJbFBT9pQQHAwMBFwwVCxEFARcDAgMFAAAABAAAAAADbwLUABEAIQAqADcAACUBLgEiBgcBBhQeARchPgI0ByEmJyY0NwE2MhcBFgcGIyUUFjI2NCYiBjcyNj0BNCYiBh0BFBYDYf7vDCszLA3+7w0aKxkCIxorGV793RIKBQUBEQsjCwERCgoKEv7LFR4UFB4VJAsPDxYQELwB6hYYGBb+FhYzLhoBARouMz8BEQkTCQHqDw/+FhEUEWYPFBQeFBRTDwugCw8PC6ALDwAACQAA/70DwgNAAAsAFQAgACsANgBBAEwAVwBiAAABDgEHHgEXPgE3LgEHFh8BFh8BBzYvATYzMh8BFSYvATYHNjc2PwEXJiMHNgcmNTQ/ATMGDwEmFyYnJi8BNwYXFSYXBiMiLwE1Fh8BBjcGBwYPAScWMzcGNwcjNj8BFhcWFQYCAL/9BQX9v7/9BQX9UiAdFhkRCIUBAYUPDyQgEQ9PWSCNCQsZHQ+FFW9+DSACCQW8EE5ZDV4MCxkQCIQBASClDw8jIRAOT1ohjAkKGh0PhRZufw4aBLwPT1gOBAIBA0AF/b+//QUF/b+//cMOFxQaHg+HFXGUAQkFvxBQWg1gDAsZEQmIAQEhqA8PJCIQD1BbIY8JCxkeEIcWcYAOIwEJBb8QT1sNXwwLGREJiAEBIUUQDlBcISUPECQAAAQAAAAAAzsC7QAQABsATgBqAAABIQ4BBxUUFhcFJT4BPQEuAQ8BJzU0NjMhMhYXAxUzMhYUBisBFRQGIiY9ASMiJjQ2OwE1IyImNDY7AScmNDYyHwE3NjIWFA8BMzIWFAYjNxEOAQchLgEnETQ2MhYVER4BMyEyNjcRNDYyFgLo/jEiLwEODAEjAR0LDgEuDvn/CwkBzwkLAd4vDRERDS8RGhIvDRERDS8vDRERDR0zCRIaCTc6ChgSCTUeDRERDewBLiP+MSMuARIaEQELCQHPCQsBERoSAu0BLyJOCxECNDQCEQtOIi+FLi40CAwMCP55EBIaES8NEhINLxEaEhARGhIzCRgTCTc3CRIaCTISGhHS/n8jLgEBLiMBgQ0SEg3+fwkMDAkBgQ0SEgAAAAACAAAAAANEAscAIAA4AAABFQ4BByEuAScRPgE3Mx4BFAYHIyIVERQzITI3NTQ2MhYTFQ4BIiY9AQcGIiY0PwEjLgE0NjczHgEDQwElG/33GyUBASUb0A0REQ3QBQUCCQQBERkRAQERGRHiCBwRCeN2DRERDb8MEQFM0BslAQElGwIJGyUBAREZEQEE/fcFBdAMEhIBUL8NERENduIIERgK4QERGREBAREAAAAABQAAAAAC5AKlAA8AIQA2AD4ATgAAAS4BBwUGBwYWFwUWPgE1ERMOASMiJyUuATc2NyU2FhcWFycyFxYXFhURDgEHIiclLgE3NjclNhMRBQYHBhYXAzMeARURFAYrASImJxE+AQK0AwoF/uoGAwcGCgEWBQoFGgEWEAsK/usUCgsHDAEVDx4JBQEoBwYZDQgBIRgSDv7rGQ4OCQ8BFg8K/vUCAQQDBGADDRERDQMNEQEBEQJrBgMEygUHDRsIygQDCgQBtv5KFBsHyw8zGA4IywoJEQsNQgEHGRAR/kocJQEKyxNCHhILywr+EgGiwwIDBg4DASQBEQ3+Aw0REQ0B/Q0RAAADAAAAAAOHAuoAEQAdACYAACUBLgEiBgcBBhQeATMhMj4BNAE0NjIWFxUOAiYnFyImNDYyFhQGA3n+2g0tNCwO/toMGiwaAkwcKxr+XRAYDwIBEBcQARwQFhYgFharAg8XGBkW/fEXNS4cGy81AYQMEA8L+gwQAQ8MqhYgFhYgFgAAAAAGAAD/5QOTAxoABQAHAB0AMgBAAFAAACUOAS8BAQ8BNyYiBhQXFhcUBgcjDgEeATc+ATU0JjcmDgEWFx4BFAYHDgEeATc+ATU0JgEuATcBPgEeAQcBDgEnAQcBIy4BPQE0NjczNzYWFwJwA0IgrAEOMQuqChgSCRkBERABCgIRGAoaHRdLChgRAQkhJCglCQMQGAovNC79XAsCCQIZChsWAwr96AobDAGsJf61TxoiIhpy6CBBAywoHhmaAT06DFcJEhgJGiMTIw0JGBMCCBU7IR40dwgBExgJHlBeVB8IFxQDCCdsPjpo/g8JHAsCdwsCExwL/YkLAgkCTCz+fAEhGvEZIgHMGR0oAAAAAwAAAAADUAK/AA0AGQBJAAAlFQ4BKwEuAT0BNDYyFgUVDgErAS4CPgEWARQPAQ4BIyEiJicDLgErASImNDY7ATIWFxMeATMhMjY/ATYmIyEuATQ2MyEyFhcWAyQBHBQBFBsbKB3+nwEcEwEVGgEbKR0BjgIWBy0d/qcdLAcqAgsIMQ0REQ0xHiwGKgIMBwFaBwwCFgMNC/6oDRERDQFYEyEMEnMCFBsBGhQCEx0cFAIUGwEaKRwBGwFxCQnVHiUlHQFgBwkRGhIlHf6gBwkKB9UMEQERGhEQDxgAAAcAAAAAA3sCwwAQAB0AKwBGAFIAYgBtAAAlLgEHDgEXHgEyNyM+AScmJxMeAQcBDgEuATcBPgEDJicjBzYWFycWPgE0JwMzMhcnNyYjBgc3BgczDgEXFR4BNzY/AT4BMwUmLwEHFhcjFj4BNAU3Jw4BBw4BHwEWMjc+AT8BBxYXFj4BJicmJwIfDSANFgsNCBkgDgEWCw0IC/IKAQj+LAkZEwIIAdQJGYksNgE1HzwaAQoWEQmBAj46AylJWHFhA1xEAQoBCQkYCT5NAyldMgFwLjUDKDcvAQoXEf51MyBFfzMJAQgBCBkIJ181qSk3LQkYEQIJKzWvBwEIDzAXDA8IDjAXDAcCDAkZCv3nCgERGQoCGQoB/mIhBz8GDhMBBwESGAoBTQ8BMhkBKgEnQAkYCQEJAQk5IQESE1QqHwIwHSoIARIYUjsCATAuCRgJAQkHIygEHjAVJwgCExcJJhgAAAAABwAA/78DwgNAAAgAEQAdADMAQwBNAFcAAAEiBhQWMjY0JhcyNjQmIgYUFhMOAQceARc+ATcuAQEiLwEHNy4BJz4BNx4BFyYjDgEHFBcFFycGBy4BJz4BNx4BFxQGJyIGFBYXPgE0JiMiBhQWFz4BNCYBWw0VFRoPD5INDw8bFBQWvv0EBP2+v/wFBfz+5BUTKE8WKy8BA4BhVX8RCwtTbAIHAToRPiMiU2wCAmxTT3ACLFYJDg4JDQ8PigkODgkNDw8CMg8bDw8bDzkPGw8PGw8BRwX9vr79BQX9vr79/dIEByhFHk4vVW0CAVlHAQJnTRkYUTojCgICX0ZHXwICX0cnQ7UOEg0BAQ0SDg4SDQEBDRIOAAAAAAQAAAAAA2wDAAAfACsANwA/AAABIzUuAScjDgEHFSMiBhQWOwERHgEXIT4BNxEzMjY0JgE1NDYyFh0BFAYiJjc1NDYyFhcVDgEiJgM0NzMWFxUjA067AScdnR0nAbsMEREMMQEnHQGxHScBMQwREf45ERkRERkRnhEYEQEBERgRigqdCQGxAnpBHScBAScdQREZEf4GHScBAScdAfoRGRH+VcUMEREMxQwREQzFDBERDMUMEREB+AkBAQlBAAAAAAIAAP/AA8ADQAALAEEAAAU+ATcuAScOAQceARMeATcmNjc2Fhc/AQc3DwEGMxYGBw4BBwYmJzc+AT8BLgEnLgEzNy4BJy4BNxcuAScmNjMGFgIAvv0FBf2+vv0FBf07QlsBBAM7QU4BGhsaKAQRGAECDistfFVXZQEdGzQZGwRAFRENAUAEQRIOCAExAiYHAwkCAi1ABf2+vv0FBf2+vv0CLh8MAgRiJRoyBgkLLwQGEBYFgUdDTgkFJQMDAxQQEQEYEhETAQEoFxYhARQCPyMgIgEwAAAAAAIAAP+/A8EDQABRAF0AAAEeAR8CNzYWHwEeAQ8BHwEeARcVDgEPAhcWBg8BDgEvAQ8BDgEHIyImLwIHBiYvAS4BPwEvAS4BJzU0Nj8CJyY2PwE+AR8BPwE+ATczFQMOAQceARc+ATcuAQImFB0GDydIDyUPOQ4DCzIRVxMZAgEZFFYSMgsCDTkPJRFIJw8EHBJRFB0FDydKDyUPOQ8DDDISVxIZAhkUVxIwCwEMOBAlEUgnDwQcElMoMkQBAUQyM0MCAkMDPgEZFFcRNAsCDTkPJRFIJw8EHBJRFB0FDydIDyUPOQ4DCzIRVxMZAhoUVxEwCwINOQ8mEEgnDwQcElEUHQUPJ0gPJQ05DgQMMhJXEhkCAv66AUQyM0QBAUQzMkQAAAACAAAAAAOpAusAJAAxAAABJy4BDwIiBg8BBhYfAQcGFBYzFjY/ARcWMzI/AT4BPwI2NAEGFQ8BAT8BMj8CFwObxA4lDuxVBQkCMw8BDoW1CRMKBQwEtIUOFRIRNAIFAQzJDf75Bg0n/tslUwYEA+60AhjEDQEMyw0GAjMQJw2GtQkXEwEEBbOFDg40AQkGVOwSJv7/BwdSJwElJQ0EAcu1AAAAAAMAAAAAA1ACvwANABkAOgAAJRUOASsBLgE9ATQ2MhYFFQ4BKwEuAj4BFgEUDwEOASMhIiYnAy4BKwEiJjQ2OwEyFh8BITIXFhcWFQMkARwUARQbGygd/p8BHBMBFRoBGykdAY4CFgctHf6nHSwHKgILCDENERENMR4sBgYBqwQFIBUScwIUGwEaFAITHRwUAhQbARopHAEbAXEJCdUeJSUdAWAHCREaEiUdMAEEGhgdAAAAAAUAAAAAA0wCygATACYAMwBGAFoAACUUBgcjLgEnNT4BMhYXFRQ3Mx4BJRUOAQcjLgE0NjsBMj0BNDYyFjcOAQchLgE0NjMhMhY3FQ4BIiY9ATQrAS4BNDY3Mx4BJRQGByMiHQEOASImJzU+ATczHgEBlxENhhskAQERGREBA4YMEgG0ASQbhgwSEgyGBBEZEQEBEQz9pQ0REQ0CWwwRAQERGREEhgwSEgyGGyT+TRIMhgMBERkRAQEkG4YMElAMEQEBJBuGDBISDIYEAQERm4YbJAEBERkRBIYMEhKCDBEBAREZERH3hgwSEgyGAwERGREBASQGDBEBA4YMEhIMhhskAQERAAAAAAIAAAAAA0gCygAcACgAACUnPgE1NC4CIgcOAhQeAjMyNjcXFjI/ATYmJS4BJz4BNx4BFw4BAz+MHyEsUGlzNjNQLCxQaTkxXCmMCBsHAQYB/o5hgQICgmBhgQMDgWmMJl0zOmhQLBYXUGl0aFAsICCMCAgBCRdlAoFhYYEDA4FhYYEAAAEAAAAAA5MCXAARAAAlASYiBwEGFQYWMjcJARYyNjQDiP6PChwK/pAKARUbCgFZAVkKGxXiAXAKCv6TChEOFAoBWf6nChUaAAEAAP/3A40DCAAbAAAFFjI3NjcBNjQmIgcBETQmIgYVEQEmDgEWFwEWAf0FDQMGAwFoChIYCv7MEhsS/s4KGhEBCgFoBAYDAwMDAVQKGBQI/uAChw0SEg39eQEgCgIUGAr+rAMAAAAAAgAA/+QDWAMdAB0AKAAAASY3JicmBgcuAScOAQcUFx4BFz4BNx4BFz4BNy4BAz4BJw4DFxY2AucBXTRoMlsVFlAnUH8EGhRtRCI+LCo9JURmElUgZCQLAyJELxkDJEABaWQ3SwcBJAMDHwMCeXpITTulBwMcAgIcAwmZOi9yATUuSBADJDVDJgIhAAABAAAAAAN8Ar8AEQAAJSEuASc0NwE+ARcWFwEWBgcGAy79pSApAQsBFxdNJRUNARcPDhoSSQEqHxURAc4kExUNFf4yGzkRCwABAAAAAAN4ArgAEQAAEyEeARcGBwEOAScmJwEmNjc20wJbHyoBAQr+6RdOJRUM/ugPDhoSArcBKSAUEv4yIxMVDBUBzhs6EQoAAAAABAAAAAADYALcAAsAFQAjADEAAAEuASc+ATceARcOAQMOARQWMjY3LgETJy4BDwEOAR0BITU0JgchNTQ2PwE2Fh8BHgEVAgNKYwIBZEpLYwICY0sxQUFiQQICQf1ZZNxkWRgcArkXJv3AGBRJU7ZSShMTAXwCY0pLYwICY0tKYwEhAUJiQUExMUL+YS0xAzEtDTccfn4cNJFNESIIGx4CHhsIIBEAAAAAAQAA//cDiQMIABwAABMGFBcWFwEeAT4BJwEhPgE0JiMhATYuAQciBwEGegICAwQBUwoZEwEI/t8Chw0SEg39eQEhCQIUCw0K/q0EAYkGDAMGA/6XCQESGQoBMwESGhMBMgoaEQEK/pcDAAAAAQAA/+8C2QMWABEAAAkBFhQHAQYjBiY0NwkBJjQ2MgFfAXAKCv6TChEOFAoBWf6nChUaAwv+jwobC/6QCgEVGwoBWQFZCxoVAAAAAAEAAAAAA5MCXQARAAAJAQYiJwEmNSY2MhcJATYyFhQDiP6PChwK/pAKARUbCgFZAVkKGxUCI/6PCgoBbQsRDRUL/qgBWAsVGwAAAAAEAAAAAAOBAuIAHQAmAC8AOAAAAS4BIg4CFRYXFhcHBhYfARY7ATY/ARY3PgE3NCYHMhYUBiImNDYFLgE0NjIWFAY3PgEyFhQGIiYDEDaLnYxtOQEhHzUbCAEIAgoPAhMRXENFo9kEOpUQFhYhFhb+vRAWFiEVFXIBFSEWFiEVAoYtLy9bdkNJQjwqUAwcDAIKAgoxEAIEv49DdpoWIRUVIRZNARUhFhYhFSYQFhYhFRUAAAABAAAAAANpAv0APwAACQEOASIuAjQ2NwE2FhceARQGBwEGIicjJic0NjcBNh4BBgcBBhQWMjcBPgE1NCYiBwEOARQWFxYyNwE2HgIDYP7HIVZeVUMkJCEBODSFMxgaGhj+xx9OHgEbAQ8OASIKGhEBCf7eChceCwE3Dw89ViD+xxkaGhk2izUBOQoZEQEBgP7IISMjQlVfViEBODEBMBc9QzwY/scdHR8nFSQOASAKARMZCf7gCyAVCwE7DiYVKz0e/sYXP0Y/GTIyATgJAREZAAAAAAEAAP/4A48DCQAbAAABJiIGBwEOAR4BNwERHgEyNjcRARY+ASc0JwEmAg8FDAoC/pcJARIZCgEzARIaEgEBMQoaEgEK/pcEAwYDBgP+rQoZEwEIASD9eg0TEw0Chv7gCQEVCg4KAVMDAAAAAAQAAAAAA3ICuQAXAC8AOwBFAAABIycmKwEiDwEjDgEHER4BFyE+ATcRLgEDDgEjISImJxE+ATsBNj8BMxcWOwEeARclDgEHHgEXPgE3LgEDLgEnPgEyFhQGAxd2MgkQrxEIMnYlMwEBMiYCMyUzAQIzCQEQDP3PDBABARAMhhEIMo8yCBGGDBAB/spLZAICZEtLZQICZUstOwICO1o8PAJgSw4OSwEyJv6aJTMBATImAWYmMv5CDBAQDAFmDBABDklLDgEQDBACZEtLZAICZEtLZP7nATwtLTw8WjwAAAAAAwAA/8ADwQNAAAsAFwAoAAABDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgETAScmIgYUHwEWMjcBNjQuAQICvv0FBf2+vv0EBP2+otgEBNiiodkEBNkh/vyACxkUCpgLGwoBHAoWGwNABf2+vv0EBP2+vv38xwTZoaLYBATYoqHZAf/++oEKFBkLmAoKARsLGRQBAAAAAAEAAP/3A4kDBwAbAAABNjQvAQEuAQ4BFwEhDgEUFjMhAQYeATcyNwE2A4cCAgf+rQoZEwEIASH9eQ0TEw0Ch/7fCQIUCw0KAVMDAXYGDAQIAWkJARIZCv7NARIaE/7PCxkSAQoBaQMAAQAA/+8C2gMWABEAAAkBBhQXARYzFjY0JwkBNjQmIgKg/o8KCgFtCxAOFAr+qAFYChQbAwv+jwobC/6QCgEWGgsBWAFZCxoVAAAAAAkAAAAAAykC9gADABoAIAA5AFEAVQBZAGEAZwAAAQMhAyU+ATceARczHgEXExYGByEiJjUTPgE3OwEuASIGASEiJjUTPgE7AT4BNx4BFzMyFhcTFAYPAQEiBgcDFBYXJTI2NQMuASsBNS4BIgYHFQEhEyEBIQMhJSM1PgEyFhcnMy4BIgYBMR8B3x7+nQJQPT1QAlMNEwEgARIO/f8OEyABEw1/vAE1UDUBX/4BERYgARYQSARTPj5TBE0QFgEhFRAD/iELDgEgDwsCAQsOIAEPC1kCTXRNAQGB/hQfAa7+QAHRHv5rAS3KATlWOQG8rwQwRzECLf4bAeUxPVICAlI9AREN/fwOFAETDgIGDREBKTY2/YsWEQIGEBU+UgICUj4VEP39ERgBAQJGDgv9+wsPAQERCwIDCw4HOk9POgf96wHy/hsB2DAHKzs7KwYkLy8AAAAFAAAAAAN8ArQAKQA2ADwASwBZAAABJyYrATUuASchDgEHER4BFzMWFxY3PgE3MxYXFjMyNz4BNzM+ATc1NCYBDgEmJyY1PgEyFhUUATMyHwEjFw4BJicmNTQ2Mx4BFxYUNwYrASYnLgErASIHNTMDWlQeKSEBOyz+tSw6AQE6LBQLHyQpHSkJogofGyAJCR4rCQkcJgER/iEHICQHAwEYJRkBESERDEWDVgcgJAcDGhIOFgUCSQEGCQoYDiESARcUnwG6UB0lLDoBATos/rQrOwEkFRcIBiYcJBUTAQYoHQElHY8WKf7/Eg4NEgcIExgZEgcBPAxD9REPDhIHCBIZAQ8NBw4sBx4UCwwKTgAAAAEAAAAAA3sCiAARAAABJiIHAScmIgYUHwEWMjcBNjQDbQ0iDP5nzg4iGA3sDSENAbYNAnsMDP5jyg0aIgzoDQ0Buw0hAAAAAAIAAP++A8ADQAALACAAAAEeARcOAQcuASc+ARciBh0BHgEfAhY2PwE2Ji8BNS4BAf+//QUF/b++/QUF/b4NEwEKCK8CDBcHAgULC5wDEgNABf2+v/0FBf2/vv2qEw73CA8DUwMECgwCDBcHSOMOEQADAAAAAANsAsAAJwAzAD8AAAEeARcVFAYHIgYUFjMyFh0BDgEHIS4BJzU0NjcyNjQmIy4BPQE+ATcBIyIGFBYXMz4BNCYnIyIGFBYXMz4BNCYDCCo5ARALGyQkGwsQATkq/e8rOAEPDBskJBsMDwE4KwF22wwPDwzbCxAQC9sMDw8M2wsQEAK/ATkrfwwPASQ2JRALgCs4AQE4K38MDwEkNyQBDwx/KzkB/pMQFw8BAQ8XEJIQFw8BAQ8XEAAAAAADAAAAAANtAoAAEQAgAD0AAAEhIg8BBhQfARYzIT4BNxEuAQMUIyEiLwEmPwE2FyEyFQcmIg8BJyYiBhQfAQcGFBYyPwEXFjI2NC8BNz4BAyv+Wx0UsxERsxQdAaUbJgEBJhgD/lsCArICArICAgGlA58IFAk0MwgUEAgyMggQFggzMgkWEAg2MggBAn8VwBMyFMAVASYbAX8cJf4/BALAAwLAAwEDaQgINDIIEBQIMzMIFBAHMzMHEBQIMzMIFgADAAD/vAPDA0EACwAXADQAAAEOAQceARc+ATcuAQMuASc+ATceARcOAQMmIg8BJyYiBhQfAQcGFBYyPwEXFjI2NC8BNzY0AgC//gUF/r+//gUF/r+i2gQE2qKi2gQE2g0KGQtpagoZFQpqagoVGwtpaQsbFQpuaQoDQQX+v7//BQX/vr///MIE2qKj2gQE2qKj2gIZCQlqagkUGQtpaQsZFAlqagkUGQpoaQsbAAAAAAYAAAAAA3wCtAAqADcASwBRAGEAbQAAAScmKwE1LgEnIQ4BBxEeARczHgEXMjc+ATczHgEzMjc+ATczPgE3NTQmJwEOASYnJjU+ATIWFxQ3Iy4BBw4BByMiJjURNDYzITIWFRcyHwEjNRMOAScmJyY1PgEzHgEXFhQ3BisBLgErASIHNTMDWlQdKSIBOiz+tSw7AQE7LBMKNiMKCxwpCaIKNyMJCR4sCAkdJQEREP4xByAkBwMBGCUZAdSdDUIpHCoIFBIZGRIBTBIZXREMRYNWByAREwcDARkSDhYFAkkBBgkLNSMBFxSfAbpQHSUsOgEBOiz+tCw6ASInAQIGJhwiKgEGKB0BJR2PFikP/vARDw0SBwgSGRkSByUnKAcHJhsZEwFLEhkZEmAMQ0/+vREQBggSBwgSGQEPDQcOLAchKApOAAYAAAAAA3QCuAAXAC8AMAA5AEkAVQAAASMnJisBIg8BIw4BBxEeARchPgE3ES4BAxQGIyEiJjURNDY7ATY/ATMXFhczMhYVBSMeATI2NCYiBiUnIy8BBycPAhEfASE/AQUuASc+ATceARcOAQMYdjIJEK8RCDJ2JjMBATInAjMlMwECMwoQDP3PDRAQDYYQCTKPMggRhgwQ/stqATxaPDxaPAG7LHVSrUcWVEMVEjgCQhIV/qRLZAICZEtLZAICZAJfSw4OSwEyJv6aJTMBATImAWYmMv5CDBAQDAFmDBABDUpLDgEQDKEtPDxaPDyEHGUEWQgICkL+vj0SFNOYAmRLS2QCAmRLS2QAAAAEAAD/8ANbAxkAHQAmAC0APgAAATUuAScuASIGBw4BBxUGFxQWOwEeATI2NzMyNjU2ATIWFyYGBz4BEyImJzMOASU2NzY9AT4BNx4BFxUUFxYXAwoBVkcEPFg9BEZWAVABEQ2/C0RaRAvADBEB/qYNFgYUKhQGFg0VIAh8CSH+zwk4DAJ1WFh1Agw4CQEcpFKAICw6OiwggFKkQmkNESw2NiwRDWoCAw0LBAEDCw39ThUSEhViQCkJDrJYdQICdViyDgkpQAAAAAIAAAAAA1QC1wALABQAAAEeARcOAQcuASc+ARMeARcVITU+AQH9SWACAmBJSGACAmBIksAE/VUEwALWAmBJSGECAmFISWD+VwJgSVVVSWAAAwAA/8ADwANAAAsAFAAhAAABDgEHHgEXPgE3LgEDNDYyFhQGIiYTMhYVERQGIiYnET4BAgC+/QQE/b6+/QUF/ekXIhYWIhcoDRERGhEBAREDQAX9vr79BAT9vr79/WgRFxciFhYCNBIM/pcNERENAWkMEgAFAAAAAAN/AuAAHQA3AEAASQBSAAABLgEiDgIVFhcWFwcGFB8BFjsBNj8BFjc+ATcuAQMOASMGJyYPATc2JicuASc0PgIzHgEXFAYnFAYiJjQ2MhYHDgEiJjQ2MhYHDgEiJjQ2MhYDDjaKnIpsOQEhHjUbBwgCCg8CFBBbQkSi2AQBOWAudUFCPg0LRxYDBggzOgEwWnZCi7QDMDwWIBYWIBaoARUhFRUhFacBFSEVFSEVAoQsLy9adUJJQTwqTwwbDAIKAgoxEQIEvo5Cdf6HKCoDEgMGJT8JEwYjaz41X0onA5JwN2SUERUVIRUVEBEVFSEVFRARFRUhFRUAAAAABgAAAAADdALwAAsAFwBHAF8AdwCRAAAlFAYiJjQ2NzIWFxYFDgEiJjQ2NzIWFxYTBw4BBwUWFwUeARQGIyUuAScmAicuAQcGLgE2Nz4BFx4CHwEWFyU+AT8BPgEeAQUVDwEzMhYUBgcjJicmPwEjIiY0NjsBFiUHMzIWFAYrASImND8BIyImNDY7ATIWFAcjFA8BMx4BFAYrASYnNTQ/ASMiJjQ2OwEWAbwjMyIiGgwWCREBaAEiMyMjGQ0VCRJNJQc0Jf6IBxIBlg0SEg7+ayMxBhcuCAUbEQ0WBQ4NBCAUIR4HBgcTIwF+DxQDJQMVGw7+YQMxJgUICAVDDAEBAzIjBQgIBT8NATlJOwcKCgdiCAoESjYICgoIXAcKqgECMSYFCAgFQw0BAzIjBQgIBT8MTxoiIjQiAQkJEhkaIiI0IgEJCRIBvcYlLgQeDwEBARIbEgEBKiKOARQiAwEDAw8aFgMBBAIEHBwdKGraHwETDsYNDwUVZQEHQwgLBwEBDQMERAcLCAHZZQoPCgoOBWQKDwoKDm8FA0MBBwsIAQwBAwVDCAsHAQAAAAABAAAAAANhAqUAEgAAExcBPgEXHgEHARQGLwEuATc+AeakAZgBIBMGBA3+VSkeuAILEwcdAZ2CAXgCEA0EGRP+DAQZHvgCIxEGBAAAAQAAAAADVwLYABsAAAkBNjQmIgcJASYiBhQXCQEGFBYyNwkBFjI2NCcCLgEcChQaCv7k/uMKGhQKARz+4goUHAoBHQEcChwUCgGAARwKGhQK/uQBHwoVGQv+4v7jChoTCQEc/uQJExoKAAAABQAAAAADSwLQAB8AJwA/AEsAVwAAASM1LgEiBh0BIzU0JiIGHQEjDgEHER4BFyE+ATURNCYBIREUIyEiNQEhNTQ7ARUUFjI2PQEzFR4BMjY9ATMyFQEjIgYUFjsBMjY0JiEjIgYUFjsBMjY0JgMMaQEQGBHTERgRaRokAQEkGgIZGiQk/cgCIgT95wUCIv3eBWkRGBHSARAYEWoE/otECg4OCkQKDg4BApcKDw8KlwoPDwKVHQwREQwdHQwREQwdASQa/hobIwEBIxsB5hok/vX+5wUFAVOTBS8MEBAMLy8MEBAMLwX+0hEXEREXEREXEREXEQAAAAADAAAAAANmAtAACwAPABQAACU3ATcnBwEHIxUhNQMXBycJARcBBwFsSQEPfbNT/skeSgLJ114mXv7TAQBd/wBuggwBEn2zU/7Evz09AfVeJl7+0wEEX/78EAAAAAwAAAAAA3ACwQALABcAPwBcAIQArADMAOgA9AEAAQwBGAAAAR4BFAYrASImNDY3FzIWFAYrASImNDYzJyImPQE+ATchHgEXFRQGByIGFBYzHgEdAQ4BByEuASc1NDY3MjY0JhcOAQcVHgEzITI2PQEuATQ2NzU0JichDgEHFR4BASEuASc1PgEzPgE0JiciJic1PgE3IR4BFxUOASMOARQWFzIWFxUOAQEOAQcVFBYzHgEUBgciBh0BHgEXIT4BNzUuASMuATQ2NzI2NzUuAScRISImPQE3PgE0Ji8BNTQ2MyEyFhcVBw4BFBYXMxUOASUVFBYzITI2NzUuATQ2NzUuASMhIgYdAR4BFAYlIyImNDY7ATIWFAYnIgYUFjsBMjY0JiM1IyImNDY7ATIWFAYnIgYUFjsBMjY0JiMCbQsQEAvbDA8PDNsLEBAL2wwPDwzkDA8BOCsCESo5ARALGyQkGwsQATkq/e8rOAEPDBskJFwBMygBGhMCERMaKDIyKBoT/e8TGgEoMwHk/e8sOgEBEA0aIyMaDRABATosAhErOgIBEQwaIyMaDBEBAjr9xCk4AQ4LHCYmHAsOATgpAhEpNwIBDgocJiYcCg4BAjcp/e8UHAImMzMmAhwUAhEUGwECJzIyJwIBG/2wGRICERIYASc0NCcBGBL97xIZJzQ0AXrbDRERDdsMERHnCw4OC9sKDg4K2w0REQ3bDBER5wsODgvbCg4OCgHkAQ8XEBAXDwGSEBcQEBcQbRAMfys4AgI4K38MDwEkNyQBDwx/KzgCAjgrfwwPASQ3JEAqPwpnFBoaFGcKP1U/CmcUGQEBGRRnCj/+lAE6LH8NEQEiNCMBEQ1/LDoBATosfw0RASI1IgERDX8sOgJ9ATcqfwsOASY4JQEOC38qNwEBNyp/Cw4BJTklAQ4Lfyo3Af25GxVpAQk/UT8JAWkVGxsVaQEJP1E/CmoUG5VlExgYE2UKQVVAC2UTGBgTZQpBVUEFERkRERkRNg4VDg4VDlwRGRERGRE2DhUODhUOAAAAAAMAAP/BA5sDLABAAEwAWAAAATUuAScOAQcVDgEdARQWFzM+ATc1LgEnIzU+ATceARcVIw4BBxUeATsBDgEHLgEjDgEUFjMyNjc+ATc+ATc1NCYFFRQrASI9ATQ7ATIFFCsBIj0BNDsBMhUDWwTEk5TEBBwjKh9VHioBASoeIAOheHiiAyAfKgEBKh8VC09XCRwRHCMjHBEdCHltDR4oASP9lgpVCgpVCgJOClUKClUKAcMMlMQEBMSUDAQoHKkeKgEBKh6pHyoBCnihBASheAoBKh+pHyomPAgPEQEjNyMREApiPQIpH6gbJ0SpCgqpCrMKCqkKCgAAEgAAAAADgAMQACQAPABXAGQAcQB/AKQAyADgAPQBEgEsATkBRgFVAWIBcgGAAAABMzIeAh8CHgEfARUUDgInIQYuAj0BNzQ+AT8CPgIzBQ8BDgEiJi8CFRcWFzMWHwEhMj4BNTcDISIGDwMzMhYVHgEyNjU+ATsBLwEuAiMDHgEXFQ4BIiY9ATQ2FzIeAQ8BBiImND8BNiUyHwEWDgEjIi8BJj4BAyMGLgI9ATc0PgE/AT4DMyEyHgIfAh4BHwEVFg4CJwEiDgIPAg4BBx0BFB4CNyEWPgInNScuAS8DLgIjEyEnJi8BJi8CMxceATI2PwIXBw4CJSE3PgE3NSMVDgEiJic1IxUWHwElLgE1LgErATcXJz8BPgEzNyEWFxYfAiMOARUOASUzMhYXFBYyNjU+ATsBLwEmLwIhByIGDwE3IiY9ATQ2MhYXFQ4BJw4BHQEUFjI2NzUuARcjIiY0PwE2MzIeAQ8BBjciDwEGFB4BPwE2LgEFIi8BJjY3NjMyHwEWBgcGJyIOAR8BFjMyPgEvASYCygIDGhoRAlIGBAYBAQcdHwb9mgUeHAcBCQkCRAkIGBgFAiPRAQtBVkELAc4BAQIBAwUHAmUECwYBfv5bAwkDBwVF2QoPASg+KQEOC9dKBwQIDATNCw4BAQ4WDg7vCQ8CBjoIFw4GOgf+SAwIOQYCDwkMCDkGAg9DBgUhHQgBCgkCRAIQGRoFAagEGxsSAlEHBQYBAQEJHyAH/fMFFhcPAUQGBAkBBxkdBAJmBh0aCAEBAQYEBlEKCBgZA2X9mwgGBAIDAQEB2AIKP1M+CgPZAQIBCAz9lgJlCQQEAckLRFpDDMUBAgUBOSEsAQsJ4AUBAUMHAwkFCAGqCQkFBAhP4AkMASv+rs8NEQEmOiYBEQ3ORQcEBAgJ/lsHAwUDBfANEREaEQEBEQ0JCwsSCwEBC6YFDREHOgkOCxIDCDoHKQkHOgQLEwY6BQEN/m4PCTkIAwoICw4KOQcCCghEBwwCBTkGCgcMAgU5BgIhBQ8RA4IMChcKDYcHHBkHAQEHGR0EhxEMHhMDdwwJDwTuAQQpMjIpBAGHBQQCAgECAwUDBAFDAgIFB3kOCx8nJx8LDnUIBAUDAR0BDguSCg8PCpILDkkMFQhICQ8TB0gJAglICRQMCkcJFAz9ogEIGx4FhxENHxMDeAMTEAQFEBIDgA8KGAoNiAgdHAcBAbcDDxECeAwJHQwQhgQbFwcBAQYYGQeHDQkXCQyBCwkNBf57AgEDAQQEBowJJzAwJwgBjQUEBwQKAgEFA4IBKzQ0KwGBBQMCXQEqIQkLCgEBdwcFBQEBBAMFCH0BCwkhKmkRDR0lJR0NEW4HBAIDAQEDBAZmEgySDRERDZIMEsUBCwmSCAwMCJIJC8MRGAlHCw8YCkgJeAdIBRALAQhHBxAKeAtIChgJBgtIChgIB3oKEAdHCAoQB0gHAAQAAAAAA8QCywAPABsAJAAtAAAlJgInJjc2EjcWEhcWBwYCAR4BFz4BNy4BJw4BBS4BNDYyFhQGJw4BFBYyNjQmAf/U4wYGBgbk09XjBQcHBeP9rxrEnp7FGhrEn57EAWM7T092T087HysrPisrNBIBDh0NERwBDhIT/vEdDREa/vMBOTfKCwvKNzbKCwvKyAFPdk9Pdk/VASs+Kys+KwAEAAD/wANsA0AADgAaACYAMAAAAQ4BBxYAFxYyNzYANy4BAy4BJz4BNx4BFw4BAw4BBx4BFz4BNy4BBy4BNDYyFhQGBwH6ndEEFQEqIQkTBx8BLBUE0ZxB4Q0Eq4B/qwQN4UA+UgICUj49UgICUj0hLS1BLS0hA0AE053V/t0MBwcMASPVndP8zyr1oIGsAwOsgZ73AhUCUj4+UgEBUj4+Ut4BLEItLUIsAQAAAgAA/7wDwwNBAAsAKAAAAQ4BBx4BFz4BNy4BAQYmND8BJyY0NjIfATc2MhYUDwEXFhQGIi8BBwYCAL/+BQX+v7/+BQX+/sAOFQpqagoVGQpqaQsZFAppbgoVGwtpaQsDQQX+v7//BQX/vr///acBFBkLaWkLGRQJamoJFBsLaWcLGRQJamoJAAIAAP/AA8EDQAALABwAAAEOAQceARc+ATcuARMBBiIvASY0NjIfAQE2HgEUAgK+/QUF/b6+/QQE/Tb+5AobC5gKFBkLgAEECxsWA0AF/b6+/QQE/b6+/f6a/uUKCpgLGRQKgQEGCQEUGQAAAAkAAAAAA4EDGwAcADEATQBZAGUAcQB9AIsAlAAAAREuAScjBwYrASIvASMOAQcRHgEXIRYzPgE3NCYHIicuATU+ATcyFxYXFhcWFAYHBgclIiY1ETQ2NzMXFjsBMj8BMx4BFxEmIw4BBxQXAyEyNjQmIyEiBhQWFyEyNjQmIyEiBhQWEzMyNjQmKwEiBhQWEyMiBhQWOwEyNjQmFz4BNzUuASIGHQEUFjMHFBYyNjQmIgYDSAEyJVQ5BwqlCgg4VSUxAQExJQF8Ji1GXQEehiMcExYBOywbFwsLDQgLGBYbH/4xCw8PDD0oGCGlIRkmPwsPARcYRl0BFdgBCwoNDQr+9QoMDAoBCwoNDQr+9QoMDCvcDBAQDNwMEBBpfgkNDQl+Cg0N5QkNAQENEw0NChgPFg4OFg8BQgFJJTEBMQcHMQExJv4EJTEBFwJdRSVBzRUPKxksOgINBwkMERUzLg8RARcQCwH9Cw8BIxUVIwEPC/7XBwJdRSwmAYANEw0NEw19DRMNDRMNAW0QFxAQFxD+Qw0TDQ0TDXoBDQlCCg0NCkIJDSUMDg4XDg4AAwAA/78DwwNAAAsAFwApAAABDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgETJzUuASIGHQEUHwEWMzI3NiYCAr79BAT9vr79BQX9vqHZBATZoaLYBQXYFZkBEhsTE60HBhQLBAkDQAX9vr79BQX9vr79/McE2aGi2AQE2KKh2QFGR98OEhIO8hQKUwIUDBgAAAAAAgAA/9sDGAMlAA0ANwAAAREOAQcuAScRPgE3HgEXIgYdAQ4BBy4BJzUuASIGHQEeARcVIw4BFBYXIT4BNCYnIzU+ATc1NCYCiwFNOzpNAQFNOjtNcA0SAnxdXHoCAREZEgKLbHEMEhIMARwNEhINcGuMAhACnP7kOk0CAk06ARw6TgEBTvISDEhcfAICfV1IDBISDEhtmg9RAREaEQEBERoRAVEOmm5IDBAAAAQAAP+8A8QDRAAMABUALAA4AAAlIiYnET4BMhYXEQ4BBxQWMjY0JiIGAS4BJyYiDgEHBhQXHgEXFjI3PgE3NjQBLgEnPgE3HgEXDgEB/gwQAQEQFxABAQ8oEBgPDxgQAb4jfFFUuKR9IiQkIn1RU7hUUH0jI/49pdwEBNylpdwFBdz1EAwBfgwPDwz+ggwQbwwQEBcQEAGfUXwjI0Z8UVS4U1F9IiQkIn1RVLf+HwTcpabbBQXbpqXcAAAAAwAAAAADwAHCAAgAEQAaAAATHgEyNjQmIgYFFBYyNjQmIgYFHgEyNi4BIgZBASo/Kio/KgF0KkAqKkAqAXQBKj8rASo/KgF3HyoqPyoqIB8qKj8qKiAfKio/KioAAAAAAgAAAAADUwLBAAwAJAAAJQ4BIyEiJjQ2MyEyFgMHBiIvASY0NjIfARE0NjIWFxE3NjIWFANSAREN/ZkNEhINAmcNEZCrCRwIqQkSGQl2ExoRAXYJGRJdDBISGRISASKrCAirCRkSCXYBYgwSEgz+nnYJExgAAAAABgAAAAADSAL7AAwAGQBEAEoAVQBiAAABFAYHIy4BNDY7ATIWNxQGByEuATQ2MyEyFgMnIyYHIQ4BBxEeARczFjY3Ni4BKwEuATURNDY3IRUeARczFRQWFz4BPQEnIiYnNRcTDgEiJic+ATceAQcuASsBIgYUFjsBMjYCLxINmg0REQ2aDRJ5Eg3+7Q0REQ0BEw0SKAsGByT+7is4AQE4K9IDDAcJAhMK0hAWFhABCgE5KlQOEhANkRAVAW5gAleEVwICV0JCVzgBDguPCg8PCo8LDgFTDBIBAREaEhJ8DREBAREaEhIBBwoBAQE4Kv3dKjgBAQMGCCANARUQAiMQFQFUKjgBpwIQAQEQAuAFFhBIbv5vQldXQkFXAgJXPAsODhYODgAAAAAGAAAAAANEAuAAEgAWABoAJgAuADYAAAERIzUhDgEHETMVIyImNRE+ATcHIRUhFTMVIyUOAQceARc+ATcuARcOAQcmJzcWBz4BNxYXByYC/j7+tDNEAcPZERYCZk0kARz+5I6OAT9NZgICZk1NZgICZisBRDMsIK8V8AFEMyUdqw4C3/7c5wJDM/5JPRYRAc1MZwK1PT88HAJmTU1mAgJmTU1mszNEAQEaoR0nM0QBARKeGgADAAAAAAN6Ap8ADwAYACQAAAEhIgYHER4BFyE+ATcRLgEFIRYdAQUlNTQBISYnEQUWNjclERQDOf2KGyUBASUbAnYbJQEBJf1vAnYJ/rz+vAJ//YoJAQE2BhIGATUCniUb/kMbJQEBJRsBvRslNwEIF8zMFwj+MQEJAWXCBQIDw/6aCQACAAAAAANKAs8AJwAzAAABIy8CDgEUFjsBBy4BIw4BBx4BFz4BNzQmJzY/ARUUFjI2PQEvAgMOAQcuASc+ATceAQM+AQMGuwwPEAtxiCJXMW2SAwOSbW6RAxoZAwOFEBgQAgQEvgJyVlVzAgJyVlZyAskCAgEBDxgQiR4iA5FubZIDA5JtK04hAQOFcQwQEAy3BwgE/oRWcgICclZWcgICcgAAAAQAAAAAA0AC6wAXACMAUQBZAAAlJzY1LgEnIg4CFR4BFzI3FxYyNzM2NCcOAQcuASc+ATceAQMhIgYHDgEXEQYWFxYXFjchJyYvASMiJy4BNRE2NzYzIRUUFhceAR8BMxUfATUnJicmJz0BFwM1TB4CaVAmQzYcAmpPOC9LDB8LAQttAUw6OUwBAUw5OkyN/sgFHRINCgEBBgkOFhEHAT9HFhIZtwkDAQIDAgkEAQcGDAoYBQdYIxmJCAUBATxvTC44UGkCHDZEJVBpAh5LCwsLIL05TAEBTDk6TAEBTAGPCREPHwf9/QgfDRIGBAEXBwsTAwIJBQIADAIIPgcfDwwNAgNSGxnBAQMFAgQIHzUAAgAAAAADYQLGAAMADQAAATcXBxMVITUzPwEXDwECHnCqcJn9PzxI36rtpAJWcKpw/tA9PdTsqt83AAAAAgAAAAADiAMBACkATQAAASYnJi8BJiIPAQYHFQ4BFjsBERQWFzM+AT0BMxUeARczPgE1ETMyNjc0BxEjNTQmJyMOAR0BIxE0JicjBj8BNj8BNh8CMxUWFQcjIgYDgQYLO1KzFDQTs1I7FwEnGiccFo0WHFgBHBaNFR0mGyYBpnUdFXEWHHUcFjMDAQE8UbMEBbONAQEBMxYcAckNCjFGmhAQmkYxARc0J/7GFRwBARwVtLQVHAEBHBUBOicaDkP+x7IVHAEBHBW0ATsWHAEBAwQxRpoEBJp4AgIBARwAAAACAAAAAAOIAnEADwAiAAABISYGBxEeATchFjY3ES4BBSYPAQYdARQWHwEWMxY3NjURJgJh/mEEPQQEPQQBnwQ9BAQ9ARgKB4kGAwOJBAcCBggBAm4DFjD+qzEVAgIVMQFTMhYlAwVrBgaqAwcCagQBAwQKAX4LAAAEAAD/9ANUAxAAEwAhADQAPQAAASImLwEHDgErAREUFh8BNz4BNxEDDgEPAScuASc1NjcWFwcmBgcGFhcVFBYyNj0BPgE3NiYHNDYyFhQGIiYDUHCnOAICOKdwA1BHvb1HTwE+AUE6mpo7QAGqbGur+TBPDgsvLRIaEh4rCAsvgR4tHh4tHgKdODgCAjg4/vBWlDF9fTGUVgEQ/vBGeShmZih5RtQMUFAMNwsvLy9QDY4NEhINjggsHjBPYhYeHi0eHgAACQAAAAADSwLgABQAIQArAEUAYQCCAI4AmgCmAAABIzUuASchDgEVERQWFyE+ATcRLgEDISImJxE+ATMhMhYVEyMRMzIWFREUBgEiLwEVFAYiJj0BNj8BMh8BNTQ2MhYdARQHMyImJzU0NjsBMhYGKwEVMx4BBgcjFTMyFhQGIzMjJi8BJjY3MxYfATc2Mh8BNzY3Mx4BDwEGByMiLwEHBgciJjQ2MyEyFhQGIwUiJjQ2NyEeARQGIwUiJjQ2MyEyFhQGIwL0GwExJP6EJDIyJAHtJTEBATF8/moLDwEBDwsBfAsPVxsbDA8P/mIIBSEJDQoBCgUIBSEJDQkLMgYJAQoGPgkJCQkuLgkJCQkuLgcJCQc0AQwCDgEIBgMMAwULBBYEDAQDDQIGCAEOAgwBCwQSEgTxCAsLCAE2CAsLCP7KCAsLCAE2CAsLCP7KCAsLCAE2CAsLCAIiZyUxAQExJf3tJTEBATElAVUlMf46EAsCEwsQEAv90gGLDwz+qwsQAY8HMioGCQkGXQsEAQcyKQcJCQddCwQJBl0HCRAPDwEPDwEPCQ0JAgtdBwoBAQwfIgkJIh8MAQEKB10LAgozMwqaDhUODhUOYQ4VDgEBDhUOWQ4VDg4VDgAAAAAKAAAAAANQAwAAAQADAAUABwAZACUAMQA9AEMARQAAARU1FTUVNRU3JyYjISIGBxEeARchPgE3ETQFMzIWFAYrASImNDYBIS4BNDYzITIWFAYnISImNDYzITIWFAY3IiYnNR8BNQMdKogJDf54GB8BAR8YAfcYHwH+KZcKDw8KlwsODgE5/tILDg4LAS4LDg4L/tILDg4LAS4LDg4CCQsBbRECHQEBAQEBAQFRigggF/2kGB8BAR8YAewNJQ8VDg4VD/6fAQ4VDw8VDpcOFQ8PFQ7YDAhZbTMBAAAACAAAAAADSgL9AA8AFwAfAEIATgBWAF4AawAAASEiBgcRHgEXIT4BNxEuAQcVBgcjNTMyIRUjJic1NjcBIzc+AS4BBwYPAScmJyYOARYfASMiBh0BFBYXIT4BNzU0JiU+ARcWHwEnJicuARcjJj0BNDc7AhYXFQYHIz8CNjc2HgEGBwYPAQMH/fIPFQEBFQ8CDhAVAQEVJgEGxMQG/uvEBgEBBgIOZgceBzRMIBYILSwIFiBMNAceB2YQFRUQAkkPFQEV/iYKHQwFAyZTBQQMAoniBgbiS+EGAQEG4UMBAQMFDB0TAwsEBVMBfhYP/twQFQEBFRABJA8WQuoGAff3AQbqBQEBCAYbTD4HGhIbYGAbEhoHPkwbBhUQdQ8VAQEVEHQQFWwLAwoEBlEfAgQJHuQBBTsGAQEGOwUB5gECBgQKAxcdCQQCHwAAAAACAAAAAAN+AqIACgAbAAABJTcuASchDgEHFwUHBQ4BLwElJxEUFjMhMjY3AgABUisFIhj9hxkiBCgCzw3+nwYPBwL+oA0lHAJ3GyUBAX3VHBccAQEcFRwpCd8EAQMC3wf+dxwlJRwAAAQAAP+9A8ADPwALABQAHQAmAAABDgEHHgEXPgE3LgEDLgE0NjIWFAY3DgEiJjQ2MhYFDgEiJjQ2MhYCAL79BQX9vr79BQX9vhIZGSUYGMgBGCYYGCYY/qMBGCUZGSUYAz4F/b6+/QUF/b6+/f4ZARgmGBgmGCsTGBgmGBgTExgYJhgYAAcAAAAAA2ACxAANABcAKwA4AEUAUgBwAAABIjMOAQceARc+ATcuAQMuATQ2Nx4BFAY3FAYrASImJzQ3NTQ2HgEXFTMeASUUBisBIiY0NjczMhY3DgErASImNDY3Mx4BBw4BKwEiJjQ2NzMeASUVFAYiJi8BNSERMzIWFAYHIyImJxE0Nj8BIR4BFwKXAQFWcQICcVZVcQMDcVY8UFA8PVBQKhEMYg0QAQEQGRABRQwR/qkQDWIMERANYgwRlAERDPUMEREM9Q0QkgEQDWIMERANYg0QAVcRFxACAf4h1wwRDQvhFR4DGhUHAekVHgMBzwJyVVVyAgJyVVVy/qsBUXhQAgJQeFF0DBERDAQDXAwRARAMRQEQVQwRERkQARK4DBERGRABARBvDBERGRABARDQkwwSDgoGjv3vEhcQAhsVAiEVHQMBARoVAAAABgAAAAADUAMAABEAFwApADYAQwBQAAABJyYjISIGBxEeARchPgE3ETQHIiYnNRcTFAYHIS4BNRE0NjMhFR4BOwEDDgEjISImNDYzITIWNw4BIyEiJjQ2MyEyFicOASsBIiY0NjsBMhYDR4gJDf54GB8BAR8YAfcYHwGcCQsBbQcLCf47CQsLCQEpAR8XeVsBEQz+0QwREQwBLwwRAQERDP7RDBERDAEvDBGWAREMmAwREQyYDBECbYoIIBf9pBgfAQEfGAHsDRYMCFlt/jYJCwEBCwkCKggMeRcg/vANEREaERGKDRERGhERig0RERoREQAAAAQAAAAAA4sCxAAiAD4ARwBcAAABDgEHFQ4BIwYnNS4BNz4BNy4BJyYjJgcGLgE2NzYzHgEXFgMBJiIGFB8BDgEPAQYXHgEXFhcWFzY3FxYyNjQBNDcXDgEjLgEXIicuASc+ATcXBgcUHgIzMjcXBgOBAyMfBQ0GCwkJAgcWGwUNNShncxkYDRMGDwwfH7fEBgk9/bUKFxMJTS9TIQMGBgI0MTk/TlRsZFEJGxL+bA9XCBYLGSQ9cmgoNQ0SSjhWHwETIi0YLyRRTgFiBzklAQQFAQYBBxoJGykJF0glYAEFAg4YEwQFEOkaDv8AAksJEhgJTiNiOwQMEARTNjohKQEBRVIIEhcBBhcRVggIASPEXyZIFiBdKVYiMRksIxIgUTUAAAAFAAAAAANZAycAMABDAFUAZAB1AAAlBgcOASImJyYnNDc2NzMyHgEGBw4BBxQXFRYXMx4BMjY/ATY/AS4BJyY1NDYXFhcWAy4BIg4CFBYfARYyPwE+ATQmAwcOAS8BJjU0PgIyHgIUBicuASIOAhUeATI2NzQmBwYiJy4BNTQ3PgEzHgEXFAYDWAFnLnuOei9nASolRAIKFQ0MFCovBAobHgEsbHFrLBYVDgkEKTgaGRBIJy2JKWt2a1IuKyigEzYTpSstLVWCGRIZgkQjQVVdVEIkI1sVNzw2KxcCVIBVARc+G0wbDA0bDSERJTQBDXo5IA8PDw8gOSIaFxAIGRkECxUFAgUBEQcMDAwMCQYJCQUSDQkdDxIFEBcbAjIoLS5Sa3dpKaAREZsra3lr/rWCGgEbgkxYL1NDIyJCVF9U3hUWFio1HEBVVUAcNZUbGw0gEiYbDA0BNSQSIAADAAAAAAOQAusAGAAwAEAAAAEuASIGDwEnLgEiBgcGFBcBFjY3AT4CJgcJASY0Nz4BMhYfARYyPwE+ATIeAhQGJScHBgcGDwEXCQE3LwIHA08hUVxSIQ4RIFJbUyFCQgE5ChkKATkgIQEgS/7c/twwMBc7QTwXJQoZCCUYO0E7LxgU/r2OVksLAxgbMQFFAV0MNSZXHgKmICQkIBERICQkIEa4R/7BCQIHAT8hU11T9/7WASo0hzQXGhkYKAkJKBcaGTA9RT3OWBoYBg5FUGj+wQFdnEwmGA0AAAAAGAAAAAADSQLJAA8AEwAjACcANwA7AEsATwBfAG8AfwCPAJMAlwCbAJ8ArwC/AM8A3wDjAOcA6wDvAAABIyImJzU+ATczHgEXFQ4BJzM1IwUjIiY9ATQ2NzMeARcVDgEnMzUjEyMiJj0BNDY3Mx4BFxUOASczNSMHIyImJzU+ATczHgEXFQ4BJzM1IwUjIiY9ATQ2OwEyFhcVDgEDIgYdARQWFzM+ATc1LgEjASMiJj0BNDY7ATIWHQEUBgMiBh0BFBYXMz4BPQE0JiMFIzUzBzM1IwcjNTMHMzUjJSMiJj0BNDY3Mx4BFxUOAQMOAR0BFBY7ATI2NzUuAScBIyImPQE0NjczHgEdARQGAw4BHQEUFjsBMjY9ATQmJwUjNTMHMzUjByM1MwczNSMBrccSFwEBFxLHERcBARfQtrYCK8cSFxcSxxIXAQEX0La2vscSFxcSxxIXAQEX0La2rscSFwEBFxLHERcBARfQtrYCK8cUGhoUxxQaAQEa2w8VFQ/HEBQBARQQ/pTHFRoaFccUGhvbDxUVD8cQFRUQAWrAwLasrLfAwLasrAImxxQaGhTHFBoBARrbDxUVD8cQFAEBFBD+lMcVGhoVxxQaG9sPFRUPxxAVFRABasDAtqyst8DAtqysAakXEscSFwEBFxLHEhcytugXEscSFwEBFxLHEhcytv2rGBHHEhcBARcSxxEYMrboGBHHEhcBARcSxxEYMrbtGhXHFBoaFMcVGgEaFQ/HEBQBARQQxw8V/uYaFccUGhoUxxUaARoVD8cQFAEBFBDHDxXowLastsC2rIUaFMcUGgEBGhTHFBoBGgEUEMcPFRUPxxAUAf7mGhTHFBoBARoUxxQaARoBFBDHDxUVD8cQFAHowLastsC2rAADAAAAAANLAvAAJQA1AEIAAAEhNT4BMzIWFx4BPgEnLgEjIg4CHQEjDgEHER4BFyE+ATcRLgEFIR4BFREUBgchLgE1ETQ2FyIGHQEUFjI2PQE0JgLu/qYBQzAnOw0FFxoMBRNeOyRBNRtAJzQBATQnAdwnNAEBNP39AdwKEBAK/iQLDw/5DhMTHBMTAdpkL0EpIw0MChgNNkIbM0AkZQE0J/7xJzQBATQnAQ8nNUEBDwv+8QsPAQEPCwEPCw8yEAxdCxAQC10MEAAAAAABAAAAAAOFAv8ALAAAAScmLwEmIg8CBh0BHgEXMxEUFjsBPgE3NTQ3MxYXFR4BOwE+ATURMzI2NyYDcB1pswsUMBSGvBcDIxkqGxSSExgBEzgSAQEaFZITGCoaJAEBAdsYWZoJEBBzoBIdBBogAf7CFBsBGxOlEgEBEqUUGwIaEwE/JBodAAAAAQAAAAADfwK5ADMAABMhMhcVFAcOARUUFxYXFjI3PgE1NCYnIic1NjsBMh0BFCMOAQcOAQcGIicmJwIjJic3NDOHAUgEAQQcFicmRQEFAkc3HB4DAQEE/QQEJDIhLW45EDsPHjbAPAQBAQQCuQQUBAEEEhQcW1iDAwOfkBwXFgQEFAUFFAQEKUFX74gZGT9vAY4BBBQEAAADAAAAAANkAp8ADAAaACcAACUOASMhIiY0NjchHgE3DgEHIS4BNDY3IRYXFjUOASMhIiY0NjMhMhYDZAEXEf2IEBgYEAJ4ERcBARcR/YgQGBgQAngUDQgBFxH9iBAYGBACeBEXfQ0RERkRAQER9QwRAQERGREBAQwI+AwSEhgSEgAAAAAFAAD/2wMyAyUADQAvADsARABRAAABLgE9AS4BIgYdARQWFwEiBh0BDgEHIicHFhcVIw4BFBYzITI2NCYnIzU+ATc1NCYnFQM1ByYnET4BMhYTFQ4BByInNzMBLgE3AT4BHgEHAQ4BAU8TFAERGhEfHQHTDRICfF01LCgyO3EMEhIMARwNEhINcGuMAhB95B8OAQJNdE4BAU46FhMvAf7XCwIJAhgKHBYCCf3nCRwBAhtAI0gMEhIMSDFXJAEQEgxIXHwCFy0cCFEBERoRERoRAVEOmm5IDBC4LP74ASUbIQEcOk5O/vdNOk0CBzf+9gkcCwJ3CwITGwz9igsDAAAABQAA/8ADwANAAAsAFwAcACgAPQAAAQ4BBx4BFz4BNy4BAy4BJz4BNx4BFw4BAzY/AScTDgEHHgEXPgE3LgETBg8BBiImJy4BNRE+ATcyHwEWFxYB/739BQX9vb79BQX9vqHYBQXYoaLYBATY2A1aaM9BtO8FBe+0tO8FBe8eBw3wDRwZCAQDAR4YDQ3wFAQGAz8F/b2+/QUF/b69/fzIBNiiodgEBNihotgBBAc0OnYBLQXvtLXvBATvtbTv/kYNB4kHDw4FDgcBExcfAQeJDRcUAAACAAAAAANZAr0ACQAkAAATMxEjLgEnET4BPwE2HwEeAQ8BMx4BFxUUDwEOAQchLgEnETQ3xF5eDRIBARK0yQoLGwsJAyTJGyMBBWEEDwr+qw4RAQkBwv6GAREOATsNEinJCQcUCRsOjgEkGkMMDOwJCgEBEg0BbQ0JAAAAAAASAN4AAQAAAAAAAAATAAAAAQAAAAAAAQAPABMAAQAAAAAAAgAHACIAAQAAAAAAAwAPACkAAQAAAAAABAAPADgAAQAAAAAABQALAEcAAQAAAAAABgAPAFIAAQAAAAAACgArAGEAAQAAAAAACwATAIwAAwABBAkAAAAmAJ8AAwABBAkAAQAeAMUAAwABBAkAAgAOAOMAAwABBAkAAwAeAPEAAwABBAkABAAeAQ8AAwABBAkABQAWAS0AAwABBAkABgAeAUMAAwABBAkACgBWAWEAAwABBAkACwAmAbdDcmVhdGVkIGJ5IGljb25mb250dXZpY29uLWljb25mb250UmVndWxhcnV2aWNvbi1pY29uZm9udHV2aWNvbi1pY29uZm9udFZlcnNpb24gMS4wdXZpY29uLWljb25mb250R2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AQwByAGUAYQB0AGUAZAAgAGIAeQAgAGkAYwBvAG4AZgBvAG4AdAB1AHYAaQBjAG8AbgAtAGkAYwBvAG4AZgBvAG4AdABSAGUAZwB1AGwAYQByAHUAdgBpAGMAbwBuAC0AaQBjAG8AbgBmAG8AbgB0AHUAdgBpAGMAbwBuAC0AaQBjAG8AbgBmAG8AbgB0AFYAZQByAHMAaQBvAG4AIAAxAC4AMAB1AHYAaQBjAG8AbgAtAGkAYwBvAG4AZgBvAG4AdABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAARzdGFyBXBhdXNlCXN0YXItZmlsbBJza2lwLWZvcndhcmQtcmlnaHQLd2VpeGluLWZpbGwEdGFncw9xdWVzdGlvbi1jaXJjbGUFdHJhc2gLdm9sdW1lLWZpbGwEcGx1cwV3b21hbgZyZWxvYWQPdGh1bWItZG93bi1maWxsBXNoYXJlC3NlcnZlci1maWxsEHBsdXMtY2lyY2xlLWZpbGwIdGh1bWItdXAJdGFncy1maWxsBW1pbnVzFHpoaWZ1YmFvLWNpcmNsZS1maWxsB3NldHRpbmcLcGx1cy1jaXJjbGUJYmVsbC1maWxsCXZvbHVtZS11cAZ0d2l0dGUHcXEtZmlsbAp0aHVtYi1kb3duEXBhdXNlLWNpcmNsZS1maWxsBXBob3RvCmVtcHR5LXBhZ2UKc2VydmVyLW1hbghpbnRlZ3JhbAZmb2xkZXIFb3JkZXIMcGF1c2UtY2lyY2xlCGV5ZS1maWxsCWdyaWQtZmlsbAxlbXB0eS1jb3Vwb24HZXllLW9mZgRsb2NrC21vcmUtY2lyY2xlC2luZm8tY2lyY2xlB21vbWVudHMQbG9jay1vcGVuZWQtZmlsbAVoZWFydAxtaW51cy1jaXJjbGUJbG9jay1maWxsEGluZm8tY2lyY2xlLWZpbGwIbWFwLWZpbGwIbGlzdC1kb3QKcGhvbmUtZmlsbA9wbGF5LXJpZ2h0LWZpbGwOcGxheS1sZWZ0LWZpbGwLcGxheS1jaXJjbGUJZ2lmdC1maWxsDWludGVncmFsLWZpbGwKcGxheS1yaWdodApwaG90by1maWxsDHB1c2hwaW4tZmlsbA5xcS1jaXJjbGUtZmlsbAVwaG9uZQpzaGFyZS1maWxsFHF1ZXN0aW9uLWNpcmNsZS1maWxsCnZvbHVtZS1vZmYJcGxheS1sZWZ0B3dhcm5pbmcTbW9tZW50cy1jaXJjZWwtZmlsbApyZWQtcGFja2V0DHNoYXJlLXNxdWFyZQ5za2lwLWJhY2stbGVmdAx3YXJuaW5nLWZpbGwPdm9sdW1lLW9mZi1maWxsDXNob3BwaW5nLWNhcnQId2lmaS1vZmYSd2VpeGluLWNpcmNsZS1maWxsCnRyYXNoLWZpbGwTdHdpdHRlci1jaXJjbGUtZmlsbAxzZXR0aW5nLWZpbGwHcHVzaHBpbhJzaG9wcGluZy1jYXJ0LWZpbGwEc2NhbgZzZWFyY2gIYXJyb3ctdXAOYXJyb3ctZG93bndhcmQKYXBwbGUtZmlsbA1hcnJvdy11cC1maWxsD2Fycm93LWRvd24tZmlsbAdhY2NvdW50DmFycm93LWxlZnR3YXJkC2Fycm93LXJpZ2h0CmFycm93LWRvd24JY2hhdC1maWxsBmF0dGFjaAxhcnJvdy11cHdhcmQGY2FtZXJhEGNoZWNrbWFyay1jaXJjbGUPYXJyb3ctcmlnaHR3YXJkCmFycm93LWxlZnQDYmFnCGNhci1maWxsCWNoZWNrbWFyawpjbG9jay1maWxsC2NvdXBvbi1maWxsCWJhY2tzcGFjZQxjbG9zZS1jaXJjbGUDY2FyC2NhbWVyYS1maWxsBGJlbGwMYWNjb3VudC1maWxsEWVycm9yLWNpcmNsZS1maWxsBGNoYXQJZW1wdHktY2FyDWNoZWNrYm94LW1hcmsFY2xvc2UIY2FsZW5kYXIIZWRpdC1wZW4GY291cG9uCmtlZnUtZXJtYWkLZW1wdHktZmF2b3IDZXllA21hcBFjbG9zZS1jaXJjbGUtZmlsbBVjaGVja21hcmstY2lyY2xlLWZpbGwLZW1wdHktb3JkZXIFY2xvY2sDbWljDGVycm9yLWNpcmNsZQ1tb3JlLWRvdC1maWxsCGRvd25sb2FkCmVtcHR5LWRhdGEKZW1wdHktbGlzdAVlbWFpbANtYW4MZW1wdHktc2VhcmNoDWVkaXQtcGVuLWZpbGwEaG9tZQVtb3ZpZRBlbXB0eS1wZXJtaXNzaW9uCmVtcHR5LW5ld3MOZmlsZS10ZXh0LWZpbGwEZ2lmdAplbWFpbC1maWxsEG1vcmUtY2lyY2xlLWZpbGwNZW1wdHktaGlzdG9yeQlmaWxlLXRleHQPZXllLW9mZi1vdXRsaW5lDWVtcHR5LWFkZHJlc3MKaGVhcnQtZmlsbARncmlkCWxvY2stb3Blbglob21lLWZpbGwFbGV2ZWwEbGlzdAdtaWMtb2ZmEHBsYXktY2lyY2xlLWZpbGwNdGh1bWItdXAtZmlsbAAAAAA=) format("truetype")}.uv-icon.data-v-eab170a5{display:flex;align-items:center}.uv-icon--left.data-v-eab170a5{flex-direction:row-reverse;align-items:center}.uv-icon--right.data-v-eab170a5{flex-direction:row;align-items:center}.uv-icon--top.data-v-eab170a5{flex-direction:column-reverse;justify-content:center}.uv-icon--bottom.data-v-eab170a5{flex-direction:column;justify-content:center}.uv-icon__icon.data-v-eab170a5{font-family:uvicon-iconfont;position:relative;display:flex;flex-direction:row;align-items:center}.uv-icon__icon--primary.data-v-eab170a5{color:#3c9cff}.uv-icon__icon--success.data-v-eab170a5{color:#5ac725}.uv-icon__icon--error.data-v-eab170a5{color:#f56c6c}.uv-icon__icon--warning.data-v-eab170a5{color:#f9ae3d}.uv-icon__icon--info.data-v-eab170a5{color:#909399}.uv-icon__img.data-v-eab170a5{height:auto;will-change:transform}.uv-icon__label.data-v-eab170a5{line-height:1}
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/debounce.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/debounce.js
new file mode 100644
index 0000000..a7df4ea
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/debounce.js
@@ -0,0 +1 @@
+"use strict";let e=null;exports.debounce=function(t,n=500,o=!1){if(null!==e&&clearTimeout(e),o){const o=!e;e=setTimeout((()=>{e=null}),n),o&&"function"==typeof t&&t()}else e=setTimeout((()=>{"function"==typeof t&&t()}),n)};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/digit.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/digit.js
new file mode 100644
index 0000000..a3e30d1
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/digit.js
@@ -0,0 +1 @@
+"use strict";function t(t,n=15){return+parseFloat(Number(t).toPrecision(n))}function n(t){const n=t.toString().split(/[eE]/),r=(n[0].split(".")[1]||"").length-+(n[1]||0);return r>0?r:0}function r(r){if(-1===r.toString().indexOf("e"))return Number(r.toString().replace(".",""));const e=n(r);return e>0?t(Number(r)*Math.pow(10,e)):Number(r)}function e(t){(t>Number.MAX_SAFE_INTEGER||t{u=n(u,t)})),u}function u(...t){if(t.length>2)return o(t,u);const[i,c]=t,s=r(i),f=r(c),a=n(i)+n(c),h=s*f;return e(h),h/Math.pow(10,a)}function i(...c){if(c.length>2)return o(c,i);const[s,f]=c,a=r(s),h=r(f);return e(a),e(h),u(a/h,t(Math.pow(10,n(f)-n(s))))}exports.round=function(t,n){const r=Math.pow(10,n);let e=i(Math.round(Math.abs(u(t,r))),r);return t<0&&0!==e&&(e=u(e,-1)),e};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/index.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/index.js
new file mode 100644
index 0000000..4ef4915
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/index.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../../common/vendor.js"),t=require("./test.js"),n=require("./digit.js");function r(e){let t=this.$parent;for(;t;){if(!t.$options||t.$options.name===e)return t;t=t.$parent}return!1}function o(e,t=new WeakMap){if(null===e||"object"!=typeof e)return e;if(t.has(e))return t.get(e);let n;if(e instanceof Date)n=new Date(e.getTime());else if(e instanceof RegExp)n=new RegExp(e);else if(e instanceof Map)n=new Map(Array.from(e,(([e,n])=>[e,o(n,t)])));else if(e instanceof Set)n=new Set(Array.from(e,(e=>o(e,t))));else if(Array.isArray(e))n=e.map((e=>o(e,t)));else if("[object Object]"===Object.prototype.toString.call(e)){n=Object.create(Object.getPrototypeOf(e)),t.set(e,n);for(const[r,i]of Object.entries(e))n[r]=o(i,t)}else n=Object.assign({},e);return t.set(e,n),n}function i(e={},t={}){if("object"!=typeof(e=o(e))||null===e||"object"!=typeof t||null===t)return e;const n=Array.isArray(e)?e.slice():Object.assign({},e);for(const r in t){if(!t.hasOwnProperty(r))continue;const e=t[r],o=n[r];e instanceof Date?n[r]=new Date(e):e instanceof RegExp?n[r]=new RegExp(e):e instanceof Map?n[r]=new Map(e):e instanceof Set?n[r]=new Set(e):n[r]="object"==typeof e&&null!==e?i(o,e):e}return n}function s(e=null,t="yyyy-mm-dd"){let n;n=e?/^\d{10}$/.test(null==e?void 0:e.toString().trim())?new Date(1e3*e):"string"==typeof e&&/^\d+$/.test(e.trim())?new Date(Number(e)):"string"==typeof e&&e.includes("-")&&!e.includes("T")?new Date(e.replace(/-/g,"/")):new Date(e):new Date;const r={y:n.getFullYear().toString(),m:(n.getMonth()+1).toString().padStart(2,"0"),d:n.getDate().toString().padStart(2,"0"),h:n.getHours().toString().padStart(2,"0"),M:n.getMinutes().toString().padStart(2,"0"),s:n.getSeconds().toString().padStart(2,"0")};for(const o in r){const[e]=new RegExp(`${o}+`).exec(t)||[];if(e){const n="y"===o&&2===e.length?2:0;t=t.replace(e,r[o].slice(n))}}return t}function a(e,t="both"){return e=String(e),"both"==t?e.replace(/^\s+|\s+$/g,""):"left"==t?e.replace(/^\s*/,""):"right"==t?e.replace(/(\s*$)/g,""):"all"==t?e.replace(/\s+/g,""):e}function c(e={},t=!0,n="brackets"){const r=t?"?":"",o=[];-1==["indices","brackets","repeat","comma"].indexOf(n)&&(n="brackets");for(const i in e){const t=e[i];if(!(["",void 0,null].indexOf(t)>=0))if(t.constructor===Array)switch(n){case"indices":for(let n=0;n{o.push(`${i}[]=${e}`)}));break;case"repeat":t.forEach((e=>{o.push(`${i}=${e}`)}));break;case"comma":let e="";t.forEach((t=>{e+=(e?",":"")+t})),o.push(`${i}=${e}`)}else o.push(`${i}=${t}`)}return o.length?r+o.join("&"):""}function u(){var e;const t=getCurrentPages(),n=null==(e=t[t.length-1])?void 0:e.route;return`/${n||""}`}String.prototype.padStart||(String.prototype.padStart=function(e,t=" "){if("[object String]"!==Object.prototype.toString.call(t))throw new TypeError("fillString must be String");const n=this;if(n.length>=e)return String(n);const r=e-n.length;let o=Math.ceil(r/t.length);for(;o>>=1;)t+=t,1===o&&(t+=t);return t.slice(0,r)+n});const l=Object.freeze(Object.defineProperty({__proto__:null,$parent:r,addStyle:function(e,n="object"){if(t.empty(e)||"object"==typeof e&&"object"===n||"string"===n&&"string"==typeof e)return e;if("object"===n){const t=(e=a(e)).split(";"),n={};for(let e=0;e{return null==(t=null==(n=null==(r=e.index)?void 0:r.$uv)?void 0:n.config)?void 0:t.unit;var n,r})()?(t=>{return null==(t=null==(n=null==(r=e.index)?void 0:r.$uv)?void 0:n.config)?void 0:t.unit;var n,r})():"px")){return n=String(n),t.number(n)?`${n}${r}`:n},deepClone:o,deepMerge:i,error:function(e){},formValidate:function(e,t){const n=r.call(e,"uv-form-item"),o=r.call(e,"uv-form");n&&o&&o.validateField(n.prop,(()=>{}),t)},getDuration:function(e,t=!0){const n=parseInt(e);return t?/s$/.test(e)?e:e>30?`${e}ms`:`${e}s`:/ms$/.test(e)?n:/s$/.test(e)?n>30?n:1e3*n:n},getHistoryPage:function(e=0){const t=getCurrentPages();return t[t.length-1+e]},getProperty:function(e,t){if(e){if("string"!=typeof t||""===t)return"";if(-1!==t.indexOf(".")){const n=t.split(".");let r=e[n[0]]||{};for(let e=1;e=0&&t>0&&t>=e){const n=t-e+1;return Math.floor(Math.random()*n+e)}return 0},randomArray:function(e=[]){return e.sort((()=>Math.random()-.5))},range:function(e=0,t=0,n=0){return Math.max(e,Math.min(t,Number(n)))},setConfig:function({props:t={},config:n={},color:r={},zIndex:o={}}){const{deepMerge:i}=e.index.$uv;e.index.$uv.config=i(e.index.$uv.config,n),e.index.$uv.props=i(e.index.$uv.props,t),e.index.$uv.color=i(e.index.$uv.color,r),e.index.$uv.zIndex=i(e.index.$uv.zIndex,o)},setProperty:function(e,t,n){if(!e)return;const r=function(e,t,n){if(1!==t.length)for(;t.length>1;){const o=t[0];e[o]&&"object"==typeof e[o]||(e[o]={}),t.shift(),r(e[o],t,n)}else e[t[0]]=n};if("string"!=typeof t||""===t);else if(-1!==t.indexOf(".")){const o=t.split(".");r(e,o,n)}else e[t]=n},sleep:function(e=30){return new Promise((t=>{setTimeout((()=>{t()}),e)}))},sys:function(){return e.index.getSystemInfoSync()},timeFormat:s,timeFrom:function(e=null,t="yyyy-mm-dd"){null==e&&(e=Number(new Date)),10==(e=parseInt(e)).toString().length&&(e*=1e3);let n=(new Date).getTime()-e;n=parseInt(n/1e3);let r="";switch(!0){case n<300:r="刚刚";break;case n>=300&&n<3600:r=`${parseInt(n/60)}分钟前`;break;case n>=3600&&n<86400:r=`${parseInt(n/3600)}小时前`;break;case n>=86400&&n<2592e3:r=`${parseInt(n/86400)}天前`;break;default:r=!1===t?n>=2592e3&&n<31536e3?`${parseInt(n/2592e3)}个月前`:`${parseInt(n/31536e3)}年前`:s(e,t)}return r},toast:function(t,n=2e3){e.index.showToast({title:String(t),icon:"none",duration:n})},trim:a,type2icon:function(e="success",t=!1){-1==["primary","info","error","warning","success"].indexOf(e)&&(e="success");let n="";switch(e){case"primary":case"info":n="info-circle";break;case"error":n="close-circle";break;case"warning":n="error-circle";break;default:n="checkmark-circle"}return t&&(n+="-fill"),n}},Symbol.toStringTag,{value:"Module"}));exports.deepMerge=i,exports.index=l,exports.page=u,exports.queryParams=c;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/test.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/test.js
new file mode 100644
index 0000000..fb7cd66
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/test.js
@@ -0,0 +1 @@
+"use strict";function t(t){return/^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(t)}function n(t){switch(typeof t){case"undefined":return!0;case"string":if(0==t.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"").length)return!0;break;case"boolean":if(!t)return!0;break;case"number":if(0===t||isNaN(t))return!0;break;case"object":if(null===t||0===t.length)return!0;for(const n in t)return!1;return!0}return!1}function e(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===Object.prototype.toString.call(t)}function r(t){return"[object Object]"===Object.prototype.toString.call(t)}function u(t){return"function"==typeof t}const o=Object.freeze(Object.defineProperty({__proto__:null,amount:function(t){return/^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(t)},array:e,carNo:function(t){const n=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/,e=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;return 7===t.length?e.test(t):8===t.length&&n.test(t)},chinese:function(t){return/^[\u4e00-\u9fa5]+$/gi.test(t)},code:function(t,n=6){return new RegExp(`^\\d{${n}}$`).test(t)},contains:function(t,n){return t.indexOf(n)>=0},date:function(n){return!!n&&(t(n)&&(n=+n),!/Invalid|NaN/.test(new Date(n).toString()))},dateISO:function(t){return/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(t)},digits:function(t){return/^\d+$/.test(t)},email:function(t){return/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(t)},empty:n,enOrNum:function(t){return/^[0-9a-zA-Z]*$/g.test(t)},func:u,idCard:function(t){return/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(t)},image:function(t){const n=t.split("?")[0];return/\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i.test(n)},jsonString:function(t){if("string"==typeof t)try{const n=JSON.parse(t);return!("object"!=typeof n||!n)}catch(n){return!1}return!1},landline:function(t){return/^\d{3,4}-\d{7,8}(-\d{3,4})?$/.test(t)},letter:function(t){return/^[a-zA-Z]*$/.test(t)},mobile:function(t){return/^1([3589]\d|4[5-9]|6[1-2,4-7]|7[0-8])\d{8}$/.test(t)},number:t,object:r,promise:function(t){return r(t)&&u(t.then)&&u(t.catch)},range:function(t,n){return t>=n[0]&&t<=n[1]},rangeLength:function(t,n){return t.length>=n[0]&&t.length<=n[1]},regExp:function(t){return t&&"[object RegExp]"===Object.prototype.toString.call(t)},string:function(t){return"string"==typeof t},url:function(t){return/^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(t)},video:function(t){return/\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i.test(t)}},Symbol.toStringTag,{value:"Module"}));exports.array=e,exports.empty=n,exports.number=t,exports.test=o;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/throttle.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/throttle.js
new file mode 100644
index 0000000..d2a616b
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/function/throttle.js
@@ -0,0 +1 @@
+"use strict";let t;exports.throttle=function(e,o=500,i=!0){i?t||(t=!0,"function"==typeof e&&e(),setTimeout((()=>{t=!1}),o)):t||(t=!0,setTimeout((()=>{t=!1,"function"==typeof e&&e()}),o))};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mixin.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mixin.js
new file mode 100644
index 0000000..03d64da
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mixin.js
@@ -0,0 +1 @@
+"use strict";const t=require("../../../../common/vendor.js"),e=require("../function/index.js"),n=require("../function/test.js"),i=require("../util/route.js"),r=require("../function/debounce.js"),s=require("../function/throttle.js"),a={props:{customStyle:{type:[Object,String],default:()=>({})},customClass:{type:String,default:""},url:{type:String,default:""},linkType:{type:String,default:"navigateTo"}},data:()=>({}),onLoad(){this.$uv.getRect=this.$uvGetRect},created(){this.$uv.getRect=this.$uvGetRect},computed:{$uv(){var a,o,u;return{...e.index,test:n.test,route:i.route,debounce:r.debounce,throttle:s.throttle,unit:null==(u=null==(o=null==(a=t.index)?void 0:a.$uv)?void 0:o.config)?void 0:u.unit}},bem:()=>function(t,e,n){const i=`uv-${t}--`,r={};return e&&e.map((t=>{r[i+this[t]]=!0})),n&&n.map((t=>{this[t]?r[i+t]=this[t]:delete r[i+t]})),Object.keys(r)}},methods:{openPage(e="url"){const n=this[e];n&&t.index[this.linkType]({url:n})},$uvGetRect(e,n){return new Promise((i=>{t.index.createSelectorQuery().in(this)[n?"selectAll":"select"](e).boundingClientRect((t=>{n&&Array.isArray(t)&&t.length&&i(t),!n&&t&&i(t)})).exec()}))},getParentData(t=""){this.parent||(this.parent={}),this.parent=this.$uv.$parent.call(this,t),this.parent.children&&-1===this.parent.children.indexOf(this)&&this.parent.children.push(this),this.parent&&this.parentData&&Object.keys(this.parentData).map((t=>{this.parentData[t]=this.parent[t]}))},preventEvent(t){t&&"function"==typeof t.stopPropagation&&t.stopPropagation()},noop(t){this.preventEvent(t)}},onReachBottom(){t.index.$emit("uvOnReachBottom")},beforeDestroy(){if(this.parent&&n.array(this.parent.children)){const t=this.parent.children;t.map(((e,n)=>{e===this&&t.splice(n,1)}))}},unmounted(){if(this.parent&&n.array(this.parent.children)){const t=this.parent.children;t.map(((e,n)=>{e===this&&t.splice(n,1)}))}}};exports.mixin=a;
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js
new file mode 100644
index 0000000..5d923b2
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js
@@ -0,0 +1 @@
+"use strict";exports.mpMixin={options:{virtualHost:!0}};
diff --git a/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/util/route.js b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/util/route.js
new file mode 100644
index 0000000..f613eea
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/uni_modules/uv-ui-tools/libs/util/route.js
@@ -0,0 +1 @@
+"use strict";const e=require("../../../../common/vendor.js"),t=require("../function/index.js");const i=(new class{constructor(){this.config={type:"navigateTo",url:"",delta:1,params:{},animationType:"pop-in",animationDuration:300,intercept:!1,events:{}},this.route=this.route.bind(this)}addRootPath(e){return"/"===e[0]?e:`/${e}`}mixinParam(e,i){e=e&&this.addRootPath(e);let a="";return/.*\/.*\?.*=.*/.test(e)?(a=t.queryParams(i,!1),e+`&${a}`):(a=t.queryParams(i),e+a)}async route(e={},i={}){let a={};if("string"==typeof e?(a.url=this.mixinParam(e,i),a.type="navigateTo"):(a=t.deepMerge(this.config,e),a.url=this.mixinParam(e.url,e.params)),a.url!==t.page())if(i.intercept&&(a.intercept=i.intercept),a.params=i,a=t.deepMerge(this.config,a),"function"==typeof a.intercept){await new Promise(((e,t)=>{a.intercept(a,e)}))&&this.openPage(a)}else this.openPage(a)}openPage(t){const{url:i,type:a,delta:n,animationType:r,animationDuration:o,events:s}=t;"navigateTo"!=t.type&&"to"!=t.type||e.index.navigateTo({url:i,animationType:r,animationDuration:o,events:s}),"redirectTo"!=t.type&&"redirect"!=t.type||e.index.redirectTo({url:i}),"switchTab"!=t.type&&"tab"!=t.type||e.index.switchTab({url:i}),"reLaunch"!=t.type&&"launch"!=t.type||e.index.reLaunch({url:i}),"navigateBack"!=t.type&&"back"!=t.type||e.index.navigateBack({delta:n})}}).route;exports.route=i;
diff --git a/unpackage/dist/build/mp-weixin/utils/common.js b/unpackage/dist/build/mp-weixin/utils/common.js
new file mode 100644
index 0000000..39b92da
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/utils/common.js
@@ -0,0 +1 @@
+"use strict";require("../common/vendor.js"),exports.compareTimestamp=function(e){const o=(new Date).getTime()-e;return o<6e4?"1分钟内":o<36e5?Math.floor(o/6e4)+"分钟":o<864e5?Math.floor(o/36e5)+"小时":o<2592e6?Math.floor(o/864e5)+"天":o<7776e6?Math.floor(o/2592e6)+"月":null};
diff --git a/unpackage/dist/build/mp-weixin/utils/request.js b/unpackage/dist/build/mp-weixin/utils/request.js
new file mode 100644
index 0000000..c12c3ad
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/utils/request.js
@@ -0,0 +1 @@
+"use strict";const e=require("../common/vendor.js");exports.request=function(t={}){let{url:a,data:r={},method:d="GET",header:o={}}=t;return a="https://tea.qingnian8.com/api/bizhi"+a,o["access-key"]="888888",new Promise(((t,s)=>{e.index.request({url:a,data:r,method:d,header:o,success:a=>{0===a.data.errCode?t(a.data):400===a.data.errCode?(e.index.showModal({title:"错误提示",content:a.data.errMsg,showCancel:!1}),s(a.data)):(e.index.showToast({title:a.data.errMsg,icon:"none"}),s(a.data))},fail:e=>{s(e)}})}))};
diff --git a/unpackage/dist/build/mp-weixin/utils/system.js b/unpackage/dist/build/mp-weixin/utils/system.js
new file mode 100644
index 0000000..6a6cc02
--- /dev/null
+++ b/unpackage/dist/build/mp-weixin/utils/system.js
@@ -0,0 +1 @@
+"use strict";const t=require("../common/vendor.js"),e=t.index.getSystemInfoSync(),n=()=>e.statusBarHeight||0,i=()=>{if(t.index.getMenuButtonBoundingClientRect){let{top:e,height:i}=t.index.getMenuButtonBoundingClientRect();return 2*(e-n())+i}return 40};exports.getNavBarHeight=()=>i()+n(),exports.getPreviewBarHeight=()=>{if(t.index.getMenuButtonBoundingClientRect){let{top:e}=t.index.getMenuButtonBoundingClientRect();return e}return 40},exports.getStatusBarHeight=n,exports.getTitleBarHeight=i;
diff --git a/unpackage/dist/cache/.vite/deps/_metadata.json b/unpackage/dist/cache/.vite/deps/_metadata.json
new file mode 100644
index 0000000..6262240
--- /dev/null
+++ b/unpackage/dist/cache/.vite/deps/_metadata.json
@@ -0,0 +1,8 @@
+{
+ "hash": "abcab89a",
+ "configHash": "169cb20d",
+ "lockfileHash": "e3b0c442",
+ "browserHash": "c4199800",
+ "optimized": {},
+ "chunks": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/cache/.vite/deps/package.json b/unpackage/dist/cache/.vite/deps/package.json
new file mode 100644
index 0000000..3dbc1ca
--- /dev/null
+++ b/unpackage/dist/cache/.vite/deps/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/api/apis.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/api/apis.js.map
new file mode 100644
index 0000000..1f8386d
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/api/apis.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"apis.js","sources":["api/apis.js"],"sourcesContent":["import {request} from \"@/utils/request.js\"\r\n\r\n//获取首页banner栏内容\r\nexport function apiGetBanner(){\r\n\treturn request({\r\n\t\turl:\"/homeBanner\",\r\n\t})\r\n\r\n}\r\n\r\n//获取首页每日推荐栏内容\r\nexport function apiGetDayRandom(){\r\n\treturn request({url:\"/randomWall\"})\r\n\r\n} \r\n\r\n//获取首页公告栏内容\r\nexport function apiGetNotice(data={}){\r\n\treturn request({\r\n\t\turl:\"/wallNewsList\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//获取tabBar的“分类”里面的列表内容\r\nexport function apiGetClassify(data={}){\r\n\treturn request({\r\n\t\turl:\"/classify\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n\r\n//获取tabBar的“分类”栏里面给一个板块的具体图片内容\r\nexport function apiGetClassList(data={}){\r\n\treturn request({\r\n\t\turl:\"/wallList\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//为每一个壁纸评分\r\nexport function apiGetSetScore(data={}){\r\n\treturn request({\r\n\t\turl:\"/setupScore\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//下载壁纸\r\nexport function apiWriteDownload(data={}){\r\n\treturn request({\r\n\t\turl:\"/downloadWall\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n// 判断用户是不是通过别人分享进来的,从而获取被分享壁纸的详情信息。只有一张\r\nexport function apiDetailWall(data={}){\r\n\treturn request({\r\n\t\turl:\"/detailWall\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//获取 “我的” 页面的个人信息\r\nexport function apiUserInfo(data={}){\r\n\treturn request({\r\n\t\turl:\"/userInfo\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//获取 “我的” 页面中\"我的下载\"和\"我的评分\"的区分信息\r\nexport function apiGetHistoryList(data={}){\r\n\treturn request({\r\n\t\turl:\"/userWallList\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//获取 “我的” 页面中\"我的下载\"和\"我的评分\"的区分信息\r\nexport function apiNoticeDetail(data={}){\r\n\treturn request({\r\n\t\turl:\"/wallNewsDetail\",\r\n\t\tdata\r\n\t})\r\n}\r\n\r\n//获取 “搜索”页面 壁纸信息\r\nexport function apiSearchData(data={}){\r\n\treturn request({\r\n\t\turl:\"/searchWall\",\r\n\t\tdata\r\n\t})\r\n}\r\n"],"names":["request"],"mappings":";;AAGO,SAAS,eAAc;AAC7B,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,EACN,CAAE;AAEF;AAGO,SAAS,kBAAiB;AAChC,SAAOA,sBAAQ,EAAC,KAAI,cAAa,CAAC;AAEnC;AAGO,SAAS,aAAa,OAAK,IAAG;AACpC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,eAAe,OAAK,IAAG;AACtC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAIO,SAAS,gBAAgB,OAAK,IAAG;AACvC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,eAAe,OAAK,IAAG;AACtC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,iBAAiB,OAAK,IAAG;AACxC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,cAAc,OAAK,IAAG;AACrC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,YAAY,OAAK,IAAG;AACnC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,kBAAkB,OAAK,IAAG;AACzC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,gBAAgB,OAAK,IAAG;AACvC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;AAGO,SAAS,cAAc,OAAK,IAAG;AACrC,SAAOA,sBAAQ;AAAA,IACd,KAAI;AAAA,IACJ;AAAA,EACF,CAAE;AACF;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map
new file mode 100644
index 0000000..fb7dc1d
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/app.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["\r\n\r\n\n","import App from './App'\n\n// #ifndef VUE3\nimport Vue from 'vue'\nimport './uni.promisify.adaptor'\nVue.config.productionTip = false\nApp.mpType = 'app'\nconst app = new Vue({\n ...App\n})\napp.$mount()\n// #endif\n\n// #ifdef VUE3\nimport { createSSRApp } from 'vue'\nexport function createApp() {\n const app = createSSRApp(App)\n return {\n app\n }\n}\n// #endif"],"names":["uni","createSSRApp","App"],"mappings":";;;;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACIM,SAAS,YAAY;AAC1B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAC5B,SAAO;AAAA,IACL;AAAA,EACD;AACH;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map
new file mode 100644
index 0000000..5ef95c0
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/assets.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"assets.js","sources":["static/images/xxmLogo.png","common/images/more.jpg"],"sourcesContent":["export default \"__VITE_ASSET__d0e50ba0__\"","export default \"__VITE_ASSET__14a1a72b__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,aAAA;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
new file mode 100644
index 0000000..9dd71fc
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"vendor.js","sources":["../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-i18n/dist/uni-i18n.es.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-shared/dist/uni-shared.es.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-vue/dist/vue.runtime.esm.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-weixin/dist/uni.api.esm.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/dist/mp.esm.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-mp-weixin/dist/uni.mp.esm.js","../../HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-app/dist/uni-app.es.js"],"sourcesContent":["/**\n* @vue/shared v3.4.21\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nfunction makeMap(str, expectsLowerCase) {\n const set = new Set(str.split(\",\"));\n return expectsLowerCase ? (val) => set.has(val.toLowerCase()) : (val) => set.has(val);\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction((str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n});\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](arg);\n }\n};\nconst def = (obj, key, value) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"HOISTED\": -1,\n \"-1\": \"HOISTED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `HOISTED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length)\n continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n let ret = \"\";\n if (!styles || isString(styles)) {\n return ret;\n }\n for (const key in styles) {\n const value = styles[key];\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n if (isString(value) || typeof value === \"number\") {\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props)\n return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>||--!>| looseEqual(item, val));\n}\n\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (val && val.__v_isRef) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v;\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","const isObject = (val) => val !== null && typeof val === 'object';\nconst defaultDelimiters = ['{', '}'];\nclass BaseFormatter {\n constructor() {\n this._caches = Object.create(null);\n }\n interpolate(message, values, delimiters = defaultDelimiters) {\n if (!values) {\n return [message];\n }\n let tokens = this._caches[message];\n if (!tokens) {\n tokens = parse(message, delimiters);\n this._caches[message] = tokens;\n }\n return compile(tokens, values);\n }\n}\nconst RE_TOKEN_LIST_VALUE = /^(?:\\d)+/;\nconst RE_TOKEN_NAMED_VALUE = /^(?:\\w)+/;\nfunction parse(format, [startDelimiter, endDelimiter]) {\n const tokens = [];\n let position = 0;\n let text = '';\n while (position < format.length) {\n let char = format[position++];\n if (char === startDelimiter) {\n if (text) {\n tokens.push({ type: 'text', value: text });\n }\n text = '';\n let sub = '';\n char = format[position++];\n while (char !== undefined && char !== endDelimiter) {\n sub += char;\n char = format[position++];\n }\n const isClosed = char === endDelimiter;\n const type = RE_TOKEN_LIST_VALUE.test(sub)\n ? 'list'\n : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)\n ? 'named'\n : 'unknown';\n tokens.push({ value: sub, type });\n }\n // else if (char === '%') {\n // // when found rails i18n syntax, skip text capture\n // if (format[position] !== '{') {\n // text += char\n // }\n // }\n else {\n text += char;\n }\n }\n text && tokens.push({ type: 'text', value: text });\n return tokens;\n}\nfunction compile(tokens, values) {\n const compiled = [];\n let index = 0;\n const mode = Array.isArray(values)\n ? 'list'\n : isObject(values)\n ? 'named'\n : 'unknown';\n if (mode === 'unknown') {\n return compiled;\n }\n while (index < tokens.length) {\n const token = tokens[index];\n switch (token.type) {\n case 'text':\n compiled.push(token.value);\n break;\n case 'list':\n compiled.push(values[parseInt(token.value, 10)]);\n break;\n case 'named':\n if (mode === 'named') {\n compiled.push(values[token.value]);\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);\n }\n }\n break;\n case 'unknown':\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Detect 'unknown' type of token!`);\n }\n break;\n }\n index++;\n }\n return compiled;\n}\n\nconst LOCALE_ZH_HANS = 'zh-Hans';\nconst LOCALE_ZH_HANT = 'zh-Hant';\nconst LOCALE_EN = 'en';\nconst LOCALE_FR = 'fr';\nconst LOCALE_ES = 'es';\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst defaultFormatter = new BaseFormatter();\nfunction include(str, parts) {\n return !!parts.find((part) => str.indexOf(part) !== -1);\n}\nfunction startsWith(str, parts) {\n return parts.find((part) => str.indexOf(part) === 0);\n}\nfunction normalizeLocale(locale, messages) {\n if (!locale) {\n return;\n }\n locale = locale.trim().replace(/_/g, '-');\n if (messages && messages[locale]) {\n return locale;\n }\n locale = locale.toLowerCase();\n if (locale === 'chinese') {\n // 支付宝\n return LOCALE_ZH_HANS;\n }\n if (locale.indexOf('zh') === 0) {\n if (locale.indexOf('-hans') > -1) {\n return LOCALE_ZH_HANS;\n }\n if (locale.indexOf('-hant') > -1) {\n return LOCALE_ZH_HANT;\n }\n if (include(locale, ['-tw', '-hk', '-mo', '-cht'])) {\n return LOCALE_ZH_HANT;\n }\n return LOCALE_ZH_HANS;\n }\n let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];\n if (messages && Object.keys(messages).length > 0) {\n locales = Object.keys(messages);\n }\n const lang = startsWith(locale, locales);\n if (lang) {\n return lang;\n }\n}\nclass I18n {\n constructor({ locale, fallbackLocale, messages, watcher, formater, }) {\n this.locale = LOCALE_EN;\n this.fallbackLocale = LOCALE_EN;\n this.message = {};\n this.messages = {};\n this.watchers = [];\n if (fallbackLocale) {\n this.fallbackLocale = fallbackLocale;\n }\n this.formater = formater || defaultFormatter;\n this.messages = messages || {};\n this.setLocale(locale || LOCALE_EN);\n if (watcher) {\n this.watchLocale(watcher);\n }\n }\n setLocale(locale) {\n const oldLocale = this.locale;\n this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;\n if (!this.messages[this.locale]) {\n // 可能初始化时不存在\n this.messages[this.locale] = {};\n }\n this.message = this.messages[this.locale];\n // 仅发生变化时,通知\n if (oldLocale !== this.locale) {\n this.watchers.forEach((watcher) => {\n watcher(this.locale, oldLocale);\n });\n }\n }\n getLocale() {\n return this.locale;\n }\n watchLocale(fn) {\n const index = this.watchers.push(fn) - 1;\n return () => {\n this.watchers.splice(index, 1);\n };\n }\n add(locale, message, override = true) {\n const curMessages = this.messages[locale];\n if (curMessages) {\n if (override) {\n Object.assign(curMessages, message);\n }\n else {\n Object.keys(message).forEach((key) => {\n if (!hasOwn(curMessages, key)) {\n curMessages[key] = message[key];\n }\n });\n }\n }\n else {\n this.messages[locale] = message;\n }\n }\n f(message, values, delimiters) {\n return this.formater.interpolate(message, values, delimiters).join('');\n }\n t(key, locale, values) {\n let message = this.message;\n if (typeof locale === 'string') {\n locale = normalizeLocale(locale, this.messages);\n locale && (message = this.messages[locale]);\n }\n else {\n values = locale;\n }\n if (!hasOwn(message, key)) {\n console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);\n return key;\n }\n return this.formater.interpolate(message[key], values).join('');\n }\n}\n\nfunction watchAppLocale(appVm, i18n) {\n // 需要保证 watch 的触发在组件渲染之前\n if (appVm.$watchLocale) {\n // vue2\n appVm.$watchLocale((newLocale) => {\n i18n.setLocale(newLocale);\n });\n }\n else {\n appVm.$watch(() => appVm.$locale, (newLocale) => {\n i18n.setLocale(newLocale);\n });\n }\n}\nfunction getDefaultLocale() {\n if (typeof uni !== 'undefined' && uni.getLocale) {\n return uni.getLocale();\n }\n // 小程序平台,uni 和 uni-i18n 互相引用,导致访问不到 uni,故在 global 上挂了 getLocale\n if (typeof global !== 'undefined' && global.getLocale) {\n return global.getLocale();\n }\n return LOCALE_EN;\n}\nfunction initVueI18n(locale, messages = {}, fallbackLocale, watcher) {\n // 兼容旧版本入参\n if (typeof locale !== 'string') {\n // ;[locale, messages] = [\n // messages as unknown as string,\n // locale as unknown as LocaleMessages,\n // ]\n // 暂不使用数组解构,uts编译器暂未支持。\n const options = [\n messages,\n locale,\n ];\n locale = options[0];\n messages = options[1];\n }\n if (typeof locale !== 'string') {\n // 因为小程序平台,uni-i18n 和 uni 互相引用,导致此时访问 uni 时,为 undefined\n locale = getDefaultLocale();\n }\n if (typeof fallbackLocale !== 'string') {\n fallbackLocale =\n (typeof __uniConfig !== 'undefined' && __uniConfig.fallbackLocale) ||\n LOCALE_EN;\n }\n const i18n = new I18n({\n locale,\n fallbackLocale,\n messages,\n watcher,\n });\n let t = (key, values) => {\n if (typeof getApp !== 'function') {\n // app view\n /* eslint-disable no-func-assign */\n t = function (key, values) {\n return i18n.t(key, values);\n };\n }\n else {\n let isWatchedAppLocale = false;\n t = function (key, values) {\n const appVm = getApp().$vm;\n // 可能$vm还不存在,比如在支付宝小程序中,组件定义较早,在props的default里使用了t()函数(如uni-goods-nav),此时app还未初始化\n // options: {\n // \ttype: Array,\n // \tdefault () {\n // \t\treturn [{\n // \t\t\ticon: 'shop',\n // \t\t\ttext: t(\"uni-goods-nav.options.shop\"),\n // \t\t}, {\n // \t\t\ticon: 'cart',\n // \t\t\ttext: t(\"uni-goods-nav.options.cart\")\n // \t\t}]\n // \t}\n // },\n if (appVm) {\n // 触发响应式\n appVm.$locale;\n if (!isWatchedAppLocale) {\n isWatchedAppLocale = true;\n watchAppLocale(appVm, i18n);\n }\n }\n return i18n.t(key, values);\n };\n }\n return t(key, values);\n };\n return {\n i18n,\n f(message, values, delimiters) {\n return i18n.f(message, values, delimiters);\n },\n t(key, values) {\n return t(key, values);\n },\n add(locale, message, override = true) {\n return i18n.add(locale, message, override);\n },\n watch(fn) {\n return i18n.watchLocale(fn);\n },\n getLocale() {\n return i18n.getLocale();\n },\n setLocale(newLocale) {\n return i18n.setLocale(newLocale);\n },\n };\n}\n\nconst isString = (val) => typeof val === 'string';\nlet formater;\nfunction hasI18nJson(jsonObj, delimiters) {\n if (!formater) {\n formater = new BaseFormatter();\n }\n return walkJsonObj(jsonObj, (jsonObj, key) => {\n const value = jsonObj[key];\n if (isString(value)) {\n if (isI18nStr(value, delimiters)) {\n return true;\n }\n }\n else {\n return hasI18nJson(value, delimiters);\n }\n });\n}\nfunction parseI18nJson(jsonObj, values, delimiters) {\n if (!formater) {\n formater = new BaseFormatter();\n }\n walkJsonObj(jsonObj, (jsonObj, key) => {\n const value = jsonObj[key];\n if (isString(value)) {\n if (isI18nStr(value, delimiters)) {\n jsonObj[key] = compileStr(value, values, delimiters);\n }\n }\n else {\n parseI18nJson(value, values, delimiters);\n }\n });\n return jsonObj;\n}\nfunction compileI18nJsonStr(jsonStr, { locale, locales, delimiters, }) {\n if (!isI18nStr(jsonStr, delimiters)) {\n return jsonStr;\n }\n if (!formater) {\n formater = new BaseFormatter();\n }\n const localeValues = [];\n Object.keys(locales).forEach((name) => {\n if (name !== locale) {\n localeValues.push({\n locale: name,\n values: locales[name],\n });\n }\n });\n localeValues.unshift({ locale, values: locales[locale] });\n try {\n return JSON.stringify(compileJsonObj(JSON.parse(jsonStr), localeValues, delimiters), null, 2);\n }\n catch (e) { }\n return jsonStr;\n}\nfunction isI18nStr(value, delimiters) {\n return value.indexOf(delimiters[0]) > -1;\n}\nfunction compileStr(value, values, delimiters) {\n return formater.interpolate(value, values, delimiters).join('');\n}\nfunction compileValue(jsonObj, key, localeValues, delimiters) {\n const value = jsonObj[key];\n if (isString(value)) {\n // 存在国际化\n if (isI18nStr(value, delimiters)) {\n jsonObj[key] = compileStr(value, localeValues[0].values, delimiters);\n if (localeValues.length > 1) {\n // 格式化国际化语言\n const valueLocales = (jsonObj[key + 'Locales'] = {});\n localeValues.forEach((localValue) => {\n valueLocales[localValue.locale] = compileStr(value, localValue.values, delimiters);\n });\n }\n }\n }\n else {\n compileJsonObj(value, localeValues, delimiters);\n }\n}\nfunction compileJsonObj(jsonObj, localeValues, delimiters) {\n walkJsonObj(jsonObj, (jsonObj, key) => {\n compileValue(jsonObj, key, localeValues, delimiters);\n });\n return jsonObj;\n}\nfunction walkJsonObj(jsonObj, walk) {\n if (Array.isArray(jsonObj)) {\n for (let i = 0; i < jsonObj.length; i++) {\n if (walk(jsonObj, i)) {\n return true;\n }\n }\n }\n else if (isObject(jsonObj)) {\n for (const key in jsonObj) {\n if (walk(jsonObj, key)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction resolveLocale(locales) {\n return (locale) => {\n if (!locale) {\n return locale;\n }\n locale = normalizeLocale(locale) || locale;\n return resolveLocaleChain(locale).find((locale) => locales.indexOf(locale) > -1);\n };\n}\nfunction resolveLocaleChain(locale) {\n const chain = [];\n const tokens = locale.split('-');\n while (tokens.length) {\n chain.push(tokens.join('-'));\n tokens.pop();\n }\n return chain;\n}\n\nexport { BaseFormatter as Formatter, I18n, LOCALE_EN, LOCALE_ES, LOCALE_FR, LOCALE_ZH_HANS, LOCALE_ZH_HANT, compileI18nJsonStr, hasI18nJson, initVueI18n, isI18nStr, isString, normalizeLocale, parseI18nJson, resolveLocale };\n","import { isHTMLTag, isSVGTag, isVoidTag, isString, isFunction, isPlainObject, hyphenate, camelize, normalizeStyle as normalizeStyle$1, parseStringStyle, isArray, normalizeClass as normalizeClass$1, extend, capitalize, makeMap } from '@vue/shared';\n\nconst BUILT_IN_TAG_NAMES = [\n 'ad',\n 'ad-content-page',\n 'ad-draw',\n 'audio',\n 'button',\n 'camera',\n 'canvas',\n 'checkbox',\n 'checkbox-group',\n 'cover-image',\n 'cover-view',\n 'editor',\n 'form',\n 'functional-page-navigator',\n 'icon',\n 'image',\n 'input',\n 'label',\n 'live-player',\n 'live-pusher',\n 'map',\n 'movable-area',\n 'movable-view',\n 'navigator',\n 'official-account',\n 'open-data',\n 'picker',\n 'picker-view',\n 'picker-view-column',\n 'progress',\n 'radio',\n 'radio-group',\n 'rich-text',\n 'scroll-view',\n 'slider',\n 'swiper',\n 'swiper-item',\n 'switch',\n 'text',\n 'textarea',\n 'video',\n 'view',\n 'web-view',\n 'location-picker',\n 'location-view',\n];\nconst BUILT_IN_TAGS = BUILT_IN_TAG_NAMES.map((tag) => 'uni-' + tag);\nconst TAGS = [\n 'app',\n 'layout',\n 'content',\n 'main',\n 'top-window',\n 'left-window',\n 'right-window',\n 'tabbar',\n 'page',\n 'page-head',\n 'page-wrapper',\n 'page-body',\n 'page-refresh',\n 'actionsheet',\n 'modal',\n 'toast',\n 'resize-sensor',\n 'shadow-root',\n].map((tag) => 'uni-' + tag);\nconst NVUE_BUILT_IN_TAGS = [\n 'svg',\n 'view',\n 'a',\n 'div',\n 'img',\n 'image',\n 'text',\n 'span',\n 'input',\n 'textarea',\n 'spinner',\n 'select',\n // slider 被自定义 u-slider 替代\n // 'slider',\n 'slider-neighbor',\n 'indicator',\n 'canvas',\n 'list',\n 'cell',\n 'header',\n 'loading',\n 'loading-indicator',\n 'refresh',\n 'scrollable',\n 'scroller',\n 'video',\n 'web',\n 'embed',\n 'tabbar',\n 'tabheader',\n 'datepicker',\n 'timepicker',\n 'marquee',\n 'countdown',\n 'dc-switch',\n 'waterfall',\n 'richtext',\n 'recycle-list',\n 'u-scalable',\n 'barcode',\n 'gcanvas',\n];\nconst UVUE_BUILT_IN_TAGS = [\n 'ad',\n 'ad-content-page',\n 'ad-draw',\n 'native-view',\n 'loading-indicator',\n 'list-view',\n 'list-item',\n 'swiper',\n 'swiper-item',\n 'rich-text',\n 'sticky-view',\n 'sticky-header',\n 'sticky-section',\n // 自定义\n 'uni-slider',\n // 原生实现\n 'button',\n 'nested-scroll-header',\n 'nested-scroll-body',\n 'waterflow',\n 'flow-item',\n 'share-element',\n 'cover-view',\n 'cover-image',\n // custom element\n 'match-media',\n];\nconst UVUE_WEB_BUILT_IN_TAGS = [\n 'list-view',\n 'list-item',\n 'sticky-section',\n 'sticky-header',\n 'cloud-db-element',\n].map((tag) => 'uni-' + tag);\nconst UVUE_IOS_BUILT_IN_TAGS = [\n 'scroll-view',\n 'web-view',\n 'slider',\n 'form',\n 'switch',\n];\nconst UVUE_HARMONY_BUILT_IN_TAGS = [\n // TODO 列出完整列表\n ...BUILT_IN_TAG_NAMES,\n 'volume-panel',\n];\nconst NVUE_U_BUILT_IN_TAGS = [\n 'u-text',\n 'u-image',\n 'u-input',\n 'u-textarea',\n 'u-video',\n 'u-web-view',\n 'u-slider',\n 'u-ad',\n 'u-ad-draw',\n 'u-rich-text',\n];\nconst UVUE_WEB_BUILT_IN_CUSTOM_ELEMENTS = ['match-media'];\nconst UNI_UI_CONFLICT_TAGS = ['list-item'].map((tag) => 'uni-' + tag);\nfunction isBuiltInComponent(tag) {\n if (UNI_UI_CONFLICT_TAGS.indexOf(tag) !== -1) {\n return false;\n }\n // h5 平台会被转换为 v-uni-\n const realTag = 'uni-' + tag.replace('v-uni-', '');\n // TODO 区分x和非x\n return (BUILT_IN_TAGS.indexOf(realTag) !== -1 ||\n UVUE_WEB_BUILT_IN_TAGS.indexOf(realTag) !== -1);\n}\nfunction isH5CustomElement(tag, isX = false) {\n if (isX && UVUE_WEB_BUILT_IN_TAGS.indexOf(tag) !== -1) {\n return true;\n }\n return TAGS.indexOf(tag) !== -1 || BUILT_IN_TAGS.indexOf(tag) !== -1;\n}\nfunction isUniXElement(name) {\n return /^I?Uni.*Element(?:Impl)?$/.test(name);\n}\nfunction isH5NativeTag(tag) {\n return (tag !== 'head' &&\n (isHTMLTag(tag) || isSVGTag(tag)) &&\n !isBuiltInComponent(tag));\n}\nfunction isAppNativeTag(tag) {\n return isHTMLTag(tag) || isSVGTag(tag) || isBuiltInComponent(tag);\n}\nconst NVUE_CUSTOM_COMPONENTS = [\n 'ad',\n 'ad-draw',\n 'button',\n 'checkbox-group',\n 'checkbox',\n 'form',\n 'icon',\n 'label',\n 'movable-area',\n 'movable-view',\n 'navigator',\n 'picker',\n 'progress',\n 'radio-group',\n 'radio',\n 'rich-text',\n 'swiper-item',\n 'swiper',\n 'switch',\n 'slider',\n 'picker-view',\n 'picker-view-column',\n];\n// 内置的easycom组件\nconst UVUE_BUILT_IN_EASY_COMPONENTS = [\n 'map',\n 'camera',\n 'live-player',\n 'live-pusher',\n];\nfunction isAppUVueBuiltInEasyComponent(tag) {\n return UVUE_BUILT_IN_EASY_COMPONENTS.includes(tag);\n}\n// 主要是指前端实现的组件列表\nconst UVUE_CUSTOM_COMPONENTS = [\n ...NVUE_CUSTOM_COMPONENTS,\n ...UVUE_BUILT_IN_EASY_COMPONENTS,\n];\nfunction isAppUVueNativeTag(tag) {\n // 前端实现的内置组件都会注册一个根组件\n if (tag.startsWith('uni-') && tag.endsWith('-element')) {\n return true;\n }\n if (UVUE_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n if (UVUE_CUSTOM_COMPONENTS.includes(tag)) {\n return false;\n }\n if (isBuiltInComponent(tag)) {\n return true;\n }\n // u-text,u-video...\n if (NVUE_U_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n return false;\n}\nfunction isAppIOSUVueNativeTag(tag) {\n // 前端实现的内置组件都会注册一个根组件\n if (tag.startsWith('uni-') && tag.endsWith('-element')) {\n return true;\n }\n if (NVUE_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n if (UVUE_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n if (UVUE_IOS_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n return false;\n}\nfunction isAppHarmonyUVueNativeTag(tag) {\n // video 目前是easycom实现的\n if (tag === 'video' || tag === 'map') {\n return false;\n }\n // 前端实现的内置组件都会注册一个根组件\n if (tag.startsWith('uni-') && tag.endsWith('-element')) {\n return true;\n }\n if (NVUE_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n if (UVUE_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n if (UVUE_HARMONY_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n return false;\n}\nfunction isAppNVueNativeTag(tag) {\n if (NVUE_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n if (NVUE_CUSTOM_COMPONENTS.includes(tag)) {\n return false;\n }\n if (isBuiltInComponent(tag)) {\n return true;\n }\n // u-text,u-video...\n if (NVUE_U_BUILT_IN_TAGS.includes(tag)) {\n return true;\n }\n return false;\n}\nfunction isMiniProgramNativeTag(tag) {\n return isBuiltInComponent(tag);\n}\nfunction isMiniProgramUVueNativeTag(tag) {\n // 小程序平台内置的自定义元素,会被转换为 view\n if (tag.startsWith('uni-') && tag.endsWith('-element')) {\n return true;\n }\n return isBuiltInComponent(tag);\n}\nfunction createIsCustomElement(tags = []) {\n return function isCustomElement(tag) {\n return tags.includes(tag);\n };\n}\nfunction isComponentTag(tag) {\n return tag[0].toLowerCase() + tag.slice(1) === 'component';\n}\nconst COMPONENT_SELECTOR_PREFIX = 'uni-';\nconst COMPONENT_PREFIX = 'v-' + COMPONENT_SELECTOR_PREFIX;\n// TODO 是否还存在其他需要特殊处理的 void 标签?\nconst APP_VOID_TAGS = ['textarea'];\nfunction isAppVoidTag(tag) {\n return APP_VOID_TAGS.includes(tag) || isVoidTag(tag);\n}\n\nconst LINEFEED = '\\n';\nconst NAVBAR_HEIGHT = 44;\nconst TABBAR_HEIGHT = 50;\nconst ON_REACH_BOTTOM_DISTANCE = 50;\nconst RESPONSIVE_MIN_WIDTH = 768;\nconst UNI_STORAGE_LOCALE = 'UNI_LOCALE';\n// quickapp-webview 不能使用 default 作为插槽名称\nconst SLOT_DEFAULT_NAME = 'd';\nconst COMPONENT_NAME_PREFIX = 'VUni';\nconst I18N_JSON_DELIMITERS = ['%', '%'];\nconst PRIMARY_COLOR = '#007aff';\nconst SELECTED_COLOR = '#0062cc'; // 选中的颜色,如选项卡默认的选中颜色\nconst BACKGROUND_COLOR = '#f7f7f7'; // 背景色,如标题栏默认背景色\nconst UNI_SSR = '__uniSSR';\nconst UNI_SSR_TITLE = 'title';\nconst UNI_SSR_STORE = 'store';\nconst UNI_SSR_DATA = 'data';\nconst UNI_SSR_GLOBAL_DATA = 'globalData';\nconst SCHEME_RE = /^([a-z-]+:)?\\/\\//i;\nconst DATA_RE = /^data:.*,.*/;\nconst WEB_INVOKE_APPSERVICE = 'WEB_INVOKE_APPSERVICE';\nconst WXS_PROTOCOL = 'wxs://';\nconst JSON_PROTOCOL = 'json://';\nconst WXS_MODULES = 'wxsModules';\nconst RENDERJS_MODULES = 'renderjsModules';\n// lifecycle\n// App and Page\nconst ON_SHOW = 'onShow';\nconst ON_HIDE = 'onHide';\n//App\nconst ON_LAUNCH = 'onLaunch';\nconst ON_ERROR = 'onError';\nconst ON_THEME_CHANGE = 'onThemeChange';\nconst OFF_THEME_CHANGE = 'offThemeChange';\nconst ON_HOST_THEME_CHANGE = 'onHostThemeChange';\nconst OFF_HOST_THEME_CHANGE = 'offHostThemeChange';\nconst ON_KEYBOARD_HEIGHT_CHANGE = 'onKeyboardHeightChange';\nconst ON_PAGE_NOT_FOUND = 'onPageNotFound';\nconst ON_UNHANDLE_REJECTION = 'onUnhandledRejection';\nconst ON_LAST_PAGE_BACK_PRESS = 'onLastPageBackPress';\nconst ON_EXIT = 'onExit';\n//Page\nconst ON_LOAD = 'onLoad';\nconst ON_READY = 'onReady';\nconst ON_UNLOAD = 'onUnload';\n// 百度特有\nconst ON_INIT = 'onInit';\n// 微信特有\nconst ON_SAVE_EXIT_STATE = 'onSaveExitState';\nconst ON_RESIZE = 'onResize';\nconst ON_BACK_PRESS = 'onBackPress';\nconst ON_PAGE_SCROLL = 'onPageScroll';\nconst ON_TAB_ITEM_TAP = 'onTabItemTap';\nconst ON_REACH_BOTTOM = 'onReachBottom';\nconst ON_PULL_DOWN_REFRESH = 'onPullDownRefresh';\nconst ON_SHARE_TIMELINE = 'onShareTimeline';\nconst ON_SHARE_CHAT = 'onShareChat'; // xhs-share\nconst ON_ADD_TO_FAVORITES = 'onAddToFavorites';\nconst ON_SHARE_APP_MESSAGE = 'onShareAppMessage';\n// navigationBar\nconst ON_NAVIGATION_BAR_BUTTON_TAP = 'onNavigationBarButtonTap';\nconst ON_NAVIGATION_BAR_CHANGE = 'onNavigationBarChange';\nconst ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = 'onNavigationBarSearchInputClicked';\nconst ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = 'onNavigationBarSearchInputChanged';\nconst ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = 'onNavigationBarSearchInputConfirmed';\nconst ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = 'onNavigationBarSearchInputFocusChanged';\n// framework\nconst ON_APP_ENTER_FOREGROUND = 'onAppEnterForeground';\nconst ON_APP_ENTER_BACKGROUND = 'onAppEnterBackground';\nconst ON_WEB_INVOKE_APP_SERVICE = 'onWebInvokeAppService';\nconst ON_WXS_INVOKE_CALL_METHOD = 'onWxsInvokeCallMethod';\n// mergeVirtualHostAttributes\nconst VIRTUAL_HOST_STYLE = 'virtualHostStyle';\nconst VIRTUAL_HOST_CLASS = 'virtualHostClass';\nconst VIRTUAL_HOST_HIDDEN = 'virtualHostHidden';\nconst VIRTUAL_HOST_ID = 'virtualHostId';\n\nfunction cache(fn) {\n const cache = Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nfunction cacheStringFunction(fn) {\n return cache(fn);\n}\nfunction getLen(str = '') {\n return ('' + str).replace(/[^\\x00-\\xff]/g, '**').length;\n}\nfunction hasLeadingSlash(str) {\n return str.indexOf('/') === 0;\n}\nfunction addLeadingSlash(str) {\n return hasLeadingSlash(str) ? str : '/' + str;\n}\nfunction removeLeadingSlash(str) {\n return hasLeadingSlash(str) ? str.slice(1) : str;\n}\nconst invokeArrayFns = (fns, arg) => {\n let ret;\n for (let i = 0; i < fns.length; i++) {\n ret = fns[i](arg);\n }\n return ret;\n};\nfunction updateElementStyle(element, styles) {\n for (const attrName in styles) {\n element.style[attrName] = styles[attrName];\n }\n}\nfunction once(fn, ctx = null) {\n let res;\n return ((...args) => {\n if (fn) {\n res = fn.apply(ctx, args);\n fn = null;\n }\n return res;\n });\n}\nconst sanitise = (val) => (val && JSON.parse(JSON.stringify(val))) || val;\nconst _completeValue = (value) => (value > 9 ? value : '0' + value);\nfunction formatDateTime({ date = new Date(), mode = 'date' }) {\n if (mode === 'time') {\n return (_completeValue(date.getHours()) + ':' + _completeValue(date.getMinutes()));\n }\n else {\n return (date.getFullYear() +\n '-' +\n _completeValue(date.getMonth() + 1) +\n '-' +\n _completeValue(date.getDate()));\n }\n}\nfunction callOptions(options, data) {\n options = options || {};\n if (isString(data)) {\n data = {\n errMsg: data,\n };\n }\n if (/:ok$/.test(data.errMsg)) {\n if (isFunction(options.success)) {\n options.success(data);\n }\n }\n else {\n if (isFunction(options.fail)) {\n options.fail(data);\n }\n }\n if (isFunction(options.complete)) {\n options.complete(data);\n }\n}\nfunction getValueByDataPath(obj, path) {\n if (!isString(path)) {\n return;\n }\n path = path.replace(/\\[(\\d+)\\]/g, '.$1');\n const parts = path.split('.');\n let key = parts[0];\n if (!obj) {\n obj = {};\n }\n if (parts.length === 1) {\n return obj[key];\n }\n return getValueByDataPath(obj[key], parts.slice(1).join('.'));\n}\nfunction sortObject(obj) {\n let sortObj = {};\n if (isPlainObject(obj)) {\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n const _key = key;\n sortObj[_key] = obj[_key];\n });\n }\n return !Object.keys(sortObj) ? obj : sortObj;\n}\nfunction getGlobalOnce() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n // worker\n if (typeof self !== 'undefined') {\n return self;\n }\n // browser\n if (typeof window !== 'undefined') {\n return window;\n }\n // nodejs\n // if (typeof global !== 'undefined') {\n // return global\n // }\n function g() {\n return this;\n }\n if (typeof g() !== 'undefined') {\n return g();\n }\n return (function () {\n return new Function('return this')();\n })();\n}\nlet g = undefined;\nfunction getGlobal() {\n if (g) {\n return g;\n }\n g = getGlobalOnce();\n return g;\n}\n\nfunction isComponentInternalInstance(vm) {\n return !!vm.appContext;\n}\nfunction resolveComponentInstance(instance) {\n return (instance &&\n (isComponentInternalInstance(instance) ? instance.proxy : instance));\n}\nfunction resolveOwnerVm(vm) {\n if (!vm) {\n return;\n }\n let componentName = vm.type.name;\n while (componentName && isBuiltInComponent(hyphenate(componentName))) {\n // ownerInstance 内置组件需要使用父 vm\n vm = vm.parent;\n componentName = vm.type.name;\n }\n return vm.proxy;\n}\nfunction isElement(el) {\n // Element\n return el.nodeType === 1;\n}\nfunction resolveOwnerEl(instance, multi = false) {\n const { vnode } = instance;\n if (isElement(vnode.el)) {\n return multi ? (vnode.el ? [vnode.el] : []) : vnode.el;\n }\n const { subTree } = instance;\n // ShapeFlags.ARRAY_CHILDREN = 1<<4\n if (subTree.shapeFlag & 16) {\n const elemVNodes = subTree.children.filter((vnode) => vnode.el && isElement(vnode.el));\n if (elemVNodes.length > 0) {\n if (multi) {\n return elemVNodes.map((node) => node.el);\n }\n return elemVNodes[0].el;\n }\n }\n return multi ? (vnode.el ? [vnode.el] : []) : vnode.el;\n}\nfunction dynamicSlotName(name) {\n return name === 'default' ? SLOT_DEFAULT_NAME : name;\n}\nconst customizeRE = /:/g;\nfunction customizeEvent(str) {\n return camelize(str.replace(customizeRE, '-'));\n}\nfunction normalizeStyle(value) {\n const g = getGlobal();\n if (g && g.UTSJSONObject && value instanceof g.UTSJSONObject) {\n const styleObject = {};\n g.UTSJSONObject.keys(value).forEach((key) => {\n styleObject[key] = value[key];\n });\n return normalizeStyle$1(styleObject);\n }\n else if (value instanceof Map) {\n const styleObject = {};\n value.forEach((value, key) => {\n styleObject[key] = value;\n });\n return normalizeStyle$1(styleObject);\n }\n else if (isString(value)) {\n return parseStringStyle(value);\n }\n else if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item)\n ? parseStringStyle(item)\n : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n }\n else {\n return normalizeStyle$1(value);\n }\n}\nfunction normalizeClass(value) {\n let res = '';\n const g = getGlobal();\n if (g && g.UTSJSONObject && value instanceof g.UTSJSONObject) {\n g.UTSJSONObject.keys(value).forEach((key) => {\n if (value[key]) {\n res += key + ' ';\n }\n });\n }\n else if (value instanceof Map) {\n value.forEach((value, key) => {\n if (value) {\n res += key + ' ';\n }\n });\n }\n else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + ' ';\n }\n }\n }\n else {\n res = normalizeClass$1(value);\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props)\n return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nlet lastLogTime = 0;\nfunction formatLog(module, ...args) {\n const now = Date.now();\n const diff = lastLogTime ? now - lastLogTime : 0;\n lastLogTime = now;\n return `[${now}][${diff}ms][${module}]:${args\n .map((arg) => JSON.stringify(arg))\n .join(' ')}`;\n}\n\nfunction formatKey(key) {\n return camelize(key.substring(5));\n}\n// question/139181,增加副作用,避免 initCustomDataset 在 build 下被 tree-shaking\nconst initCustomDatasetOnce = /*#__PURE__*/ once((isBuiltInElement) => {\n isBuiltInElement =\n isBuiltInElement || ((el) => el.tagName.startsWith('UNI-'));\n const prototype = HTMLElement.prototype;\n const setAttribute = prototype.setAttribute;\n prototype.setAttribute = function (key, value) {\n if (key.startsWith('data-') && isBuiltInElement(this)) {\n const dataset = this.__uniDataset ||\n (this.__uniDataset = {});\n dataset[formatKey(key)] = value;\n }\n setAttribute.call(this, key, value);\n };\n const removeAttribute = prototype.removeAttribute;\n prototype.removeAttribute = function (key) {\n if (this.__uniDataset &&\n key.startsWith('data-') &&\n isBuiltInElement(this)) {\n delete this.__uniDataset[formatKey(key)];\n }\n removeAttribute.call(this, key);\n };\n});\nfunction getCustomDataset(el) {\n return extend({}, el.dataset, el.__uniDataset);\n}\n\nconst unitRE = new RegExp(`\"[^\"]+\"|'[^']+'|url\\\\([^)]+\\\\)|(\\\\d*\\\\.?\\\\d+)[r|u]px`, 'g');\nfunction toFixed(number, precision) {\n const multiplier = Math.pow(10, precision + 1);\n const wholeNumber = Math.floor(number * multiplier);\n return (Math.round(wholeNumber / 10) * 10) / multiplier;\n}\nconst defaultRpx2Unit = {\n unit: 'rem',\n unitRatio: 10 / 320,\n unitPrecision: 5,\n};\nconst defaultMiniProgramRpx2Unit = {\n unit: 'rpx',\n unitRatio: 1,\n unitPrecision: 1,\n};\nconst defaultNVueRpx2Unit = defaultMiniProgramRpx2Unit;\nfunction createRpx2Unit(unit, unitRatio, unitPrecision) {\n // ignore: rpxCalcIncludeWidth\n return (val) => val.replace(unitRE, (m, $1) => {\n if (!$1) {\n return m;\n }\n if (unitRatio === 1) {\n return `${$1}${unit}`;\n }\n const value = toFixed(parseFloat($1) * unitRatio, unitPrecision);\n return value === 0 ? '0' : `${value}${unit}`;\n });\n}\n\nfunction passive(passive) {\n return { passive };\n}\nfunction normalizeDataset(el) {\n // TODO\n return JSON.parse(JSON.stringify(el.dataset || {}));\n}\nfunction normalizeTarget(el) {\n const { id, offsetTop, offsetLeft } = el;\n return {\n id,\n dataset: getCustomDataset(el),\n offsetTop,\n offsetLeft,\n };\n}\nfunction addFont(family, source, desc) {\n const fonts = document.fonts;\n if (fonts) {\n const fontFace = new FontFace(family, source, desc);\n return fontFace.load().then(() => {\n fonts.add && fonts.add(fontFace);\n });\n }\n return new Promise((resolve) => {\n const style = document.createElement('style');\n const values = [];\n if (desc) {\n const { style, weight, stretch, unicodeRange, variant, featureSettings } = desc;\n style && values.push(`font-style:${style}`);\n weight && values.push(`font-weight:${weight}`);\n stretch && values.push(`font-stretch:${stretch}`);\n unicodeRange && values.push(`unicode-range:${unicodeRange}`);\n variant && values.push(`font-variant:${variant}`);\n featureSettings && values.push(`font-feature-settings:${featureSettings}`);\n }\n style.innerText = `@font-face{font-family:\"${family}\";src:${source};${values.join(';')}}`;\n document.head.appendChild(style);\n resolve();\n });\n}\nfunction scrollTo(scrollTop, duration, isH5) {\n if (isString(scrollTop)) {\n const el = document.querySelector(scrollTop);\n if (el) {\n const { top } = el.getBoundingClientRect();\n scrollTop = top + window.pageYOffset;\n // 如果存在,减去 高度\n const pageHeader = document.querySelector('uni-page-head');\n if (pageHeader) {\n scrollTop -= pageHeader.offsetHeight;\n }\n }\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n const documentElement = document.documentElement;\n const { clientHeight, scrollHeight } = documentElement;\n scrollTop = Math.min(scrollTop, scrollHeight - clientHeight);\n if (duration === 0) {\n // 部分浏览器(比如微信)中 scrollTop 的值需要通过 document.body 来控制\n documentElement.scrollTop = document.body.scrollTop = scrollTop;\n return;\n }\n if (window.scrollY === scrollTop) {\n return;\n }\n const scrollTo = (duration) => {\n if (duration <= 0) {\n window.scrollTo(0, scrollTop);\n return;\n }\n const distaince = scrollTop - window.scrollY;\n requestAnimationFrame(function () {\n window.scrollTo(0, window.scrollY + (distaince / duration) * 10);\n scrollTo(duration - 10);\n });\n };\n scrollTo(duration);\n}\n\nconst encode = encodeURIComponent;\nfunction stringifyQuery(obj, encodeStr = encode) {\n const res = obj\n ? Object.keys(obj)\n .map((key) => {\n let val = obj[key];\n if (typeof val === undefined || val === null) {\n val = '';\n }\n else if (isPlainObject(val)) {\n val = JSON.stringify(val);\n }\n return encodeStr(key) + '=' + encodeStr(val);\n })\n .filter((x) => x.length > 0)\n .join('&')\n : null;\n return res ? `?${res}` : '';\n}\n/**\n * Decode text using `decodeURIComponent`. Returns the original text if it\n * fails.\n *\n * @param text - string to decode\n * @returns decoded string\n */\nfunction decode(text) {\n try {\n return decodeURIComponent('' + text);\n }\n catch (err) { }\n return '' + text;\n}\nfunction decodedQuery(query = {}) {\n const decodedQuery = {};\n Object.keys(query).forEach((name) => {\n try {\n decodedQuery[name] = decode(query[name]);\n }\n catch (e) {\n decodedQuery[name] = query[name];\n }\n });\n return decodedQuery;\n}\nconst PLUS_RE = /\\+/g; // %2B\n/**\n * https://github.com/vuejs/vue-router-next/blob/master/src/query.ts\n * @internal\n *\n * @param search - search string to parse\n * @returns a query object\n */\nfunction parseQuery(search) {\n const query = {};\n // avoid creating an object with an empty key and empty value\n // because of split('&')\n if (search === '' || search === '?')\n return query;\n const hasLeadingIM = search[0] === '?';\n const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\n for (let i = 0; i < searchParams.length; ++i) {\n // pre decode the + into space\n const searchParam = searchParams[i].replace(PLUS_RE, ' ');\n // allow the = character\n let eqPos = searchParam.indexOf('=');\n let key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n let value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n if (key in query) {\n // an extra variable for ts types\n let currentValue = query[key];\n if (!isArray(currentValue)) {\n currentValue = query[key] = [currentValue];\n }\n currentValue.push(value);\n }\n else {\n query[key] = value;\n }\n }\n return query;\n}\n\nfunction parseUrl(url) {\n const [path, querystring] = url.split('?', 2);\n return {\n path,\n query: parseQuery(querystring || ''),\n };\n}\n\nfunction parseNVueDataset(attr) {\n const dataset = {};\n if (attr) {\n Object.keys(attr).forEach((key) => {\n if (key.indexOf('data-') === 0) {\n dataset[key.replace('data-', '')] = attr[key];\n }\n });\n }\n return dataset;\n}\n\nfunction plusReady(callback) {\n if (!isFunction(callback)) {\n return;\n }\n if (window.plus) {\n return callback();\n }\n document.addEventListener('plusready', callback);\n}\n\nclass DOMException extends Error {\n constructor(message) {\n super(message);\n this.name = 'DOMException';\n }\n}\n\nfunction normalizeEventType(type, options) {\n if (options) {\n if (options.capture) {\n type += 'Capture';\n }\n if (options.once) {\n type += 'Once';\n }\n if (options.passive) {\n type += 'Passive';\n }\n }\n return `on${capitalize(camelize(type))}`;\n}\nclass UniEvent {\n constructor(type, opts) {\n this.defaultPrevented = false;\n this.timeStamp = Date.now();\n this._stop = false;\n this._end = false;\n this.type = type;\n this.bubbles = !!opts.bubbles;\n this.cancelable = !!opts.cancelable;\n }\n preventDefault() {\n this.defaultPrevented = true;\n }\n stopImmediatePropagation() {\n this._end = this._stop = true;\n }\n stopPropagation() {\n this._stop = true;\n }\n}\nfunction createUniEvent(evt) {\n if (evt instanceof UniEvent) {\n return evt;\n }\n const [type] = parseEventName(evt.type);\n const uniEvent = new UniEvent(type, {\n bubbles: false,\n cancelable: false,\n });\n extend(uniEvent, evt);\n return uniEvent;\n}\nclass UniEventTarget {\n constructor() {\n this.listeners = Object.create(null);\n }\n dispatchEvent(evt) {\n const listeners = this.listeners[evt.type];\n if (!listeners) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error(formatLog('dispatchEvent', this.nodeId), evt.type, 'not found');\n }\n return false;\n }\n // 格式化事件类型\n const event = createUniEvent(evt);\n const len = listeners.length;\n for (let i = 0; i < len; i++) {\n listeners[i].call(this, event);\n if (event._end) {\n break;\n }\n }\n return event.cancelable && event.defaultPrevented;\n }\n addEventListener(type, listener, options) {\n type = normalizeEventType(type, options);\n (this.listeners[type] || (this.listeners[type] = [])).push(listener);\n }\n removeEventListener(type, callback, options) {\n type = normalizeEventType(type, options);\n const listeners = this.listeners[type];\n if (!listeners) {\n return;\n }\n const index = listeners.indexOf(callback);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseEventName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while ((m = name.match(optionsModifierRE))) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n return [hyphenate(name.slice(2)), options];\n}\n\nconst EventModifierFlags = /*#__PURE__*/ (() => {\n return {\n stop: 1,\n prevent: 1 << 1,\n self: 1 << 2,\n };\n})();\nfunction encodeModifier(modifiers) {\n let flag = 0;\n if (modifiers.includes('stop')) {\n flag |= EventModifierFlags.stop;\n }\n if (modifiers.includes('prevent')) {\n flag |= EventModifierFlags.prevent;\n }\n if (modifiers.includes('self')) {\n flag |= EventModifierFlags.self;\n }\n return flag;\n}\n\nconst NODE_TYPE_PAGE = 0;\nconst NODE_TYPE_ELEMENT = 1;\nconst NODE_TYPE_TEXT = 3;\nconst NODE_TYPE_COMMENT = 8;\nfunction sibling(node, type) {\n const { parentNode } = node;\n if (!parentNode) {\n return null;\n }\n const { childNodes } = parentNode;\n return childNodes[childNodes.indexOf(node) + (type === 'n' ? 1 : -1)] || null;\n}\nfunction removeNode(node) {\n const { parentNode } = node;\n if (parentNode) {\n const { childNodes } = parentNode;\n const index = childNodes.indexOf(node);\n if (index > -1) {\n node.parentNode = null;\n childNodes.splice(index, 1);\n }\n }\n}\nfunction checkNodeId(node) {\n if (!node.nodeId && node.pageNode) {\n node.nodeId = node.pageNode.genId();\n }\n}\n// 为优化性能,各平台不使用proxy来实现node的操作拦截,而是直接通过pageNode定制\nclass UniNode extends UniEventTarget {\n constructor(nodeType, nodeName, container) {\n super();\n this.pageNode = null;\n this.parentNode = null;\n this._text = null;\n if (container) {\n const { pageNode } = container;\n if (pageNode) {\n this.pageNode = pageNode;\n this.nodeId = pageNode.genId();\n !pageNode.isUnmounted && pageNode.onCreate(this, nodeName);\n }\n }\n this.nodeType = nodeType;\n this.nodeName = nodeName;\n this.childNodes = [];\n }\n get firstChild() {\n return this.childNodes[0] || null;\n }\n get lastChild() {\n const { childNodes } = this;\n const length = childNodes.length;\n return length ? childNodes[length - 1] : null;\n }\n get nextSibling() {\n return sibling(this, 'n');\n }\n get nodeValue() {\n return null;\n }\n set nodeValue(_val) { }\n get textContent() {\n return this._text || '';\n }\n set textContent(text) {\n this._text = text;\n if (this.pageNode && !this.pageNode.isUnmounted) {\n this.pageNode.onTextContent(this, text);\n }\n }\n get parentElement() {\n const { parentNode } = this;\n if (parentNode && parentNode.nodeType === NODE_TYPE_ELEMENT) {\n return parentNode;\n }\n return null;\n }\n get previousSibling() {\n return sibling(this, 'p');\n }\n appendChild(newChild) {\n return this.insertBefore(newChild, null);\n }\n cloneNode(deep) {\n const cloned = extend(Object.create(Object.getPrototypeOf(this)), this);\n const { attributes } = cloned;\n if (attributes) {\n cloned.attributes = extend({}, attributes);\n }\n if (deep) {\n cloned.childNodes = cloned.childNodes.map((childNode) => childNode.cloneNode(true));\n }\n return cloned;\n }\n insertBefore(newChild, refChild) {\n // 先从现在的父节点移除(注意:不能触发onRemoveChild,否则会生成先remove该 id,再 insert)\n removeNode(newChild);\n newChild.pageNode = this.pageNode;\n newChild.parentNode = this;\n checkNodeId(newChild);\n const { childNodes } = this;\n if (refChild) {\n const index = childNodes.indexOf(refChild);\n if (index === -1) {\n throw new DOMException(`Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.`);\n }\n childNodes.splice(index, 0, newChild);\n }\n else {\n childNodes.push(newChild);\n }\n return this.pageNode && !this.pageNode.isUnmounted\n ? this.pageNode.onInsertBefore(this, newChild, refChild)\n : newChild;\n }\n removeChild(oldChild) {\n const { childNodes } = this;\n const index = childNodes.indexOf(oldChild);\n if (index === -1) {\n throw new DOMException(`Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.`);\n }\n oldChild.parentNode = null;\n childNodes.splice(index, 1);\n return this.pageNode && !this.pageNode.isUnmounted\n ? this.pageNode.onRemoveChild(oldChild)\n : oldChild;\n }\n}\nconst ATTR_CLASS = 'class';\nconst ATTR_STYLE = 'style';\nconst ATTR_INNER_HTML = 'innerHTML';\nconst ATTR_TEXT_CONTENT = 'textContent';\nconst ATTR_V_SHOW = '.vShow';\nconst ATTR_V_OWNER_ID = '.vOwnerId';\nconst ATTR_V_RENDERJS = '.vRenderjs';\nconst ATTR_CHANGE_PREFIX = 'change:';\nclass UniBaseNode extends UniNode {\n constructor(nodeType, nodeName, container) {\n super(nodeType, nodeName, container);\n this.attributes = Object.create(null);\n this.style = null;\n this.vShow = null;\n this._html = null;\n }\n get className() {\n return (this.attributes[ATTR_CLASS] || '');\n }\n set className(val) {\n this.setAttribute(ATTR_CLASS, val);\n }\n get innerHTML() {\n return '';\n }\n set innerHTML(html) {\n this._html = html;\n }\n addEventListener(type, listener, options) {\n super.addEventListener(type, listener, options);\n if (this.pageNode && !this.pageNode.isUnmounted) {\n if (listener.wxsEvent) {\n this.pageNode.onAddWxsEvent(this, normalizeEventType(type, options), listener.wxsEvent, encodeModifier(listener.modifiers || []));\n }\n else {\n this.pageNode.onAddEvent(this, normalizeEventType(type, options), encodeModifier(listener.modifiers || []));\n }\n }\n }\n removeEventListener(type, callback, options) {\n super.removeEventListener(type, callback, options);\n if (this.pageNode && !this.pageNode.isUnmounted) {\n this.pageNode.onRemoveEvent(this, normalizeEventType(type, options));\n }\n }\n getAttribute(qualifiedName) {\n if (qualifiedName === ATTR_STYLE) {\n return this.style;\n }\n return this.attributes[qualifiedName];\n }\n removeAttribute(qualifiedName) {\n if (qualifiedName == ATTR_STYLE) {\n this.style = null;\n }\n else {\n delete this.attributes[qualifiedName];\n }\n if (this.pageNode && !this.pageNode.isUnmounted) {\n this.pageNode.onRemoveAttribute(this, qualifiedName);\n }\n }\n setAttribute(qualifiedName, value) {\n if (qualifiedName === ATTR_STYLE) {\n this.style = value;\n }\n else {\n this.attributes[qualifiedName] = value;\n }\n if (this.pageNode && !this.pageNode.isUnmounted) {\n this.pageNode.onSetAttribute(this, qualifiedName, value);\n }\n }\n toJSON({ attr, normalize, } = {}) {\n const { attributes, style, listeners, _text } = this;\n const res = {};\n if (Object.keys(attributes).length) {\n res.a = normalize ? normalize(attributes) : attributes;\n }\n const events = Object.keys(listeners);\n if (events.length) {\n let w = undefined;\n const e = {};\n events.forEach((name) => {\n const handlers = listeners[name];\n if (handlers.length) {\n // 可能存在多个 handler 且不同 modifiers 吗?\n const { wxsEvent, modifiers } = handlers[0];\n const modifier = encodeModifier(modifiers || []);\n if (!wxsEvent) {\n e[name] = modifier;\n }\n else {\n if (!w) {\n w = {};\n }\n w[name] = [normalize ? normalize(wxsEvent) : wxsEvent, modifier];\n }\n }\n });\n res.e = normalize ? normalize(e, false) : e;\n if (w) {\n res.w = normalize ? normalize(w, false) : w;\n }\n }\n if (style !== null) {\n res.s = normalize ? normalize(style) : style;\n }\n if (!attr) {\n res.i = this.nodeId;\n res.n = this.nodeName;\n }\n if (_text !== null) {\n res.t = normalize ? normalize(_text) : _text;\n }\n return res;\n }\n}\n\nclass UniCommentNode extends UniNode {\n constructor(text, container) {\n super(NODE_TYPE_COMMENT, '#comment', container);\n this._text = (process.env.NODE_ENV !== 'production') ? text : '';\n }\n toJSON(opts = {}) {\n // 暂时不传递 text 到 view 层,没啥意义,节省点数据量\n return opts.attr\n ? {}\n : {\n i: this.nodeId,\n };\n // return opts.attr\n // ? { t: this._text as string }\n // : {\n // i: this.nodeId!,\n // t: this._text as string,\n // }\n }\n}\n\nclass UniElement extends UniBaseNode {\n constructor(nodeName, container) {\n super(NODE_TYPE_ELEMENT, nodeName.toUpperCase(), container);\n this.tagName = this.nodeName;\n }\n}\nclass UniInputElement extends UniElement {\n get value() {\n return this.getAttribute('value');\n }\n set value(val) {\n this.setAttribute('value', val);\n }\n}\nclass UniTextAreaElement extends UniInputElement {\n}\n\nclass UniTextNode extends UniBaseNode {\n constructor(text, container) {\n super(NODE_TYPE_TEXT, '#text', container);\n this._text = text;\n }\n get nodeValue() {\n return this._text || '';\n }\n set nodeValue(text) {\n this._text = text;\n if (this.pageNode && !this.pageNode.isUnmounted) {\n this.pageNode.onNodeValue(this, text);\n }\n }\n}\n\nconst forcePatchProps = {\n AD: ['data'],\n 'AD-DRAW': ['data'],\n 'LIVE-PLAYER': ['picture-in-picture-mode'],\n MAP: [\n 'markers',\n 'polyline',\n 'circles',\n 'controls',\n 'include-points',\n 'polygons',\n ],\n PICKER: ['range', 'value'],\n 'PICKER-VIEW': ['value'],\n 'RICH-TEXT': ['nodes'],\n VIDEO: ['danmu-list', 'header'],\n 'WEB-VIEW': ['webview-styles'],\n};\nconst forcePatchPropKeys = ['animation'];\n\nconst forcePatchProp = (el, key) => {\n if (forcePatchPropKeys.indexOf(key) > -1) {\n return true;\n }\n const keys = forcePatchProps[el.nodeName];\n if (keys && keys.indexOf(key) > -1) {\n return true;\n }\n return false;\n};\n\nconst ACTION_TYPE_PAGE_CREATE = 1;\nconst ACTION_TYPE_PAGE_CREATED = 2;\nconst ACTION_TYPE_CREATE = 3;\nconst ACTION_TYPE_INSERT = 4;\nconst ACTION_TYPE_REMOVE = 5;\nconst ACTION_TYPE_SET_ATTRIBUTE = 6;\nconst ACTION_TYPE_REMOVE_ATTRIBUTE = 7;\nconst ACTION_TYPE_ADD_EVENT = 8;\nconst ACTION_TYPE_REMOVE_EVENT = 9;\nconst ACTION_TYPE_SET_TEXT = 10;\nconst ACTION_TYPE_ADD_WXS_EVENT = 12;\nconst ACTION_TYPE_PAGE_SCROLL = 15;\nconst ACTION_TYPE_EVENT = 20;\n\n/**\n * 需要手动传入 timer,主要是解决 App 平台的定制 timer\n */\nfunction debounce(fn, delay, { clearTimeout, setTimeout }) {\n let timeout;\n const newFn = function () {\n clearTimeout(timeout);\n const timerFn = () => fn.apply(this, arguments);\n timeout = setTimeout(timerFn, delay);\n };\n newFn.cancel = function () {\n clearTimeout(timeout);\n };\n return newFn;\n}\n\nclass EventChannel {\n constructor(id, events) {\n this.id = id;\n this.listener = {};\n this.emitCache = [];\n if (events) {\n Object.keys(events).forEach((name) => {\n this.on(name, events[name]);\n });\n }\n }\n emit(eventName, ...args) {\n const fns = this.listener[eventName];\n if (!fns) {\n return this.emitCache.push({\n eventName,\n args,\n });\n }\n fns.forEach((opt) => {\n opt.fn.apply(opt.fn, args);\n });\n this.listener[eventName] = fns.filter((opt) => opt.type !== 'once');\n }\n on(eventName, fn) {\n this._addListener(eventName, 'on', fn);\n this._clearCache(eventName);\n }\n once(eventName, fn) {\n this._addListener(eventName, 'once', fn);\n this._clearCache(eventName);\n }\n off(eventName, fn) {\n const fns = this.listener[eventName];\n if (!fns) {\n return;\n }\n if (fn) {\n for (let i = 0; i < fns.length;) {\n if (fns[i].fn === fn) {\n fns.splice(i, 1);\n i--;\n }\n i++;\n }\n }\n else {\n delete this.listener[eventName];\n }\n }\n _clearCache(eventName) {\n for (let index = 0; index < this.emitCache.length; index++) {\n const cache = this.emitCache[index];\n const _name = eventName\n ? cache.eventName === eventName\n ? eventName\n : null\n : cache.eventName;\n if (!_name)\n continue;\n const location = this.emit.apply(this, [_name, ...cache.args]);\n if (typeof location === 'number') {\n this.emitCache.pop();\n continue;\n }\n this.emitCache.splice(index, 1);\n index--;\n }\n }\n _addListener(eventName, type, fn) {\n (this.listener[eventName] || (this.listener[eventName] = [])).push({\n fn,\n type,\n });\n }\n}\n\nconst PAGE_HOOKS = [\n ON_INIT,\n ON_LOAD,\n ON_SHOW,\n ON_HIDE,\n ON_UNLOAD,\n ON_BACK_PRESS,\n ON_PAGE_SCROLL,\n ON_TAB_ITEM_TAP,\n ON_REACH_BOTTOM,\n ON_PULL_DOWN_REFRESH,\n ON_SHARE_TIMELINE,\n ON_SHARE_APP_MESSAGE,\n ON_SHARE_CHAT,\n ON_ADD_TO_FAVORITES,\n ON_SAVE_EXIT_STATE,\n ON_NAVIGATION_BAR_BUTTON_TAP,\n ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,\n ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,\n ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,\n ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED,\n];\nfunction isRootImmediateHook(name) {\n const PAGE_SYNC_HOOKS = [ON_LOAD, ON_SHOW];\n return PAGE_SYNC_HOOKS.indexOf(name) > -1;\n}\n// isRootImmediateHookX deprecated\nfunction isRootHook(name) {\n return PAGE_HOOKS.indexOf(name) > -1;\n}\nconst UniLifecycleHooks = [\n ON_SHOW,\n ON_HIDE,\n ON_LAUNCH,\n ON_ERROR,\n ON_THEME_CHANGE,\n ON_PAGE_NOT_FOUND,\n ON_UNHANDLE_REJECTION,\n ON_EXIT,\n ON_INIT,\n ON_LOAD,\n ON_READY,\n ON_UNLOAD,\n ON_RESIZE,\n ON_BACK_PRESS,\n ON_PAGE_SCROLL,\n ON_TAB_ITEM_TAP,\n ON_REACH_BOTTOM,\n ON_PULL_DOWN_REFRESH,\n ON_SHARE_TIMELINE,\n ON_ADD_TO_FAVORITES,\n ON_SHARE_APP_MESSAGE,\n ON_SHARE_CHAT,\n ON_SAVE_EXIT_STATE,\n ON_NAVIGATION_BAR_BUTTON_TAP,\n ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,\n ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,\n ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,\n ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED,\n];\nconst MINI_PROGRAM_PAGE_RUNTIME_HOOKS = /*#__PURE__*/ (() => {\n return {\n onPageScroll: 1,\n onShareAppMessage: 1 << 1,\n onShareTimeline: 1 << 2,\n };\n})();\nfunction isUniLifecycleHook(name, value, checkType = true) {\n // 检查类型\n if (checkType && !isFunction(value)) {\n return false;\n }\n if (UniLifecycleHooks.indexOf(name) > -1) {\n // 已预定义\n return true;\n }\n else if (name.indexOf('on') === 0) {\n // 以 on 开头\n return true;\n }\n return false;\n}\n\nlet vueApp;\nconst createVueAppHooks = [];\n/**\n * 提供 createApp 的回调事件,方便三方插件接收 App 对象,处理挂靠全局 mixin 之类的逻辑\n */\nfunction onCreateVueApp(hook) {\n // TODO 每个 nvue 页面都会触发\n if (vueApp) {\n return hook(vueApp);\n }\n createVueAppHooks.push(hook);\n}\nfunction invokeCreateVueAppHook(app) {\n vueApp = app;\n createVueAppHooks.forEach((hook) => hook(app));\n}\nconst invokeCreateErrorHandler = once((app, createErrorHandler) => {\n // 不再判断开发者是否监听了onError,直接返回 createErrorHandler,内部 errorHandler 会调用开发者自定义的 errorHandler,以及判断开发者是否监听了onError\n return createErrorHandler(app);\n});\n\nconst E = function () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n};\nE.prototype = {\n _id: 1,\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx,\n _id: this._id,\n });\n return this._id++;\n },\n once: function (name, callback, ctx) {\n var self = this;\n function listener() {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n }\n listener._ = callback;\n return this.on(name, listener, ctx);\n },\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n return this;\n },\n off: function (name, event) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n if (evts && event) {\n for (var i = evts.length - 1; i >= 0; i--) {\n if (evts[i].fn === event ||\n evts[i].fn._ === event ||\n evts[i]._id === event) {\n evts.splice(i, 1);\n break;\n }\n }\n liveEvents = evts;\n }\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n liveEvents.length ? (e[name] = liveEvents) : delete e[name];\n return this;\n },\n};\nvar E$1 = E;\n\nconst borderStyles = {\n black: 'rgba(0,0,0,0.4)',\n white: 'rgba(255,255,255,0.4)',\n};\nfunction normalizeTabBarStyles(borderStyle) {\n if (borderStyle && borderStyle in borderStyles) {\n return borderStyles[borderStyle];\n }\n return borderStyle;\n}\nfunction normalizeTitleColor(titleColor) {\n return titleColor === 'black' ? '#000000' : '#ffffff';\n}\nfunction resolveStringStyleItem(modeStyle, styleItem, key) {\n if (isString(styleItem) && styleItem.startsWith('@')) {\n const _key = styleItem.replace('@', '');\n let _styleItem = modeStyle[_key] || styleItem;\n switch (key) {\n case 'titleColor':\n _styleItem = normalizeTitleColor(_styleItem);\n break;\n case 'borderStyle':\n _styleItem = normalizeTabBarStyles(_styleItem);\n break;\n }\n return _styleItem;\n }\n return styleItem;\n}\nfunction normalizeStyles(pageStyle, themeConfig = {}, mode = 'light') {\n const modeStyle = themeConfig[mode];\n const styles = {};\n if (typeof modeStyle === 'undefined' || !pageStyle)\n return pageStyle;\n Object.keys(pageStyle).forEach((key) => {\n const styleItem = pageStyle[key]; // Object Array String\n const parseStyleItem = () => {\n if (isPlainObject(styleItem))\n return normalizeStyles(styleItem, themeConfig, mode);\n if (isArray(styleItem))\n return styleItem.map((item) => {\n if (isPlainObject(item))\n return normalizeStyles(item, themeConfig, mode);\n return resolveStringStyleItem(modeStyle, item);\n });\n return resolveStringStyleItem(modeStyle, styleItem, key);\n };\n styles[key] = parseStyleItem();\n });\n return styles;\n}\n\nfunction getEnvLocale() {\n const { env } = process;\n const lang = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE;\n return (lang && lang.replace(/[.:].*/, '')) || 'en';\n}\n\nconst isStringIntegerKey = (key) => typeof key === 'string' &&\n key !== 'NaN' &&\n key[0] !== '-' &&\n '' + parseInt(key, 10) === key;\nconst isNumberIntegerKey = (key) => typeof key === 'number' &&\n !isNaN(key) &&\n key >= 0 &&\n parseInt(key + '', 10) === key;\n/**\n * 用于替代@vue/shared的isIntegerKey,原始方法在鸿蒙arkts中会引发bug。根本原因是arkts的数组的key是数字而不是字符串。\n * 目前这个方法使用的地方都和数组有关,切记不能挪作他用。\n * @param key\n * @returns\n */\nconst isIntegerKey = (key) => isNumberIntegerKey(key) || isStringIntegerKey(key);\n\nconst GLOBALS_ALLOWED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,' +\n 'uni';\nconst isGloballyAllowed = /*#__PURE__*/ makeMap(GLOBALS_ALLOWED);\n\nexport { ACTION_TYPE_ADD_EVENT, ACTION_TYPE_ADD_WXS_EVENT, ACTION_TYPE_CREATE, ACTION_TYPE_EVENT, ACTION_TYPE_INSERT, ACTION_TYPE_PAGE_CREATE, ACTION_TYPE_PAGE_CREATED, ACTION_TYPE_PAGE_SCROLL, ACTION_TYPE_REMOVE, ACTION_TYPE_REMOVE_ATTRIBUTE, ACTION_TYPE_REMOVE_EVENT, ACTION_TYPE_SET_ATTRIBUTE, ACTION_TYPE_SET_TEXT, ATTR_CHANGE_PREFIX, ATTR_CLASS, ATTR_INNER_HTML, ATTR_STYLE, ATTR_TEXT_CONTENT, ATTR_V_OWNER_ID, ATTR_V_RENDERJS, ATTR_V_SHOW, BACKGROUND_COLOR, BUILT_IN_TAGS, BUILT_IN_TAG_NAMES, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, DATA_RE, E$1 as Emitter, EventChannel, EventModifierFlags, I18N_JSON_DELIMITERS, JSON_PROTOCOL, LINEFEED, MINI_PROGRAM_PAGE_RUNTIME_HOOKS, NAVBAR_HEIGHT, NODE_TYPE_COMMENT, NODE_TYPE_ELEMENT, NODE_TYPE_PAGE, NODE_TYPE_TEXT, NVUE_BUILT_IN_TAGS, NVUE_U_BUILT_IN_TAGS, OFF_HOST_THEME_CHANGE, OFF_THEME_CHANGE, ON_ADD_TO_FAVORITES, ON_APP_ENTER_BACKGROUND, ON_APP_ENTER_FOREGROUND, ON_BACK_PRESS, ON_ERROR, ON_EXIT, ON_HIDE, ON_HOST_THEME_CHANGE, ON_INIT, ON_KEYBOARD_HEIGHT_CHANGE, ON_LAST_PAGE_BACK_PRESS, ON_LAUNCH, ON_LOAD, ON_NAVIGATION_BAR_BUTTON_TAP, ON_NAVIGATION_BAR_CHANGE, ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED, ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED, ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED, ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED, ON_PAGE_NOT_FOUND, ON_PAGE_SCROLL, ON_PULL_DOWN_REFRESH, ON_REACH_BOTTOM, ON_REACH_BOTTOM_DISTANCE, ON_READY, ON_RESIZE, ON_SAVE_EXIT_STATE, ON_SHARE_APP_MESSAGE, ON_SHARE_CHAT, ON_SHARE_TIMELINE, ON_SHOW, ON_TAB_ITEM_TAP, ON_THEME_CHANGE, ON_UNHANDLE_REJECTION, ON_UNLOAD, ON_WEB_INVOKE_APP_SERVICE, ON_WXS_INVOKE_CALL_METHOD, PLUS_RE, PRIMARY_COLOR, RENDERJS_MODULES, RESPONSIVE_MIN_WIDTH, SCHEME_RE, SELECTED_COLOR, SLOT_DEFAULT_NAME, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, UNI_SSR_STORE, UNI_SSR_TITLE, UNI_STORAGE_LOCALE, UNI_UI_CONFLICT_TAGS, UVUE_BUILT_IN_TAGS, UVUE_HARMONY_BUILT_IN_TAGS, UVUE_IOS_BUILT_IN_TAGS, UVUE_WEB_BUILT_IN_CUSTOM_ELEMENTS, UVUE_WEB_BUILT_IN_TAGS, UniBaseNode, UniCommentNode, UniElement, UniEvent, UniInputElement, UniLifecycleHooks, UniNode, UniTextAreaElement, UniTextNode, VIRTUAL_HOST_CLASS, VIRTUAL_HOST_HIDDEN, VIRTUAL_HOST_ID, VIRTUAL_HOST_STYLE, WEB_INVOKE_APPSERVICE, WXS_MODULES, WXS_PROTOCOL, addFont, addLeadingSlash, borderStyles, cache, cacheStringFunction, callOptions, createIsCustomElement, createRpx2Unit, createUniEvent, customizeEvent, debounce, decode, decodedQuery, defaultMiniProgramRpx2Unit, defaultNVueRpx2Unit, defaultRpx2Unit, dynamicSlotName, forcePatchProp, formatDateTime, formatLog, getCustomDataset, getEnvLocale, getGlobal, getLen, getValueByDataPath, initCustomDatasetOnce, invokeArrayFns, invokeCreateErrorHandler, invokeCreateVueAppHook, isAppHarmonyUVueNativeTag, isAppIOSUVueNativeTag, isAppNVueNativeTag, isAppNativeTag, isAppUVueBuiltInEasyComponent, isAppUVueNativeTag, isAppVoidTag, isBuiltInComponent, isComponentInternalInstance, isComponentTag, isGloballyAllowed, isH5CustomElement, isH5NativeTag, isIntegerKey, isMiniProgramNativeTag, isMiniProgramUVueNativeTag, isRootHook, isRootImmediateHook, isUniLifecycleHook, isUniXElement, normalizeClass, normalizeDataset, normalizeEventType, normalizeProps, normalizeStyle, normalizeStyles, normalizeTabBarStyles, normalizeTarget, normalizeTitleColor, onCreateVueApp, once, parseEventName, parseNVueDataset, parseQuery, parseUrl, passive, plusReady, removeLeadingSlash, resolveComponentInstance, resolveOwnerEl, resolveOwnerVm, sanitise, scrollTo, sortObject, stringifyQuery, updateElementStyle };\n","import { isRootHook, getValueByDataPath, isUniLifecycleHook, ON_ERROR, UniLifecycleHooks, invokeCreateErrorHandler, dynamicSlotName } from '@dcloudio/uni-shared';\nimport { NOOP, extend, isSymbol, isObject, def, hasChanged, isFunction, isArray, isPromise, camelize, capitalize, EMPTY_OBJ, remove, toHandlerKey, hasOwn, hyphenate, isReservedProp, toRawType, isString, normalizeClass, normalizeStyle, isOn, toTypeString, isMap, isIntegerKey, isSet, isPlainObject, makeMap, invokeArrayFns, isBuiltInDirective, looseToNumber, NO, EMPTY_ARR, isModelListener, toNumber, toDisplayString } from '@vue/shared';\nexport { EMPTY_OBJ, camelize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\n/**\n* @dcloudio/uni-mp-vue v3.4.21\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n\nfunction warn$2(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$2(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this._active) {\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n this._active = false;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$2(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeEffect;\nclass ReactiveEffect {\n constructor(fn, trigger, scheduler, scope) {\n this.fn = fn;\n this.trigger = trigger;\n this.scheduler = scheduler;\n this.active = true;\n this.deps = [];\n /**\n * @internal\n */\n this._dirtyLevel = 4;\n /**\n * @internal\n */\n this._trackId = 0;\n /**\n * @internal\n */\n this._runnings = 0;\n /**\n * @internal\n */\n this._shouldSchedule = false;\n /**\n * @internal\n */\n this._depsLength = 0;\n recordEffectScope(this, scope);\n }\n get dirty() {\n if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {\n this._dirtyLevel = 1;\n pauseTracking();\n for (let i = 0; i < this._depsLength; i++) {\n const dep = this.deps[i];\n if (dep.computed) {\n triggerComputed(dep.computed);\n if (this._dirtyLevel >= 4) {\n break;\n }\n }\n }\n if (this._dirtyLevel === 1) {\n this._dirtyLevel = 0;\n }\n resetTracking();\n }\n return this._dirtyLevel >= 4;\n }\n set dirty(v) {\n this._dirtyLevel = v ? 4 : 0;\n }\n run() {\n this._dirtyLevel = 0;\n if (!this.active) {\n return this.fn();\n }\n let lastShouldTrack = shouldTrack;\n let lastEffect = activeEffect;\n try {\n shouldTrack = true;\n activeEffect = this;\n this._runnings++;\n preCleanupEffect(this);\n return this.fn();\n } finally {\n postCleanupEffect(this);\n this._runnings--;\n activeEffect = lastEffect;\n shouldTrack = lastShouldTrack;\n }\n }\n stop() {\n var _a;\n if (this.active) {\n preCleanupEffect(this);\n postCleanupEffect(this);\n (_a = this.onStop) == null ? void 0 : _a.call(this);\n this.active = false;\n }\n }\n}\nfunction triggerComputed(computed) {\n return computed.value;\n}\nfunction preCleanupEffect(effect2) {\n effect2._trackId++;\n effect2._depsLength = 0;\n}\nfunction postCleanupEffect(effect2) {\n if (effect2.deps.length > effect2._depsLength) {\n for (let i = effect2._depsLength; i < effect2.deps.length; i++) {\n cleanupDepEffect(effect2.deps[i], effect2);\n }\n effect2.deps.length = effect2._depsLength;\n }\n}\nfunction cleanupDepEffect(dep, effect2) {\n const trackId = dep.get(effect2);\n if (trackId !== void 0 && effect2._trackId !== trackId) {\n dep.delete(effect2);\n if (dep.size === 0) {\n dep.cleanup();\n }\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const _effect = new ReactiveEffect(fn, NOOP, () => {\n if (_effect.dirty) {\n _effect.run();\n }\n });\n if (options) {\n extend(_effect, options);\n if (options.scope)\n recordEffectScope(_effect, options.scope);\n }\n if (!options || !options.lazy) {\n _effect.run();\n }\n const runner = _effect.run.bind(_effect);\n runner.effect = _effect;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nlet pauseScheduleStack = 0;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction pauseScheduling() {\n pauseScheduleStack++;\n}\nfunction resetScheduling() {\n pauseScheduleStack--;\n while (!pauseScheduleStack && queueEffectSchedulers.length) {\n queueEffectSchedulers.shift()();\n }\n}\nfunction trackEffect(effect2, dep, debuggerEventExtraInfo) {\n var _a;\n if (dep.get(effect2) !== effect2._trackId) {\n dep.set(effect2, effect2._trackId);\n const oldDep = effect2.deps[effect2._depsLength];\n if (oldDep !== dep) {\n if (oldDep) {\n cleanupDepEffect(oldDep, effect2);\n }\n effect2.deps[effect2._depsLength++] = dep;\n } else {\n effect2._depsLength++;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));\n }\n }\n}\nconst queueEffectSchedulers = [];\nfunction triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {\n var _a;\n pauseScheduling();\n for (const effect2 of dep.keys()) {\n let tracking;\n if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {\n effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);\n effect2._dirtyLevel = dirtyLevel;\n }\n if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));\n }\n effect2.trigger();\n if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {\n effect2._shouldSchedule = false;\n if (effect2.scheduler) {\n queueEffectSchedulers.push(effect2.scheduler);\n }\n }\n }\n }\n resetScheduling();\n}\n\nconst createDep = (cleanup, computed) => {\n const dep = /* @__PURE__ */ new Map();\n dep.cleanup = cleanup;\n dep.computed = computed;\n return dep;\n};\n\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"iterate\" : \"\");\nconst MAP_KEY_ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"Map key iterate\" : \"\");\nfunction track(target, type, key) {\n if (shouldTrack && activeEffect) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = createDep(() => depsMap.delete(key)));\n }\n trackEffect(\n activeEffect,\n dep,\n !!(process.env.NODE_ENV !== \"production\") ? {\n target,\n type,\n key\n } : void 0\n );\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n let deps = [];\n if (type === \"clear\") {\n deps = [...depsMap.values()];\n } else if (key === \"length\" && isArray(target)) {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || !isSymbol(key2) && key2 >= newLength) {\n deps.push(dep);\n }\n });\n } else {\n if (key !== void 0) {\n deps.push(depsMap.get(key));\n }\n switch (type) {\n case \"add\":\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isIntegerKey(key)) {\n deps.push(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n pauseScheduling();\n for (const dep of deps) {\n if (dep) {\n triggerEffects(\n dep,\n 4,\n !!(process.env.NODE_ENV !== \"production\") ? {\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n } : void 0\n );\n }\n }\n resetScheduling();\n}\nfunction getDepFromReactive(object, key) {\n var _a;\n return (_a = targetMap.get(object)) == null ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nconst arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n const instrumentations = {};\n [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n const arr = toRaw(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\", i + \"\");\n }\n const res = arr[key](...args);\n if (res === -1 || res === false) {\n return arr[key](...args.map(toRaw));\n } else {\n return res;\n }\n };\n });\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n pauseTracking();\n pauseScheduling();\n const res = toRaw(this)[key].apply(this, args);\n resetScheduling();\n resetTracking();\n return res;\n };\n });\n return instrumentations;\n}\nfunction hasOwnProperty(key) {\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the reciever is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(target, key, receiver);\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n return targetIsArray && isIntegerKey(key) ? res : res.value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n return false;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(target, key, value, receiver);\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$2(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$2(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(\n true\n);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n target = target[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has: has2 } = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n if (has2.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has2.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n}\nfunction has(key, isReadonly = false) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n target = target[\"__v_raw\"];\n !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n value = toRaw(value);\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n}\nfunction set$1(key, value) {\n value = toRaw(value);\n const target = toRaw(this);\n const { has: has2, get: get2 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get2.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n}\nfunction deleteEntry(key) {\n const target = toRaw(this);\n const { has: has2, get: get2 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get2 ? get2.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n}\nfunction clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\", void 0, void 0, oldTarget);\n }\n return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn$2(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations() {\n const mutableInstrumentations2 = {\n get(key) {\n return get(this, key);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n const shallowInstrumentations2 = {\n get(key) {\n return get(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n const readonlyInstrumentations2 = {\n get(key) {\n return get(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, false)\n };\n const shallowReadonlyInstrumentations2 = {\n get(key) {\n return get(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, true)\n };\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n mutableInstrumentations2[method] = createIterableMethod(method, false, false);\n readonlyInstrumentations2[method] = createIterableMethod(method, true, false);\n shallowInstrumentations2[method] = createIterableMethod(method, false, true);\n shallowReadonlyInstrumentations2[method] = createIterableMethod(\n method,\n true,\n true\n );\n });\n return [\n mutableInstrumentations2,\n readonlyInstrumentations2,\n shallowInstrumentations2,\n shallowReadonlyInstrumentations2\n ];\n}\nconst [\n mutableInstrumentations,\n readonlyInstrumentations,\n shallowInstrumentations,\n shallowReadonlyInstrumentations\n] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has2, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has2.call(target, rawKey)) {\n const type = toRawType(target);\n warn$2(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$2(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nconst COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;\nclass ComputedRefImpl {\n constructor(getter, _setter, isReadonly, isSSR) {\n this.getter = getter;\n this._setter = _setter;\n this.dep = void 0;\n this.__v_isRef = true;\n this[\"__v_isReadonly\"] = false;\n this.effect = new ReactiveEffect(\n () => getter(this._value),\n () => triggerRefValue(\n this,\n this.effect._dirtyLevel === 2 ? 2 : 3\n )\n );\n this.effect.computed = this;\n this.effect.active = this._cacheable = !isSSR;\n this[\"__v_isReadonly\"] = isReadonly;\n }\n get value() {\n const self = toRaw(this);\n if ((!self._cacheable || self.effect.dirty) && hasChanged(self._value, self._value = self.effect.run())) {\n triggerRefValue(self, 4);\n }\n trackRefValue(self);\n if (self.effect._dirtyLevel >= 2) {\n if (!!(process.env.NODE_ENV !== \"production\") && this._warnRecursive) {\n warn$2(COMPUTED_SIDE_EFFECT_WARN, `\n\ngetter: `, this.getter);\n }\n triggerRefValue(self, 2);\n }\n return self._value;\n }\n set value(newValue) {\n this._setter(newValue);\n }\n // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x\n get _dirty() {\n return this.effect.dirty;\n }\n set _dirty(v) {\n this.effect.dirty = v;\n }\n // #endregion\n}\nfunction computed$1(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n const onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn$2(\"Write operation failed: computed value is readonly\");\n } : NOOP;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.effect.onTrack = debugOptions.onTrack;\n cRef.effect.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nfunction trackRefValue(ref2) {\n var _a;\n if (shouldTrack && activeEffect) {\n ref2 = toRaw(ref2);\n trackEffect(\n activeEffect,\n (_a = ref2.dep) != null ? _a : ref2.dep = createDep(\n () => ref2.dep = void 0,\n ref2 instanceof ComputedRefImpl ? ref2 : void 0\n ),\n !!(process.env.NODE_ENV !== \"production\") ? {\n target: ref2,\n type: \"get\",\n key: \"value\"\n } : void 0\n );\n }\n}\nfunction triggerRefValue(ref2, dirtyLevel = 4, newVal) {\n ref2 = toRaw(ref2);\n const dep = ref2.dep;\n if (dep) {\n triggerEffects(\n dep,\n dirtyLevel,\n !!(process.env.NODE_ENV !== \"production\") ? {\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: newVal\n } : void 0\n );\n }\n}\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, __v_isShallow) {\n this.__v_isShallow = __v_isShallow;\n this.dep = void 0;\n this.__v_isRef = true;\n this._rawValue = __v_isShallow ? value : toRaw(value);\n this._value = __v_isShallow ? value : toReactive(value);\n }\n get value() {\n trackRefValue(this);\n return this._value;\n }\n set value(newVal) {\n const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n newVal = useDirectValue ? newVal : toRaw(newVal);\n if (hasChanged(newVal, this._rawValue)) {\n this._rawValue = newVal;\n this._value = useDirectValue ? newVal : toReactive(newVal);\n triggerRefValue(this, 4, newVal);\n }\n }\n}\nfunction triggerRef(ref2) {\n triggerRefValue(ref2, 4, !!(process.env.NODE_ENV !== \"production\") ? ref2.value : void 0);\n}\nfunction unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this.dep = void 0;\n this.__v_isRef = true;\n const { get, set } = factory(\n () => trackRefValue(this),\n () => triggerRefValue(this)\n );\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn$2(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this.__v_isRef = true;\n }\n get value() {\n const val = this._object[this._key];\n return val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this.__v_isRef = true;\n this.__v_isReadonly = true;\n }\n get value() {\n return this._getter();\n }\n}\nfunction toRef(source, key, defaultValue) {\n if (isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n const val = source[key];\n return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nfunction warn$1(msg, ...args) {\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\n\nconst ErrorTypeStrings = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core .\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings[type] || type : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n const appErrorHandler = instance.appContext.config.errorHandler;\n if (appErrorHandler) {\n callWithErrorHandling(\n appErrorHandler,\n null,\n 10,\n [err, exposedInstance, errorInfo]\n );\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings[type] || type;\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n console.error(err);\n } else {\n console.error(err);\n }\n } else {\n console.error(err);\n }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick$1(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.pre) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!queue.length || !queue.includes(\n job,\n isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex\n )) {\n if (job.id == null) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(job.id), 0, job);\n }\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true;\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction hasQueueJob(job) {\n return queue.indexOf(job) > -1;\n}\nfunction invalidateJob(job) {\n const i = queue.indexOf(job);\n if (i > flushIndex) {\n queue.splice(i, 1);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (!activePostFlushCbs || !activePostFlushCbs.includes(\n cb,\n cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex\n )) {\n pendingPostFlushCbs.push(cb);\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.pre) {\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n cb();\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n continue;\n }\n activePostFlushCbs[postFlushIndex]();\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n const diff = getId(a) - getId(b);\n if (diff === 0) {\n if (a.pre && !b.pre)\n return -1;\n if (b.pre && !a.pre)\n return 1;\n }\n return diff;\n};\nfunction flushJobs(seen) {\n isFlushPending = false;\n isFlushing = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n queue.sort(comparator);\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && job.active !== false) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n callWithErrorHandling(job, null, 14);\n }\n }\n } finally {\n flushIndex = 0;\n queue.length = 0;\n flushPostFlushCbs(seen);\n isFlushing = false;\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n if (!seen.has(fn)) {\n seen.set(fn, 1);\n } else {\n const count = seen.get(fn);\n if (count > RECURSION_LIMIT) {\n const instance = fn.ownerInstance;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n } else {\n seen.set(fn, count + 1);\n }\n }\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools) {\n devtools.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook(hook, target) {\n var _a, _b;\n devtools = hook;\n if (devtools) {\n devtools.enabled = true;\n buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook(newHook, target);\n });\n setTimeout(() => {\n if (!devtools) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:added\" /* COMPONENT_ADDED */\n);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools && typeof devtools.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n // fixed by xxxxxx\n // 为 0 是 App,无 parent 是 Page 指向 App\n component.uid === 0 ? void 0 : component.parent ? component.parent.uid : 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\n \"perf:start\" /* PERFORMANCE_START */\n);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\n \"perf:end\" /* PERFORMANCE_END */\n);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted)\n return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(event)}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modelArg = isModelListener && event.slice(7);\n if (modelArg && modelArg in props) {\n const modifiersKey = `${modelArg === \"modelValue\" ? \"model\" : modelArg}Modifiers`;\n const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n if (trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx)\n return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction markAttrsAccessed() {\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nconst ssrContextKey = Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nconst INITIAL_WATCHER_VALUE = {};\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, {\n immediate,\n deep,\n flush,\n once,\n onTrack,\n onTrigger\n} = EMPTY_OBJ) {\n if (cb && once) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n unwatch();\n };\n }\n if (!!(process.env.NODE_ENV !== \"production\") && deep !== void 0 && typeof deep === \"number\") {\n warn$1(\n `watch() \"deep\" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const warnInvalidSource = (s) => {\n warn$1(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const instance = currentInstance;\n const reactiveGetter = (source2) => deep === true ? source2 : (\n // for deep: false, only traverse root-level properties\n traverse(source2, deep === false ? 1 : void 0)\n );\n let getter;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return callWithErrorHandling(s, instance, 2);\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = () => callWithErrorHandling(source, instance, 2);\n } else {\n getter = () => {\n if (cleanup) {\n cleanup();\n }\n return callWithAsyncErrorHandling(\n source,\n instance,\n 3,\n [onCleanup]\n );\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n let cleanup;\n let onCleanup = (fn) => {\n cleanup = effect.onStop = () => {\n callWithErrorHandling(fn, instance, 4);\n cleanup = effect.onStop = void 0;\n };\n };\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = () => {\n if (!effect.active || !effect.dirty) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {\n if (cleanup) {\n cleanup();\n }\n callWithAsyncErrorHandling(cb, instance, 3, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n } else {\n effect.run();\n }\n };\n job.allowRecurse = !!cb;\n let scheduler;\n if (flush === \"sync\") {\n scheduler = job;\n } else if (flush === \"post\") {\n scheduler = () => queuePostRenderEffect$1(job, instance && instance.suspense);\n } else {\n job.pre = true;\n if (instance)\n job.id = instance.uid;\n scheduler = () => queueJob(job);\n }\n const effect = new ReactiveEffect(getter, NOOP, scheduler);\n const scope = getCurrentScope();\n const unwatch = () => {\n effect.stop();\n if (scope) {\n remove(scope.effects, effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = onTrack;\n effect.onTrigger = onTrigger;\n }\n if (cb) {\n if (immediate) {\n job();\n } else {\n oldValue = effect.run();\n }\n } else if (flush === \"post\") {\n queuePostRenderEffect$1(\n effect.run.bind(effect),\n instance && instance.suspense\n );\n } else {\n effect.run();\n }\n return unwatch;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\nfunction traverse(value, depth, currentDepth = 0, seen) {\n if (!isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n if (depth && depth > 0) {\n if (currentDepth >= depth) {\n return value;\n }\n currentDepth++;\n }\n seen = seen || /* @__PURE__ */ new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n if (isRef(value)) {\n traverse(value.value, depth, currentDepth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, currentDepth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, currentDepth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, currentDepth, seen);\n }\n }\n return value;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy;\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: void 0,\n warnHandler: void 0,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: /* @__PURE__ */ Object.create(null),\n optionsCache: /* @__PURE__ */ new WeakMap(),\n propsCache: /* @__PURE__ */ new WeakMap(),\n emitsCache: /* @__PURE__ */ new WeakMap()\n };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = extend({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = /* @__PURE__ */ new WeakSet();\n const app = context.app = {\n _uid: uid$1++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `app.config cannot be replaced. Modify individual options instead.`\n );\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Plugin has already been applied to target app.`);\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `A plugin must either be a function or an object with an \"install\" function.`\n );\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n );\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Mixins are only available in builds supporting Options API\");\n }\n return app;\n },\n component(name, component) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n warn$1(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n warn$1(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n // fixed by xxxxxx\n mount() {\n },\n // fixed by xxxxxx\n unmount() {\n },\n provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n warn$1(\n `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n );\n }\n context.provides[key] = value;\n return app;\n },\n runWithContext(fn) {\n const lastApp = currentApp;\n currentApp = app;\n try {\n return fn();\n } finally {\n currentApp = lastApp;\n }\n }\n };\n return app;\n };\n}\nlet currentApp = null;\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`provide() can only be used inside setup().`);\n }\n } else {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n if (currentInstance.type.mpType === \"app\") {\n currentInstance.appContext.app.provide(key, value);\n }\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = currentInstance || currentRenderingInstance;\n if (instance || currentApp) {\n const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(currentInstance || currentRenderingInstance || currentApp);\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8326: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n if (isRootHook(type)) {\n target = target.root;\n }\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n if (target.isUnmounted) {\n return;\n }\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(\n (ErrorTypeStrings[type] || type.replace(/^on/, \"\")).replace(/ hook$/, \"\")\n );\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (``)\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => (\n // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n (!isInSSRComponentSetup || lifecycle === \"sp\") && injectHook(lifecycle, (...args) => hook(...args), target)\n);\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\"bu\");\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\"bum\");\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\"sp\");\nconst onRenderTriggered = createHook(\n \"rtg\"\n);\nconst onRenderTracked = createHook(\n \"rtc\"\n);\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i)\n return null;\n if (isStatefulComponent(i))\n return getExposeProxy(i) || i.proxy;\n return getPublicInstance(i.parent);\n};\nfunction getComponentInternalInstance(i) {\n return i;\n}\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n // fixed by xxxxxx\n $: getComponentInternalInstance,\n // fixed by xxxxxx vue-i18n 在 dev 模式,访问了 $el,故模拟一个假的\n // $el: i => i.vnode.el,\n $el: (i) => i.__$el || (i.__$el = {}),\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n i.effect.dirty = true;\n queueJob(i.update);\n }),\n // $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy!)),// fixed by xxxxxx\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n let normalizedProps;\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n ) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance, \"get\", key);\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate \n\n\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/classify/classify.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","apiGetClassify","onShareAppMessage","onShareTimeline"],"mappings":";;;;;;;;;;;;;;;;AAkBA,UAAA,eAAAA,cAAA,IAAA,EAAA;AACA,UAAA,cAAA,YAAA;AACA,UAAA,MAAA,MAAAC,wBAAA;AAAA;AAAA,QAEA,UAAA;AAAA,MACA,CAAA;AAEA,mBAAA,QAAA,IAAA;AAAA,IACA;AAEA;AAGAC,kBAAA,kBAAA,CAAA,MAAA;AAEA,aAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,MACA;AAAA,IACA,CAAA;AAGAC,kBAAAA,gBAAA,MAAA;AACA,aAAA;AAAA;AAAA,QAEA,OAAA;AAAA;AAAA,QAEA,UAAA;AAAA,MACA;AAAA,IACA,CAAA;;;;;;;;;;;;;;;;;;;;;AC9CA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/classlist/classlist.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/classlist/classlist.js.map
new file mode 100644
index 0000000..a284537
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/classlist/classlist.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"classlist.js","sources":["pages/classlist/classlist.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvY2xhc3NsaXN0L2NsYXNzbGlzdC52dWU"],"sourcesContent":["\n\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t \r\n\t\t \r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t \r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t \r\n\t\t \r\n\t\t \r\n\t\t\r\n\t\t\r\n\t\t\n\t\n\n\n\n\n\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/classlist/classlist.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","onLoad","uni","onUnload","onReachBottom","apiGetClassList","apiGetHistoryList","onShareAppMessage","onShareTimeline"],"mappings":";;;;;;;;;;;;;;AAuEA,UAAA,YAAAA,cAAA,IAAA,EAAA;AACA,UAAA,SAAAA,cAAA,IAAA,KAAA;AAIA,UAAA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,IACA;AAEA,QAAA;AAGAC,kBAAA,OAAA,CAAA,MAAA;AAGA,UAAA,EAAA,KAAA,MAAA,OAAA,MAAA,OAAA,KAAA,IAAA;AAWA,UAAA,IAAA;AAEA,oBAAA,KAAA;AAAA,MACA;AACA,UAAA,MAAA;AAEA,oBAAA,OAAA;AAAA,MACA;AAGA,iBAAA;AAKAC,oBAAAA,MAAA,sBAAA;AAAA,QACA,OAAA;AAAA,MACA,CAAA;AACA;IACA,CAAA;AAGAC,kBAAAA,SAAA,MAAA;AACAD,oBAAA,MAAA,kBAAA,gBAAA;AAAA,IACA,CAAA;AAyCAE,kBAAAA,cAAA,MAAA;AAEA,UAAA,OAAA,OAAA;AACA;AAAA,MACA;AACA,kBAAA;AACA;IAIA,CAAA;AAEA,UAAA,eAAA,YAAA;AAEA,UAAA;AAEA,UAAA,YAAA,IAAA;AACA,cAAA,MAAAC,SAAAA,gBAAA;AAAA;AAAA,UAEA,SAAA,YAAA;AAAA,UACA,SAAA,YAAA;AAAA,UACA,UAAA,YAAA;AAAA;AAAA,QAEA,CAAA;AAAA,MACA;AAKA,UAAA,YAAA,MAAA;AACA,cAAA,MAAAC,SAAAA,kBAAA;AAAA;AAAA,UAEA,MAAA,YAAA;AAAA,UACA,SAAA,YAAA;AAAA,UACA,UAAA,YAAA;AAAA,QACA,CAAA;AAAA,MACA;AAEA,gBAAA,QAAA,CAAA,GAAA,UAAA,OAAA,GAAA,IAAA,IAAA;AAGA,UAAA,YAAA,WAAA,IAAA,KAAA,QAAA;AACA,eAAA,QAAA;AAAA,MACA;AAGAJ,oBAAAA,MAAA,eAAA,kBAAA,UAAA,KAAA;AAAA,IAIA;AAIAK,kBAAA,kBAAA,CAAA,MAAA;AAIA,aAAA;AAAA,QACA,OAAA,WAAA;AAAA;AAAA,QAEA,MAAA,mCAAA,YAAA,KAAA,WAAA;AAAA,MACA;AAAA,IACA,CAAA;AAGAC,kBAAAA,gBAAA,MAAA;AACA,aAAA;AAAA;AAAA,QAEA,OAAA;AAAA;AAAA;AAAA;AAAA,QAIA,OAAA,QAAA,YAAA,KAAA,WAAA;AAAA,MACA;AAAA,IACA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7OA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
new file mode 100644
index 0000000..aaa2c17
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["pages/index/index.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvaW5kZXgvaW5kZXgudnVl"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t公告\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{item.title}}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t每日推荐\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t专题精选\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tMore+ \r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/index/index.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","apiGetBanner","apiGetDayRandom","apiGetNotice","uni","apiGetClassify","onShareAppMessage","onShareTimeline"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkHA,UAAA,aAAAA,cAAA,IAAA,EAAA;AACA,UAAA,aAAAA,cAAA,IAAA,EAAA;AACA,UAAA,aAAAA,cAAA,IAAA,EAAA;AACA,UAAA,eAAAA,cAAA,IAAA,EAAA;AAEA,UAAA,YAAA,YAAA;AAEA,UAAA,MAAA,MAAAC,SAAAA;AAEA,iBAAA,QAAA,IAAA;AAAA,IACA;AAkBA,UAAA,eAAA,YAAA;AACA,UAAA,MAAA,MAAAC,SAAAA;AAEA,iBAAA,QAAA,IAAA;AAAA,IACA;AAmBA,UAAA,YAAA,YAAA;AACA,UAAA,MAAA,MAAAC,SAAA,aAAA,EAAA,QAAA,KAAA,CAAA;AAEA,iBAAA,QAAA,IAAA;AAAA,IACA;AAkBA,UAAA,YAAA,CAAA,OAAA;AAEAC,oBAAAA,MAAA,eAAA,kBAAA,WAAA,KAAA;AACAA,oBAAAA,MAAA,WAAA;AAAA,QACA,KAAA,+BAAA;AAAA,MACA,CAAA;AAAA,IAEA;AAGA,UAAA,cAAA,YAAA;AACA,UAAA,MAAA,MAAAC,wBAAA;AAAA,QACA,QAAA;AAAA,MACA,CAAA;AAEA,mBAAA,QAAA,IAAA;AAAA,IACA;AAGAC,kBAAA,kBAAA,CAAA,MAAA;AAEA,aAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,MACA;AAAA,IACA,CAAA;AAGAC,kBAAAA,gBAAA,MAAA;AACA,aAAA;AAAA;AAAA,QAEA,OAAA;AAAA;AAAA,QAEA,UAAA;AAAA,MACA;AAAA,IACA,CAAA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClOA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/detail.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/detail.js.map
new file mode 100644
index 0000000..0d0d0a0
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/detail.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"detail.js","sources":["pages/notice/detail.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbm90aWNlL2RldGFpbC52dWU"],"sourcesContent":["\n\n\t\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{{detail.title}}\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t{{detail.author}}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t阅读数量:{{detail.view_count}}\r\n\t\t\r\n\t\t\n\t\n\n\n\n\n\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/notice/detail.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","onLoad","uni","apiNoticeDetail"],"mappings":";;;;;;;;;;;;;;;;;;AAwCA,UAAM,SAASA,cAAG,IAAC,EAAE;AACrB,UAAM,WAAWA,cAAG,IAAC,EAAE;AACvB,UAAM,aAAaA,cAAG,IAAC,EAAE;AAEzBC,kBAAM,OAAC,CAAC,MAAI;AACXC,oBAAAA,MAAY,MAAA,OAAA,iCAAA,CAAC;AACb,eAAS,QAAQ,EAAE;AACnB,iBAAW,QAAQ,EAAE;AAErBA,oBAAAA,MAAI,sBAAsB;AAAA,QACzB,OAAM,WAAW;AAAA,MACnB,CAAE;AACD,sBAAiB;AAAA,IAClB,CAAC;AAED,UAAM,kBAAkB,YAAW;AAClC,UAAI,MAAM,MAAMC,yBAAgB,EAAC,IAAG,SAAS,MAAK,CAAC;AACnD,aAAO,QAAQ,IAAI;AACnBD,oBAAAA,oDAAY,GAAG;AAAA,IAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/notice.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/notice.js.map
new file mode 100644
index 0000000..8147055
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/notice/notice.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"notice.js","sources":["../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbm90aWNlL25vdGljZS52dWU"],"sourcesContent":["import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/notice/notice.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;AACA,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/preview/preview.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/preview/preview.js.map
new file mode 100644
index 0000000..c02e7d0
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/preview/preview.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"preview.js","sources":["pages/preview/preview.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJldmlldy9wcmV2aWV3LnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{{currentIndex+1}} / {{classList.length}}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\r\n\t\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/preview/preview.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","uni","onLoad","apiDetailWall","apiGetSetScore","apiWriteDownload","res","onShareAppMessage","onShareTimeline"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/search/search.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/search/search.js.map
new file mode 100644
index 0000000..5061b57
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/search/search.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"search.js","sources":["pages/search/search.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvc2VhcmNoL3NlYXJjaC52dWU"],"sourcesContent":["\n\t\r\n\t\t\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t最近搜索\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{tab}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t热门搜索\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{tab}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\n\t\n\n\n\n\n\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/search/search.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","uni","apiSearchData","onReachBottom","onUnload"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2FA,UAAM,cAAcA,cAAAA,IAAI;AAAA,MACvB,SAAQ;AAAA,MACR,UAAS;AAAA,MACT,SAAQ;AAAA,IACT,CAAC;AAKD,UAAM,gBAAgBA,cAAG,IAACC,cAAG,MAAC,eAAe,eAAe,KAAK,CAAA,CAAE;AAGnE,UAAM,gBAAgBD,cAAG,IAAC,CAAC,MAAK,MAAK,MAAK,IAAI,CAAC;AAI/C,UAAM,SAASA,cAAG,IAAC,KAAK;AAExB,UAAM,WAAWA,cAAG,IAAC,KAAK;AAI1B,UAAM,YAAYA,cAAG,IAAC,EAAE;AAIxB,UAAM,UAAU,MAAI;AACnB,iBAAY;AAAA,IACb;AAKA,UAAM,WAAW,CAAC,UAAS;AAG1B,iBAAW,KAAK;AAIhB,eAAU;AAAA,IACX;AAGA,UAAM,gBAAgB,MAAI;AACzBC,oBAAAA,MAAI,UAAU;AAAA,QACb,OAAM;AAAA,QACN,SAAQ,CAAC,QAAO;AACf,cAAG,IAAI,SAAQ;AAEdA,0BAAG,MAAC,kBAAkB,eAAe;AACrC,0BAAc,QAAQ,CAAE;AAAA,UACxB;AAAA,QACD;AAAA,MACH,CAAE;AAAA,IACF;AAGA,UAAM,WAAW,MAAI;AAEpBA,oBAAAA,MAAI,YAAa;AAMjB,oBAAc,QAAQ,CAAC,GAAG,oBAAI,IAAI,CAAC,YAAY,MAAM,SAAQ,GAAG,cAAc,KAAK,CAAC,CAAC,EAAE,MAAM,GAAE,EAAE;AACjGA,oBAAAA,MAAI,eAAe,iBAAgB,cAAc,KAAK;AAGtD,iBAAW,YAAY,MAAM,OAAO;AAEpC,iBAAY;AAAA,IAEb;AAIA,UAAM,aAAa,YAAW;AAE7B,UAAG;AAEF,YAAI,MAAM,MAAOC,uBAAc,YAAY,KAAK;AAChD,kBAAU,QAAQ,CAAC,GAAG,UAAU,OAAM,GAAG,IAAI,IAAI;AAGjDD,sBAAAA,MAAI,eAAe,kBAAiB,UAAU,KAAK;AAGnD,YAAG,YAAY,MAAM,WAAW,IAAI,KAAK;AAAQ,iBAAO,QAAQ;AAKhE,YAAG,IAAI,KAAK,UAAU,KAAK,UAAU,MAAM,UAAU;AAAG,mBAAS,QAAQ;AAAA,MAE3E,UAAE;AACAA,sBAAAA,MAAI,YAAa;AAAA,MACjB;AAAA,IAGF;AAMA,UAAM,aAAa,CAAC,QAAM,OAAK;AAE9B,gBAAU,QAAQ,CAAE;AACpB,aAAO,QAAQ;AACf,eAAS,QAAQ;AACjB,kBAAY,QAAQ;AAAA,QACnB,SAAQ;AAAA,QACR,UAAS;AAAA;AAAA,QAET,SAAQ,SAAS;AAAA,MACjB;AAAA,IACF;AAGAE,kBAAAA,cAAc,MAAI;AAEjB,UAAG,OAAO;AAAO;AACjB,kBAAY,MAAM;AAClB,iBAAY;AAAA,IACb,CAAC;AAGDC,kBAAAA,SAAS,MAAI;AACZH,oBAAAA,MAAI,kBAAkB,kBAAiB,UAAU,KAAK;AAAA,IACvD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7ND,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/user.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/user.js.map
new file mode 100644
index 0000000..0665da1
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/user.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"user.js","sources":["pages/user/user.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvdXNlci91c2VyLnZ1ZQ"],"sourcesContent":["\r\n\r\n\t\r\n\t\n\t\r\n\t\t\r\n\t\t\r\n\t\t\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{{userinfo.IP}}\r\n\t\t\t来自于:\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{{userinfo?.address?.city || userinfo?.address?.province || userinfo?.address?.country || '中国' }}\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t我的下载\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{{userinfo.downloadSize}}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t我的评分\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{{userinfo.scoreSize}}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t联系客服\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\n\t\t\t\t\r\n\t\t\t\t\t\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t订阅更新\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t常见问题\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\n\t\t\t\t\n\t\t\n\t\r\n\t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n\t\n\n\n\n\n\n","import MiniProgramPage from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/pages/user/user.vue'\nwx.createPage(MiniProgramPage)"],"names":["ref","apiUserInfo"],"mappings":";;;;;;;;;;;;;;;;;;AA8HA,UAAM,WAAWA,cAAG,IAAC,IAAI;AAQzB,UAAM,cAAc,YAAU;AAC7B,UAAI,MAAM,MAAMC,qBAAa;AAE7B,eAAS,QAAQ,IAAI;AAAA,IACtB;AAEA,gBAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3Ib,GAAG,WAAW,eAAe;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.js.map
new file mode 100644
index 0000000..3318999
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/mp-html.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mp-html.js","sources":["uni_modules/mp-html/components/mp-html/mp-html.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy9tcC1odG1sL2NvbXBvbmVudHMvbXAtaHRtbC9tcC1odG1sLnZ1ZQ"],"sourcesContent":["\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/mp-html/components/mp-html/mp-html.vue'\nwx.createComponent(Component)"],"names":["uni","nodes","node","Parser"],"mappings":";;;AAwCA,MAAK,OAAQ,MAAW;AAGxB,MAAM,UAAQ,CAAC;AAIf,MAAK,YAAU;AAAA,EACb,MAAM;AAAA,EACN,OAAQ;AACN,WAAO;AAAA,MACL,OAAO,CAAE;AAAA,IAIX;AAAA,EACD;AAAA,EACD,OAAO;AAAA,IACL,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACV;AAAA,IACD,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACV;AAAA,IACD,YAAY;AAAA,MACV,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACV;AAAA,IACD,aAAa,CAAC,SAAS,MAAM;AAAA,IAC7B,YAAY,CAAC,SAAS,MAAM;AAAA,IAC5B,UAAU;AAAA,MACR,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACV;AAAA,IACD,aAAa;AAAA,MACX,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,IACV,WAAW,CAAC,SAAS,MAAM;AAAA,EAC5B;AAAA,EAED,OAAO,CAAC,QAAQ,SAAS,UAAU,WAAW,QAAQ,OAAO;AAAA,EAG7D,YAAY;AAAA,IACV;AAAA,EACD;AAAA,EAED,OAAO;AAAA,IACL,QAAS,SAAS;AAChB,WAAK,WAAW,OAAO;AAAA,IACzB;AAAA,EACD;AAAA,EACD,UAAW;AACT,SAAK,UAAU,CAAC;AAChB,aAAS,IAAI,QAAQ,QAAQ,OAAM;AACjC,WAAK,QAAQ,KAAK,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC;AAAA,IACxC;AAAA,EACD;AAAA,EACD,UAAW;AACT,QAAI,KAAK,WAAW,CAAC,KAAK,MAAM,QAAQ;AACtC,WAAK,WAAW,KAAK,OAAO;AAAA,IAC9B;AAAA,EACD;AAAA,EACD,gBAAiB;AACf,SAAK,MAAM,YAAY;AAAA,EACxB;AAAA,EACD,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOP,GAAI,MAAM,UAAU,WAAW;AAE7B,UAAI,QAAQ,YAAY,WAAW;AACjC,aAAK,MAAM;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQD,WAAY,IAAI,QAAQ;AACtB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAI,CAAC,KAAK,WAAW;AACnB,iBAAO,MAAM,oBAAoB,CAAC;AAClC;AAAA,QACF;AACA,iBAAS,UAAU,SAAS,KAAK,SAAS,KAAK;AAiB/C,YAAI,OAAO;AAEX,eAAO;AAEP,cAAM,WAAWA,cAAG,MAAC,oBAAoB,EAEtC,GAAG,KAAK,MAAM,KAAK,IAAI,OAAO,IAAI,EAElC,QAAQ,KAAK,MAAM,KAAK,IAAI,WAAW,aAAa,KAAK,GAAG,IAAI,IAAI,EAAE,KAAK,GAAG,EAAE,mBAAmB;AACtG,YAAI,KAAK,KAAK;AACZ,mBAAS,OAAO,KAAK,IAAI,QAAQ,EAAE,aAAa,EAC7C,OAAO,KAAK,IAAI,QAAQ,EAAE,mBAAmB;AAAA,eAC3C;AAEL,mBAAS,eAAgB,EAAC,aAAe;AAAA,QAC3C;AACA,iBAAS,KAAK,SAAO;AACnB,cAAI,CAAC,IAAI,CAAC,GAAG;AACX,mBAAO,MAAM,iBAAiB,CAAC;AAC/B;AAAA,UACF;AACA,gBAAM,YAAY,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,KAAK;AAC9E,cAAI,KAAK,KAAK;AAEZ,iBAAK,IAAI,KAAK,KAAK,IAAI,SAAS,IAAI;AAAA,iBAC/B;AAELA,0BAAAA,MAAI,aAAa;AAAA,cACf;AAAA,cACA,UAAU;AAAA,aACX;AAAA,UACH;AACA,kBAAQ;AAAA,SACT;AAAA,OAEF;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,QAAS,OAAO;AACd,UAAI,OAAO;AACX,OAAC,SAAS,UAAWC,QAAO;AAC1B,iBAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACrC,gBAAMC,QAAOD,OAAM,CAAC;AACpB,cAAIC,MAAK,SAAS,QAAQ;AACxB,oBAAQA,MAAK,KAAK,QAAQ,UAAU,GAAG;AAAA,qBAC9BA,MAAK,SAAS,MAAM;AAC7B,oBAAQ;AAAA,iBACH;AAEL,kBAAM,UAAUA,MAAK,SAAS,OAAOA,MAAK,SAAS,SAASA,MAAK,SAAS,QAAQA,MAAK,SAAS,QAASA,MAAK,KAAK,CAAC,MAAM,OAAOA,MAAK,KAAK,CAAC,IAAI,OAAOA,MAAK,KAAK,CAAC,IAAI;AACtK,gBAAI,WAAW,QAAQ,KAAK,KAAK,SAAS,CAAC,MAAM,MAAM;AACrD,sBAAQ;AAAA,YACV;AAEA,gBAAIA,MAAK,UAAU;AACjB,wBAAUA,MAAK,QAAQ;AAAA,YACzB;AACA,gBAAI,WAAW,KAAK,KAAK,SAAS,CAAC,MAAM,MAAM;AAC7C,sBAAQ;AAAA,YACV,WAAWA,MAAK,SAAS,QAAQA,MAAK,SAAS,MAAM;AACnD,sBAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF,GAAG,SAAS,KAAK,KAAK;AACtB,aAAO;AAAA,IACR;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,UAAW;AACT,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtCF,sBAAAA,MAAI,oBAAoB,EAErB,GAAG,IAAI,EAEP,OAAO,QAAQ,EAAE,mBAAkB,EAAG,KAAK,SAAO,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,OAAO,MAAM,sBAAsB,CAAC,CAAC;AAAA,OACtH;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKD,aAAc;AACZ,eAAS,KAAK,KAAK,WAAW,IAAI,QAAQ,OAAM;AAC9C,aAAK,QAAQ,CAAC,EAAE,MAAM;AAAA,MACxB;AAAA,IAYD;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,gBAAiB,MAAM;AACrB,WAAK,eAAe;AACpB,eAAS,KAAK,KAAK,WAAW,IAAI,QAAQ,OAAM;AAC9C,aAAK,QAAQ,CAAC,EAAE,aAAa,IAAI;AAAA,MACnC;AAAA,IAYD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,WAAY,SAAS,QAAQ;AAC3B,UAAI,CAAC,UAAU,CAAC,KAAK,SAAS;AAC5B,aAAK,UAAU,CAAC;AAAA,MAClB;AACA,YAAM,QAAQ,IAAIG,4CAAM,OAAC,IAAI,EAAE,MAAM,OAAO;AAM5C,WAAK,KAAK,MAAM,SAAS,UAAU,KAAK,SAAS,CAAA,GAAI,OAAO,KAAK,IAAI,KAAK;AAG1E,WAAK,UAAU,CAAC;AAChB,WAAK,UAAU,MAAM;AACnB,aAAK,MAAM,QAAQ;AACnB,aAAK,MAAM,MAAM;AAAA,OAClB;AAED,UAAI,KAAK,YAAY,KAAK,QAAQ,cAAc,KAAK,QAAQ,SAAS,GAAG;AAEvE,YAAI,SAAS;AACb,cAAM,WAAW,UAAQ;AACvB,cAAI,CAAC,QAAQ,CAAC,KAAK;AAAQ,mBAAO,CAAC;AAEnC,cAAI,KAAK,WAAW,QAAQ;AAC1B,iBAAK,MAAM,SAAS,IAAI;AAAA,iBACnB;AACL,qBAAS,KAAK;AACd,uBAAW,MAAM;AACf,mBAAK,QAAO,EAAG,KAAK,QAAQ,EAAE,MAAM,QAAQ;AAAA,YAC7C,GAAE,GAAG;AAAA,UACR;AAAA,QACF;AACA,aAAK,QAAO,EAAG,KAAK,QAAQ,EAAE,MAAM,QAAQ;AAAA,aACvC;AAEL,YAAI,CAAC,KAAK,QAAQ,aAAa;AAC7B,eAAK,QAAO,EAAG,KAAK,UAAQ;AAC1B,iBAAK,MAAM,SAAS,IAAI;AAAA,WACzB,EAAE,MAAM,MAAM;AACb,iBAAK,MAAM,SAAS,EAAE;AAAA,WACvB;AAAA,QACH;AAAA,MACF;AAAA,IAED;AAAA;AAAA;AAAA;AAAA,IAKD,MAAO,MAAM;AACX,eAAS,IAAI,QAAQ,QAAQ,OAAM;AACjC,YAAI,KAAK,QAAQ,CAAC,EAAE,IAAI,GAAG;AACzB,eAAK,QAAQ,CAAC,EAAE,IAAI,EAAE;AAAA,QACxB;AAAA,MACF;AAAA,IACD;AAAA,EA6GH;AACF;;;;;;;;;;;;;;;;;;;;AC9dA,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.js.map
new file mode 100644
index 0000000..e10cac9
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/node/node.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"node.js","sources":["uni_modules/mp-html/components/mp-html/node/node.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy9tcC1odG1sL2NvbXBvbmVudHMvbXAtaHRtbC9ub2RlL25vZGUudnVl"],"sourcesContent":["\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{n.text}}\r\n \r\n \r\n {{n.text}}\r\n \r\n \\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/mp-html/components/mp-html/node/node.vue'\nwx.createComponent(Component)"],"names":["uni","node","i"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/parser.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/parser.js.map
new file mode 100644
index 0000000..ddfe3f4
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/mp-html/components/mp-html/parser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parser.js","sources":["uni_modules/mp-html/components/mp-html/parser.js"],"sourcesContent":["/**\r\n * @fileoverview html 解析器\r\n */\r\n\r\n// 配置\r\nconst config = {\r\n // 信任的标签(保持标签名不变)\r\n trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,ruby,rt,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),\r\n\r\n // 块级标签(转为 div,其他的非信任标签转为 span)\r\n blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),\r\n\r\n // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3\r\n // 行内标签\r\n inlineTags: makeMap('abbr,b,big,code,del,em,i,ins,label,q,small,span,strong,sub,sup'),\r\n // #endif\r\n\r\n // 要移除的标签\r\n ignoreTags: makeMap('area,base,canvas,embed,frame,head,iframe,input,link,map,meta,param,rp,script,source,style,textarea,title,track,wbr'),\r\n\r\n // 自闭合的标签\r\n voidTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),\r\n\r\n // html 实体\r\n entities: {\r\n lt: '<',\r\n gt: '>',\r\n quot: '\"',\r\n apos: \"'\",\r\n ensp: '\\u2002',\r\n emsp: '\\u2003',\r\n nbsp: '\\xA0',\r\n semi: ';',\r\n ndash: '–',\r\n mdash: '—',\r\n middot: '·',\r\n lsquo: '‘',\r\n rsquo: '’',\r\n ldquo: '“',\r\n rdquo: '”',\r\n bull: '•',\r\n hellip: '…',\r\n larr: '←',\r\n uarr: '↑',\r\n rarr: '→',\r\n darr: '↓'\r\n },\r\n\r\n // 默认的标签样式\r\n tagStyle: {\r\n // #ifndef APP-PLUS-NVUE\r\n address: 'font-style:italic',\r\n big: 'display:inline;font-size:1.2em',\r\n caption: 'display:table-caption;text-align:center',\r\n center: 'text-align:center',\r\n cite: 'font-style:italic',\r\n dd: 'margin-left:40px',\r\n mark: 'background-color:yellow',\r\n pre: 'font-family:monospace;white-space:pre',\r\n s: 'text-decoration:line-through',\r\n small: 'display:inline;font-size:0.8em',\r\n strike: 'text-decoration:line-through',\r\n u: 'text-decoration:underline'\r\n // #endif\r\n },\r\n\r\n // svg 大小写对照表\r\n svgDict: {\r\n animatetransform: 'animateTransform',\r\n lineargradient: 'linearGradient',\r\n viewbox: 'viewBox',\r\n attributename: 'attributeName',\r\n repeatcount: 'repeatCount',\r\n repeatdur: 'repeatDur',\r\n foreignobject: 'foreignObject'\r\n }\r\n}\r\nconst tagSelector={}\r\nlet windowWidth, system\r\n// #ifdef MP-WEIXIN\r\nif (uni.canIUse('getWindowInfo')) {\r\n windowWidth = uni.getWindowInfo().windowWidth\r\n system = uni.getDeviceInfo().system\r\n} else {\r\n// #endif\r\n const systemInfo = uni.getSystemInfoSync()\r\n windowWidth = systemInfo.windowWidth\r\n // #ifdef MP-WEIXIN\r\n system = systemInfo.system\r\n}\r\n// #endif\r\nconst blankChar = makeMap(' ,\\r,\\n,\\t,\\f')\r\nlet idIndex = 0\r\n\r\n// #ifdef H5 || APP-PLUS\r\nconfig.ignoreTags.iframe = undefined\r\nconfig.trustTags.iframe = true\r\nconfig.ignoreTags.embed = undefined\r\nconfig.trustTags.embed = true\r\n// #endif\r\n// #ifdef APP-PLUS-NVUE\r\nconfig.ignoreTags.source = undefined\r\nconfig.ignoreTags.style = undefined\r\n// #endif\r\n\r\n/**\r\n * @description 创建 map\r\n * @param {String} str 逗号分隔\r\n */\r\nfunction makeMap (str) {\r\n const map = Object.create(null)\r\n const list = str.split(',')\r\n for (let i = list.length; i--;) {\r\n map[list[i]] = true\r\n }\r\n return map\r\n}\r\n\r\n/**\r\n * @description 解码 html 实体\r\n * @param {String} str 要解码的字符串\r\n * @param {Boolean} amp 要不要解码 &\r\n * @returns {String} 解码后的字符串\r\n */\r\nfunction decodeEntity (str, amp) {\r\n let i = str.indexOf('&')\r\n while (i !== -1) {\r\n const j = str.indexOf(';', i + 3)\r\n let code\r\n if (j === -1) break\r\n if (str[i + 1] === '#') {\r\n // { 形式的实体\r\n code = parseInt((str[i + 2] === 'x' ? '0' : '') + str.substring(i + 2, j))\r\n if (!isNaN(code)) {\r\n str = str.substr(0, i) + String.fromCharCode(code) + str.substr(j + 1)\r\n }\r\n } else {\r\n // 形式的实体\r\n code = str.substring(i + 1, j)\r\n if (config.entities[code] || (code === 'amp' && amp)) {\r\n str = str.substr(0, i) + (config.entities[code] || '&') + str.substr(j + 1)\r\n }\r\n }\r\n i = str.indexOf('&', i + 1)\r\n }\r\n return str\r\n}\r\n\r\n/**\r\n * @description 合并多个块级标签,加快长内容渲染\r\n * @param {Array} nodes 要合并的标签数组\r\n */\r\nfunction mergeNodes (nodes) {\r\n let i = nodes.length - 1\r\n for (let j = i; j >= -1; j--) {\r\n if (j === -1 || nodes[j].c || !nodes[j].name || (nodes[j].name !== 'div' && nodes[j].name !== 'p' && nodes[j].name[0] !== 'h') || (nodes[j].attrs.style || '').includes('inline')) {\r\n if (i - j >= 5) {\r\n nodes.splice(j + 1, i - j, {\r\n name: 'div',\r\n attrs: {},\r\n children: nodes.slice(j + 1, i + 1)\r\n })\r\n }\r\n i = j - 1\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @description html 解析器\r\n * @param {Object} vm 组件实例\r\n */\r\nfunction Parser (vm) {\r\n this.options = vm || {}\r\n this.tagStyle = Object.assign({}, config.tagStyle, this.options.tagStyle)\r\n this.imgList = vm.imgList || []\r\n this.imgList._unloadimgs = 0\r\n this.plugins = vm.plugins || []\r\n this.attrs = Object.create(null)\r\n this.stack = []\r\n this.nodes = []\r\n this.pre = (this.options.containerStyle || '').includes('white-space') && this.options.containerStyle.includes('pre') ? 2 : 0\r\n}\r\n\r\n/**\r\n * @description 执行解析\r\n * @param {String} content 要解析的文本\r\n */\r\nParser.prototype.parse = function (content) {\r\n // 插件处理\r\n for (let i = this.plugins.length; i--;) {\r\n if (this.plugins[i].onUpdate) {\r\n content = this.plugins[i].onUpdate(content, config) || content\r\n }\r\n }\r\n\r\n new Lexer(this).parse(content)\r\n // 出栈未闭合的标签\r\n while (this.stack.length) {\r\n this.popNode()\r\n }\r\n if (this.nodes.length > 50) {\r\n mergeNodes(this.nodes)\r\n }\r\n return this.nodes\r\n}\r\n\r\n/**\r\n * @description 将标签暴露出来(不被 rich-text 包含)\r\n */\r\nParser.prototype.expose = function () {\r\n // #ifndef APP-PLUS-NVUE\r\n for (let i = this.stack.length; i--;) {\r\n const item = this.stack[i]\r\n if (item.c || item.name === 'a' || item.name === 'video' || item.name === 'audio') return\r\n item.c = 1\r\n }\r\n // #endif\r\n}\r\n\r\n/**\r\n * @description 处理插件\r\n * @param {Object} node 要处理的标签\r\n * @returns {Boolean} 是否要移除此标签\r\n */\r\nParser.prototype.hook = function (node) {\r\n for (let i = this.plugins.length; i--;) {\r\n if (this.plugins[i].onParse && this.plugins[i].onParse(node, this) === false) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * @description 将链接拼接上主域名\r\n * @param {String} url 需要拼接的链接\r\n * @returns {String} 拼接后的链接\r\n */\r\nParser.prototype.getUrl = function (url) {\r\n const domain = this.options.domain\r\n if (url[0] === '/') {\r\n if (url[1] === '/') {\r\n // // 开头的补充协议名\r\n url = (domain ? domain.split('://')[0] : 'http') + ':' + url\r\n } else if (domain) {\r\n // 否则补充整个域名\r\n url = domain + url\r\n } /* #ifdef APP-PLUS */ else {\r\n url = plus.io.convertLocalFileSystemURL(url)\r\n } /* #endif */\r\n } else if (!url.includes('data:') && !url.includes('://')) {\r\n if (domain) {\r\n url = domain + '/' + url\r\n } /* #ifdef APP-PLUS */ else {\r\n url = plus.io.convertLocalFileSystemURL(url)\r\n } /* #endif */\r\n }\r\n return url\r\n}\r\n\r\n/**\r\n * @description 解析样式表\r\n * @param {Object} node 标签\r\n * @returns {Object}\r\n */\r\nParser.prototype.parseStyle = function (node) {\r\n const attrs = node.attrs\r\n const list = (this.tagStyle[node.name] || '').split(';').concat((attrs.style || '').split(';'))\r\n const styleObj = {}\r\n let tmp = ''\r\n\r\n if (attrs.id && !this.xml) {\r\n // 暴露锚点\r\n if (this.options.useAnchor) {\r\n this.expose()\r\n } else if (node.name !== 'img' && node.name !== 'a' && node.name !== 'video' && node.name !== 'audio') {\r\n attrs.id = undefined\r\n }\r\n }\r\n\r\n // 转换 width 和 height 属性\r\n if (attrs.width) {\r\n styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px')\r\n attrs.width = undefined\r\n }\r\n if (attrs.height) {\r\n styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px')\r\n attrs.height = undefined\r\n }\r\n\r\n for (let i = 0, len = list.length; i < len; i++) {\r\n const info = list[i].split(':')\r\n if (info.length < 2) continue\r\n const key = info.shift().trim().toLowerCase()\r\n let value = info.join(':').trim()\r\n if ((value[0] === '-' && value.lastIndexOf('-') > 0) || value.includes('safe')) {\r\n // 兼容性的 css 不压缩\r\n tmp += `;${key}:${value}`\r\n } else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) {\r\n // 重复的样式进行覆盖\r\n if (value.includes('url')) {\r\n // 填充链接\r\n let j = value.indexOf('(') + 1\r\n if (j) {\r\n while (value[j] === '\"' || value[j] === \"'\" || blankChar[value[j]]) {\r\n j++\r\n }\r\n value = value.substr(0, j) + this.getUrl(value.substr(j))\r\n }\r\n } else if (value.includes('rpx')) {\r\n // 转换 rpx(rich-text 内部不支持 rpx)\r\n value = value.replace(/[0-9.]+\\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px')\r\n }\r\n styleObj[key] = value\r\n }\r\n }\r\n\r\n node.attrs.style = tmp\r\n return styleObj\r\n}\r\n\r\n/**\r\n * @description 解析到标签名\r\n * @param {String} name 标签名\r\n * @private\r\n */\r\nParser.prototype.onTagName = function (name) {\r\n this.tagName = this.xml ? name : name.toLowerCase()\r\n if (this.tagName === 'svg') {\r\n this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感\r\n config.ignoreTags.style = undefined // svg 标签内 style 可用\r\n }\r\n}\r\n\r\n/**\r\n * @description 解析到属性名\r\n * @param {String} name 属性名\r\n * @private\r\n */\r\nParser.prototype.onAttrName = function (name) {\r\n name = this.xml ? name : name.toLowerCase()\r\n // #ifdef (VUE3 && (H5 || APP-PLUS)) || APP-PLUS-NVUE\r\n if (name.includes('?') || name.includes(';')) {\r\n this.attrName = undefined\r\n return\r\n }\r\n // #endif\r\n if (name.substr(0, 5) === 'data-') {\r\n if (name === 'data-src' && !this.attrs.src) {\r\n // data-src 自动转为 src\r\n this.attrName = 'src'\r\n } else if (this.tagName === 'img' || this.tagName === 'a') {\r\n // a 和 img 标签保留 data- 的属性,可以在 imgtap 和 linktap 事件中使用\r\n this.attrName = name\r\n } else {\r\n // 剩余的移除以减小大小\r\n this.attrName = undefined\r\n }\r\n } else {\r\n this.attrName = name\r\n this.attrs[name] = 'T' // boolean 型属性缺省设置\r\n }\r\n}\r\n\r\n/**\r\n * @description 解析到属性值\r\n * @param {String} val 属性值\r\n * @private\r\n */\r\nParser.prototype.onAttrVal = function (val) {\r\n const name = this.attrName || ''\r\n if (name === 'style' || name === 'href') {\r\n // 部分属性进行实体解码\r\n this.attrs[name] = decodeEntity(val, true)\r\n } else if (name.includes('src')) {\r\n // 拼接主域名\r\n this.attrs[name] = this.getUrl(decodeEntity(val, true))\r\n } else if (name) {\r\n this.attrs[name] = val\r\n }\r\n}\r\n\r\n/**\r\n * @description 解析到标签开始\r\n * @param {Boolean} selfClose 是否有自闭合标识 />\r\n * @private\r\n */\r\nParser.prototype.onOpenTag = function (selfClose) {\r\n // 拼装 node\r\n const node = Object.create(null)\r\n node.name = this.tagName\r\n node.attrs = this.attrs\r\n // 避免因为自动 diff 使得 type 被设置为 null 导致部分内容不显示\r\n if (this.options.nodes.length) {\r\n node.type = 'node'\r\n }\r\n this.attrs = Object.create(null)\r\n\r\n const attrs = node.attrs\r\n const parent = this.stack[this.stack.length - 1]\r\n const siblings = parent ? parent.children : this.nodes\r\n const close = this.xml ? selfClose : config.voidTags[node.name]\r\n\r\n // 替换标签名选择器\r\n if (tagSelector[node.name]) {\r\n attrs.class = tagSelector[node.name] + (attrs.class ? ' ' + attrs.class : '')\r\n }\r\n\r\n // 转换 embed 标签\r\n if (node.name === 'embed') {\r\n // #ifndef H5 || APP-PLUS\r\n const src = attrs.src || ''\r\n // 按照后缀名和 type 将 embed 转为 video 或 audio\r\n if (src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8') || (attrs.type || '').includes('video')) {\r\n node.name = 'video'\r\n } else if (src.includes('.mp3') || src.includes('.wav') || src.includes('.aac') || src.includes('.m4a') || (attrs.type || '').includes('audio')) {\r\n node.name = 'audio'\r\n }\r\n if (attrs.autostart) {\r\n attrs.autoplay = 'T'\r\n }\r\n attrs.controls = 'T'\r\n // #endif\r\n // #ifdef H5 || APP-PLUS\r\n this.expose()\r\n // #endif\r\n }\r\n\r\n // #ifndef APP-PLUS-NVUE\r\n // 处理音视频\r\n if (node.name === 'video' || node.name === 'audio') {\r\n // 设置 id 以便获取 context\r\n if (node.name === 'video' && !attrs.id) {\r\n attrs.id = 'v' + idIndex++\r\n }\r\n // 没有设置 controls 也没有设置 autoplay 的自动设置 controls\r\n if (!attrs.controls && !attrs.autoplay) {\r\n attrs.controls = 'T'\r\n }\r\n // 用数组存储所有可用的 source\r\n node.src = []\r\n if (attrs.src) {\r\n node.src.push(attrs.src)\r\n attrs.src = undefined\r\n }\r\n this.expose()\r\n }\r\n // #endif\r\n\r\n // 处理自闭合标签\r\n if (close) {\r\n if (!this.hook(node) || config.ignoreTags[node.name]) {\r\n // 通过 base 标签设置主域名\r\n if (node.name === 'base' && !this.options.domain) {\r\n this.options.domain = attrs.href\r\n } /* #ifndef APP-PLUS-NVUE */ else if (node.name === 'source' && parent && (parent.name === 'video' || parent.name === 'audio') && attrs.src) {\r\n // 设置 source 标签(仅父节点为 video 或 audio 时有效)\r\n parent.src.push(attrs.src)\r\n } /* #endif */\r\n return\r\n }\r\n\r\n // 解析 style\r\n const styleObj = this.parseStyle(node)\r\n\r\n // 处理图片\r\n if (node.name === 'img') {\r\n if (attrs.src) {\r\n // 标记 webp\r\n if (attrs.src.includes('webp')) {\r\n node.webp = 'T'\r\n }\r\n // data url 图片如果没有设置 original-src 默认为不可预览的小图片\r\n if (attrs.src.includes('data:') && this.options.previewImg !== 'all' && !attrs['original-src']) {\r\n attrs.ignore = 'T'\r\n }\r\n if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) {\r\n for (let i = this.stack.length; i--;) {\r\n const item = this.stack[i]\r\n if (item.name === 'a') {\r\n node.a = item.attrs\r\n }\r\n if (item.name === 'table' && !node.webp && !attrs.src.includes('cloud://')) {\r\n if (!styleObj.display || styleObj.display.includes('inline')) {\r\n node.t = 'inline-block'\r\n } else {\r\n node.t = styleObj.display\r\n }\r\n styleObj.display = undefined\r\n }\r\n // #ifndef H5 || APP-PLUS\r\n const style = item.attrs.style || ''\r\n if (style.includes('flex:') && !style.includes('flex:0') && !style.includes('flex: 0') && (!styleObj.width || parseInt(styleObj.width) > 100)) {\r\n styleObj.width = '100% !important'\r\n styleObj.height = ''\r\n for (let j = i + 1; j < this.stack.length; j++) {\r\n this.stack[j].attrs.style = (this.stack[j].attrs.style || '').replace('inline-', '')\r\n }\r\n } else if (style.includes('flex') && styleObj.width === '100%') {\r\n for (let j = i + 1; j < this.stack.length; j++) {\r\n const style = this.stack[j].attrs.style || ''\r\n if (!style.includes(';width') && !style.includes(' width') && style.indexOf('width') !== 0) {\r\n styleObj.width = ''\r\n break\r\n }\r\n }\r\n } else if (style.includes('inline-block')) {\r\n if (styleObj.width && styleObj.width[styleObj.width.length - 1] === '%') {\r\n item.attrs.style += ';max-width:' + styleObj.width\r\n styleObj.width = ''\r\n } else {\r\n item.attrs.style += ';max-width:100%'\r\n }\r\n }\r\n // #endif\r\n item.c = 1\r\n }\r\n attrs.i = this.imgList.length.toString()\r\n let src = attrs['original-src'] || attrs.src\r\n // #ifndef H5 || MP-ALIPAY || APP-PLUS || MP-360\r\n if (this.imgList.includes(src)) {\r\n // 如果有重复的链接则对域名进行随机大小写变换避免预览时错位\r\n let i = src.indexOf('://')\r\n if (i !== -1) {\r\n i += 3\r\n let newSrc = src.substr(0, i)\r\n for (; i < src.length; i++) {\r\n if (src[i] === '/') break\r\n newSrc += Math.random() > 0.5 ? src[i].toUpperCase() : src[i]\r\n }\r\n newSrc += src.substr(i)\r\n src = newSrc\r\n }\r\n }\r\n // #endif\r\n this.imgList.push(src)\r\n if (!node.t) {\r\n this.imgList._unloadimgs += 1\r\n }\r\n // #ifdef H5 || APP-PLUS\r\n if (this.options.lazyLoad) {\r\n attrs['data-src'] = attrs.src\r\n attrs.src = undefined\r\n }\r\n // #endif\r\n }\r\n }\r\n if (styleObj.display === 'inline') {\r\n styleObj.display = ''\r\n }\r\n // #ifndef APP-PLUS-NVUE\r\n if (attrs.ignore) {\r\n styleObj['max-width'] = styleObj['max-width'] || '100%'\r\n attrs.style += ';-webkit-touch-callout:none'\r\n }\r\n // #endif\r\n // 设置的宽度超出屏幕,为避免变形,高度转为自动\r\n if (parseInt(styleObj.width) > windowWidth) {\r\n styleObj.height = undefined\r\n }\r\n // 记录是否设置了宽高\r\n if (!isNaN(parseInt(styleObj.width))) {\r\n node.w = 'T'\r\n }\r\n if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) {\r\n node.h = 'T'\r\n }\r\n if (node.w && node.h && styleObj['object-fit']) {\r\n if (styleObj['object-fit'] === 'contain') {\r\n node.m = 'aspectFit'\r\n } else if (styleObj['object-fit'] === 'cover') {\r\n node.m = 'aspectFill'\r\n }\r\n }\r\n } else if (node.name === 'svg') {\r\n siblings.push(node)\r\n this.stack.push(node)\r\n this.popNode()\r\n return\r\n }\r\n for (const key in styleObj) {\r\n if (styleObj[key]) {\r\n attrs.style += `;${key}:${styleObj[key].replace(' !important', '')}`\r\n }\r\n }\r\n attrs.style = attrs.style.substr(1) || undefined\r\n // #ifdef (MP-WEIXIN || MP-QQ) && VUE3\r\n if (!attrs.style) {\r\n delete attrs.style\r\n }\r\n // #endif\r\n } else {\r\n if ((node.name === 'pre' || ((attrs.style || '').includes('white-space') && attrs.style.includes('pre'))) && this.pre !== 2) {\r\n this.pre = node.pre = 1\r\n }\r\n node.children = []\r\n this.stack.push(node)\r\n }\r\n\r\n // 加入节点树\r\n siblings.push(node)\r\n}\r\n\r\n/**\r\n * @description 解析到标签结束\r\n * @param {String} name 标签名\r\n * @private\r\n */\r\nParser.prototype.onCloseTag = function (name) {\r\n // 依次出栈到匹配为止\r\n name = this.xml ? name : name.toLowerCase()\r\n let i\r\n for (i = this.stack.length; i--;) {\r\n if (this.stack[i].name === name) break\r\n }\r\n if (i !== -1) {\r\n while (this.stack.length > i) {\r\n this.popNode()\r\n }\r\n } else if (name === 'p' || name === 'br') {\r\n const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes\r\n siblings.push({\r\n name,\r\n attrs: {\r\n class: tagSelector[name] || '',\r\n style: this.tagStyle[name] || ''\r\n }\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * @description 处理标签出栈\r\n * @private\r\n */\r\nParser.prototype.popNode = function () {\r\n const node = this.stack.pop()\r\n let attrs = node.attrs\r\n const children = node.children\r\n const parent = this.stack[this.stack.length - 1]\r\n const siblings = parent ? parent.children : this.nodes\r\n\r\n if (!this.hook(node) || config.ignoreTags[node.name]) {\r\n // 获取标题\r\n if (node.name === 'title' && children.length && children[0].type === 'text' && this.options.setTitle) {\r\n uni.setNavigationBarTitle({\r\n title: children[0].text\r\n })\r\n }\r\n siblings.pop()\r\n return\r\n }\r\n\r\n if (node.pre && this.pre !== 2) {\r\n // 是否合并空白符标识\r\n this.pre = node.pre = undefined\r\n for (let i = this.stack.length; i--;) {\r\n if (this.stack[i].pre) {\r\n this.pre = 1\r\n }\r\n }\r\n }\r\n\r\n const styleObj = {}\r\n\r\n // 转换 svg\r\n if (node.name === 'svg') {\r\n if (this.xml > 1) {\r\n // 多层 svg 嵌套\r\n this.xml--\r\n return\r\n }\r\n // #ifdef APP-PLUS-NVUE\r\n (function traversal (node) {\r\n if (node.name) {\r\n // 调整 svg 的大小写\r\n node.name = config.svgDict[node.name] || node.name\r\n for (const item in node.attrs) {\r\n if (config.svgDict[item]) {\r\n node.attrs[config.svgDict[item]] = node.attrs[item]\r\n node.attrs[item] = undefined\r\n }\r\n }\r\n for (let i = 0; i < (node.children || []).length; i++) {\r\n traversal(node.children[i])\r\n }\r\n }\r\n })(node)\r\n // #endif\r\n // #ifndef APP-PLUS-NVUE\r\n let src = ''\r\n const style = attrs.style\r\n attrs.style = ''\r\n attrs.xmlns = 'http://www.w3.org/2000/svg';\r\n (function traversal (node) {\r\n if (node.type === 'text') {\r\n src += node.text\r\n return\r\n }\r\n const name = config.svgDict[node.name] || node.name\r\n if (name === 'foreignObject') {\r\n for (const child of (node.children || [])) {\r\n if (child.attrs && !child.attrs.xmlns) {\r\n child.attrs.xmlns = 'http://www.w3.org/1999/xhtml'\r\n break\r\n }\r\n }\r\n }\r\n src += '<' + name\r\n for (const item in node.attrs) {\r\n const val = node.attrs[item]\r\n if (val) {\r\n src += ` ${config.svgDict[item] || item}=\"${val.replace(/\"/g, '')}\"`\r\n }\r\n }\r\n if (!node.children) {\r\n src += '/>'\r\n } else {\r\n src += '>'\r\n for (let i = 0; i < node.children.length; i++) {\r\n traversal(node.children[i])\r\n }\r\n src += '' + name + '>'\r\n }\r\n })(node)\r\n node.name = 'img'\r\n node.attrs = {\r\n src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),\r\n style,\r\n ignore: 'T'\r\n }\r\n node.children = undefined\r\n // #endif\r\n this.xml = false\r\n config.ignoreTags.style = true\r\n return\r\n }\r\n\r\n // #ifndef APP-PLUS-NVUE\r\n // 转换 align 属性\r\n if (attrs.align) {\r\n if (node.name === 'table') {\r\n if (attrs.align === 'center') {\r\n styleObj['margin-inline-start'] = styleObj['margin-inline-end'] = 'auto'\r\n } else {\r\n styleObj.float = attrs.align\r\n }\r\n } else {\r\n styleObj['text-align'] = attrs.align\r\n }\r\n attrs.align = undefined\r\n }\r\n\r\n // 转换 dir 属性\r\n if (attrs.dir) {\r\n styleObj.direction = attrs.dir\r\n attrs.dir = undefined\r\n }\r\n\r\n // 转换 font 标签的属性\r\n if (node.name === 'font') {\r\n if (attrs.color) {\r\n styleObj.color = attrs.color\r\n attrs.color = undefined\r\n }\r\n if (attrs.face) {\r\n styleObj['font-family'] = attrs.face\r\n attrs.face = undefined\r\n }\r\n if (attrs.size) {\r\n let size = parseInt(attrs.size)\r\n if (!isNaN(size)) {\r\n if (size < 1) {\r\n size = 1\r\n } else if (size > 7) {\r\n size = 7\r\n }\r\n styleObj['font-size'] = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large'][size - 1]\r\n }\r\n attrs.size = undefined\r\n }\r\n }\r\n // #endif\r\n\r\n // 一些编辑器的自带 class\r\n if ((attrs.class || '').includes('align-center')) {\r\n styleObj['text-align'] = 'center'\r\n }\r\n\r\n Object.assign(styleObj, this.parseStyle(node))\r\n\r\n if (node.name !== 'table' && parseInt(styleObj.width) > windowWidth) {\r\n styleObj['max-width'] = '100%'\r\n styleObj['box-sizing'] = 'border-box'\r\n }\r\n\r\n // #ifndef APP-PLUS-NVUE\r\n if (config.blockTags[node.name]) {\r\n node.name = 'div'\r\n } else if (!config.trustTags[node.name] && !this.xml) {\r\n // 未知标签转为 span,避免无法显示\r\n node.name = 'span'\r\n }\r\n\r\n if (node.name === 'a' || node.name === 'ad'\r\n // #ifdef H5 || APP-PLUS\r\n || node.name === 'iframe' // eslint-disable-line\r\n // #endif\r\n ) {\r\n this.expose()\r\n } else if (node.name === 'video') {\r\n if ((styleObj.height || '').includes('auto')) {\r\n styleObj.height = undefined\r\n }\r\n /* #ifdef APP-PLUS */\r\n let str = ''\r\n node.html = str\r\n /* #endif */\r\n } else if ((node.name === 'ul' || node.name === 'ol') && node.c) {\r\n // 列表处理\r\n const types = {\r\n a: 'lower-alpha',\r\n A: 'upper-alpha',\r\n i: 'lower-roman',\r\n I: 'upper-roman'\r\n }\r\n if (types[attrs.type]) {\r\n attrs.style += ';list-style-type:' + types[attrs.type]\r\n attrs.type = undefined\r\n }\r\n for (let i = children.length; i--;) {\r\n if (children[i].name === 'li') {\r\n children[i].c = 1\r\n }\r\n }\r\n } else if (node.name === 'table') {\r\n // 表格处理\r\n // cellpadding、cellspacing、border 这几个常用表格属性需要通过转换实现\r\n let padding = parseFloat(attrs.cellpadding)\r\n let spacing = parseFloat(attrs.cellspacing)\r\n const border = parseFloat(attrs.border)\r\n const bordercolor = styleObj['border-color']\r\n const borderstyle = styleObj['border-style']\r\n if (node.c) {\r\n // padding 和 spacing 默认 2\r\n if (isNaN(padding)) {\r\n padding = 2\r\n }\r\n if (isNaN(spacing)) {\r\n spacing = 2\r\n }\r\n }\r\n if (border) {\r\n attrs.style += `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}`\r\n }\r\n if (node.flag && node.c) {\r\n // 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现\r\n styleObj.display = 'grid'\r\n if (styleObj['border-collapse'] === 'collapse') {\r\n styleObj['border-collapse'] = undefined\r\n spacing = 0\r\n }\r\n if (spacing) {\r\n styleObj['grid-gap'] = spacing + 'px'\r\n styleObj.padding = spacing + 'px'\r\n } else if (border) {\r\n // 无间隔的情况下避免边框重叠\r\n attrs.style += ';border-left:0;border-top:0'\r\n }\r\n\r\n const width = [] // 表格的列宽\r\n const trList = [] // tr 列表\r\n const cells = [] // 保存新的单元格\r\n const map = {}; // 被合并单元格占用的格子\r\n\r\n (function traversal (nodes) {\r\n for (let i = 0; i < nodes.length; i++) {\r\n if (nodes[i].name === 'tr') {\r\n trList.push(nodes[i])\r\n } else if (nodes[i].name === 'colgroup') {\r\n let colI = 1\r\n for (const col of (nodes[i].children || [])) {\r\n if (col.name === 'col') {\r\n const style = col.attrs.style || ''\r\n const start = style.indexOf('width') ? style.indexOf(';width') : 0\r\n // 提取出宽度\r\n if (start !== -1) {\r\n let end = style.indexOf(';', start + 6)\r\n if (end === -1) {\r\n end = style.length\r\n }\r\n width[colI] = style.substring(start ? start + 7 : 6, end)\r\n }\r\n colI += 1\r\n }\r\n }\r\n } else {\r\n traversal(nodes[i].children || [])\r\n }\r\n }\r\n })(children)\r\n\r\n for (let row = 1; row <= trList.length; row++) {\r\n let col = 1\r\n for (let j = 0; j < trList[row - 1].children.length; j++) {\r\n const td = trList[row - 1].children[j]\r\n if (td.name === 'td' || td.name === 'th') {\r\n // 这个格子被上面的单元格占用,则列号++\r\n while (map[row + '.' + col]) {\r\n col++\r\n }\r\n let style = td.attrs.style || ''\r\n let start = style.indexOf('width') ? style.indexOf(';width') : 0\r\n // 提取出 td 的宽度\r\n if (start !== -1) {\r\n let end = style.indexOf(';', start + 6)\r\n if (end === -1) {\r\n end = style.length\r\n }\r\n if (!td.attrs.colspan) {\r\n width[col] = style.substring(start ? start + 7 : 6, end)\r\n }\r\n style = style.substr(0, start) + style.substr(end)\r\n }\r\n // 设置竖直对齐\r\n style += ';display:flex'\r\n start = style.indexOf('vertical-align')\r\n if (start !== -1) {\r\n const val = style.substr(start + 15, 10)\r\n if (val.includes('middle')) {\r\n style += ';align-items:center'\r\n } else if (val.includes('bottom')) {\r\n style += ';align-items:flex-end'\r\n }\r\n } else {\r\n style += ';align-items:center'\r\n }\r\n // 设置水平对齐\r\n start = style.indexOf('text-align')\r\n if (start !== -1) {\r\n const val = style.substr(start + 11, 10)\r\n if (val.includes('center')) {\r\n style += ';justify-content: center'\r\n } else if (val.includes('right')) {\r\n style += ';justify-content: right'\r\n }\r\n }\r\n style = (border ? `;border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'}` + (spacing ? '' : ';border-right:0;border-bottom:0') : '') + (padding ? `;padding:${padding}px` : '') + ';' + style\r\n // 处理列合并\r\n if (td.attrs.colspan) {\r\n style += `;grid-column-start:${col};grid-column-end:${col + parseInt(td.attrs.colspan)}`\r\n if (!td.attrs.rowspan) {\r\n style += `;grid-row-start:${row};grid-row-end:${row + 1}`\r\n }\r\n col += parseInt(td.attrs.colspan) - 1\r\n }\r\n // 处理行合并\r\n if (td.attrs.rowspan) {\r\n style += `;grid-row-start:${row};grid-row-end:${row + parseInt(td.attrs.rowspan)}`\r\n if (!td.attrs.colspan) {\r\n style += `;grid-column-start:${col};grid-column-end:${col + 1}`\r\n }\r\n // 记录下方单元格被占用\r\n for (let rowspan = 1; rowspan < td.attrs.rowspan; rowspan++) {\r\n for (let colspan = 0; colspan < (td.attrs.colspan || 1); colspan++) {\r\n map[(row + rowspan) + '.' + (col - colspan)] = 1\r\n }\r\n }\r\n }\r\n if (style) {\r\n td.attrs.style = style\r\n }\r\n cells.push(td)\r\n col++\r\n }\r\n }\r\n if (row === 1) {\r\n let temp = ''\r\n for (let i = 1; i < col; i++) {\r\n temp += (width[i] ? width[i] : 'auto') + ' '\r\n }\r\n styleObj['grid-template-columns'] = temp\r\n }\r\n }\r\n node.children = cells\r\n } else {\r\n // 没有使用合并单元格的表格通过 table 布局实现\r\n if (node.c) {\r\n styleObj.display = 'table'\r\n }\r\n if (!isNaN(spacing)) {\r\n styleObj['border-spacing'] = spacing + 'px'\r\n }\r\n if (border || padding) {\r\n // 遍历\r\n (function traversal (nodes) {\r\n for (let i = 0; i < nodes.length; i++) {\r\n const td = nodes[i]\r\n if (td.name === 'th' || td.name === 'td') {\r\n if (border) {\r\n td.attrs.style = `border:${border}px ${borderstyle || 'solid'} ${bordercolor || 'gray'};${td.attrs.style || ''}`\r\n }\r\n if (padding) {\r\n td.attrs.style = `padding:${padding}px;${td.attrs.style || ''}`\r\n }\r\n } else if (td.children) {\r\n traversal(td.children)\r\n }\r\n }\r\n })(children)\r\n }\r\n }\r\n // 给表格添加一个单独的横向滚动层\r\n if (this.options.scrollTable && !(attrs.style || '').includes('inline')) {\r\n const table = Object.assign({}, node)\r\n node.name = 'div'\r\n node.attrs = {\r\n style: 'overflow:auto'\r\n }\r\n node.children = [table]\r\n attrs = table.attrs\r\n }\r\n } else if ((node.name === 'tbody' || node.name === 'tr') && node.flag && node.c) {\r\n node.flag = undefined;\r\n (function traversal (nodes) {\r\n for (let i = 0; i < nodes.length; i++) {\r\n if (nodes[i].name === 'td') {\r\n // 颜色样式设置给单元格避免丢失\r\n for (const style of ['color', 'background', 'background-color']) {\r\n if (styleObj[style]) {\r\n nodes[i].attrs.style = style + ':' + styleObj[style] + ';' + (nodes[i].attrs.style || '')\r\n }\r\n }\r\n } else {\r\n traversal(nodes[i].children || [])\r\n }\r\n }\r\n })(children)\r\n } else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) {\r\n for (let i = this.stack.length; i--;) {\r\n if (this.stack[i].name === 'table' || this.stack[i].name === 'tbody' || this.stack[i].name === 'tr') {\r\n this.stack[i].flag = 1 // 指示含有合并单元格\r\n }\r\n }\r\n } else if (node.name === 'ruby') {\r\n // 转换 ruby\r\n node.name = 'span'\r\n for (let i = 0; i < children.length - 1; i++) {\r\n if (children[i].type === 'text' && children[i + 1].name === 'rt') {\r\n children[i] = {\r\n name: 'div',\r\n attrs: {\r\n style: 'display:inline-block;text-align:center'\r\n },\r\n children: [{\r\n name: 'div',\r\n attrs: {\r\n style: 'font-size:50%;' + (children[i + 1].attrs.style || '')\r\n },\r\n children: children[i + 1].children\r\n }, children[i]]\r\n }\r\n children.splice(i + 1, 1)\r\n }\r\n }\r\n } else if (node.c) {\r\n (function traversal (node) {\r\n node.c = 2\r\n for (let i = node.children.length; i--;) {\r\n const child = node.children[i]\r\n // #ifdef (MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE3\r\n if (child.name && (config.inlineTags[child.name] || ((child.attrs.style || '').includes('inline') && child.children)) && !child.c) {\r\n traversal(child)\r\n }\r\n // #endif\r\n if (!child.c || child.name === 'table') {\r\n node.c = 1\r\n }\r\n }\r\n })(node)\r\n }\r\n\r\n if ((styleObj.display || '').includes('flex') && !node.c) {\r\n for (let i = children.length; i--;) {\r\n const item = children[i]\r\n if (item.f) {\r\n item.attrs.style = (item.attrs.style || '') + item.f\r\n item.f = undefined\r\n }\r\n }\r\n }\r\n // flex 布局时部分样式需要提取到 rich-text 外层\r\n const flex = parent && ((parent.attrs.style || '').includes('flex') || (parent.attrs.style || '').includes('grid'))\r\n // #ifdef MP-WEIXIN\r\n // 检查基础库版本 virtualHost 是否可用\r\n && !(node.c && wx.getNFCAdapter) // eslint-disable-line\r\n // #endif\r\n // #ifndef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO\r\n && !node.c // eslint-disable-line\r\n // #endif\r\n if (flex) {\r\n node.f = ';max-width:100%'\r\n }\r\n\r\n if (children.length >= 50 && node.c && !(styleObj.display || '').includes('flex')) {\r\n mergeNodes(children)\r\n }\r\n // #endif\r\n\r\n for (const key in styleObj) {\r\n if (styleObj[key]) {\r\n const val = `;${key}:${styleObj[key].replace(' !important', '')}`\r\n /* #ifndef APP-PLUS-NVUE */\r\n if (flex && ((key.includes('flex') && key !== 'flex-direction') || key === 'align-self' || key.includes('grid') || styleObj[key][0] === '-' || (key.includes('width') && val.includes('%')))) {\r\n node.f += val\r\n if (key === 'width') {\r\n attrs.style += ';width:100%'\r\n }\r\n } else /* #endif */ {\r\n attrs.style += val\r\n }\r\n }\r\n }\r\n attrs.style = attrs.style.substr(1) || undefined\r\n // #ifdef (MP-WEIXIN || MP-QQ) && VUE3\r\n for (const key in attrs) {\r\n if (!attrs[key]) {\r\n delete attrs[key]\r\n }\r\n }\r\n // #endif\r\n}\r\n\r\n/**\r\n * @description 解析到文本\r\n * @param {String} text 文本内容\r\n */\r\nParser.prototype.onText = function (text) {\r\n if (!this.pre) {\r\n // 合并空白符\r\n let trim = ''\r\n let flag\r\n for (let i = 0, len = text.length; i < len; i++) {\r\n if (!blankChar[text[i]]) {\r\n trim += text[i]\r\n } else {\r\n if (trim[trim.length - 1] !== ' ') {\r\n trim += ' '\r\n }\r\n if (text[i] === '\\n' && !flag) {\r\n flag = true\r\n }\r\n }\r\n }\r\n // 去除含有换行符的空串\r\n if (trim === ' ') {\r\n if (flag) return\r\n // #ifdef VUE3\r\n else {\r\n const parent = this.stack[this.stack.length - 1]\r\n if (parent && parent.name[0] === 't') return\r\n }\r\n // #endif\r\n }\r\n text = trim\r\n }\r\n const node = Object.create(null)\r\n node.type = 'text'\r\n // #ifdef (MP-BAIDU || MP-ALIPAY || MP-TOUTIAO) && VUE3\r\n node.attrs = {}\r\n // #endif\r\n node.text = decodeEntity(text)\r\n if (this.hook(node)) {\r\n // #ifdef MP-WEIXIN\r\n if (this.options.selectable === 'force' && system.includes('iOS') && !uni.canIUse('rich-text.user-select')) {\r\n this.expose()\r\n }\r\n // #endif\r\n const siblings = this.stack.length ? this.stack[this.stack.length - 1].children : this.nodes\r\n siblings.push(node)\r\n }\r\n}\r\n\r\n/**\r\n * @description html 词法分析器\r\n * @param {Object} handler 高层处理器\r\n */\r\nfunction Lexer (handler) {\r\n this.handler = handler\r\n}\r\n\r\n/**\r\n * @description 执行解析\r\n * @param {String} content 要解析的文本\r\n */\r\nLexer.prototype.parse = function (content) {\r\n this.content = content || ''\r\n this.i = 0 // 标记解析位置\r\n this.start = 0 // 标记一个单词的开始位置\r\n this.state = this.text // 当前状态\r\n for (let len = this.content.length; this.i !== -1 && this.i < len;) {\r\n this.state()\r\n }\r\n}\r\n\r\n/**\r\n * @description 检查标签是否闭合\r\n * @param {String} method 如果闭合要进行的操作\r\n * @returns {Boolean} 是否闭合\r\n * @private\r\n */\r\nLexer.prototype.checkClose = function (method) {\r\n const selfClose = this.content[this.i] === '/'\r\n if (this.content[this.i] === '>' || (selfClose && this.content[this.i + 1] === '>')) {\r\n if (method) {\r\n this.handler[method](this.content.substring(this.start, this.i))\r\n }\r\n this.i += selfClose ? 2 : 1\r\n this.start = this.i\r\n this.handler.onOpenTag(selfClose)\r\n if (this.handler.tagName === 'script') {\r\n this.i = this.content.indexOf('', this.i)\r\n if (this.i !== -1) {\r\n this.i += 2\r\n this.start = this.i\r\n }\r\n this.state = this.endTag\r\n } else {\r\n this.state = this.text\r\n }\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * @description 文本状态\r\n * @private\r\n */\r\nLexer.prototype.text = function () {\r\n this.i = this.content.indexOf('<', this.i) // 查找最近的标签\r\n if (this.i === -1) {\r\n // 没有标签了\r\n if (this.start < this.content.length) {\r\n this.handler.onText(this.content.substring(this.start, this.content.length))\r\n }\r\n return\r\n }\r\n const c = this.content[this.i + 1]\r\n if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {\r\n // 标签开头\r\n if (this.start !== this.i) {\r\n this.handler.onText(this.content.substring(this.start, this.i))\r\n }\r\n this.start = ++this.i\r\n this.state = this.tagName\r\n } else if (c === '/' || c === '!' || c === '?') {\r\n if (this.start !== this.i) {\r\n this.handler.onText(this.content.substring(this.start, this.i))\r\n }\r\n const next = this.content[this.i + 2]\r\n if (c === '/' && ((next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z'))) {\r\n // 标签结尾\r\n this.i += 2\r\n this.start = this.i\r\n this.state = this.endTag\r\n return\r\n }\r\n // 处理注释\r\n let end = '-->'\r\n if (c !== '!' || this.content[this.i + 2] !== '-' || this.content[this.i + 3] !== '-') {\r\n end = '>'\r\n }\r\n this.i = this.content.indexOf(end, this.i)\r\n if (this.i !== -1) {\r\n this.i += end.length\r\n this.start = this.i\r\n }\r\n } else {\r\n this.i++\r\n }\r\n}\r\n\r\n/**\r\n * @description 标签名状态\r\n * @private\r\n */\r\nLexer.prototype.tagName = function () {\r\n if (blankChar[this.content[this.i]]) {\r\n // 解析到标签名\r\n this.handler.onTagName(this.content.substring(this.start, this.i))\r\n while (blankChar[this.content[++this.i]]);\r\n if (this.i < this.content.length && !this.checkClose()) {\r\n this.start = this.i\r\n this.state = this.attrName\r\n }\r\n } else if (!this.checkClose('onTagName')) {\r\n this.i++\r\n }\r\n}\r\n\r\n/**\r\n * @description 属性名状态\r\n * @private\r\n */\r\nLexer.prototype.attrName = function () {\r\n let c = this.content[this.i]\r\n if (blankChar[c] || c === '=') {\r\n // 解析到属性名\r\n this.handler.onAttrName(this.content.substring(this.start, this.i))\r\n let needVal = c === '='\r\n const len = this.content.length\r\n while (++this.i < len) {\r\n c = this.content[this.i]\r\n if (!blankChar[c]) {\r\n if (this.checkClose()) return\r\n if (needVal) {\r\n // 等号后遇到第一个非空字符\r\n this.start = this.i\r\n this.state = this.attrVal\r\n return\r\n }\r\n if (this.content[this.i] === '=') {\r\n needVal = true\r\n } else {\r\n this.start = this.i\r\n this.state = this.attrName\r\n return\r\n }\r\n }\r\n }\r\n } else if (!this.checkClose('onAttrName')) {\r\n this.i++\r\n }\r\n}\r\n\r\n/**\r\n * @description 属性值状态\r\n * @private\r\n */\r\nLexer.prototype.attrVal = function () {\r\n const c = this.content[this.i]\r\n const len = this.content.length\r\n if (c === '\"' || c === \"'\") {\r\n // 有冒号的属性\r\n this.start = ++this.i\r\n this.i = this.content.indexOf(c, this.i)\r\n if (this.i === -1) return\r\n this.handler.onAttrVal(this.content.substring(this.start, this.i))\r\n } else {\r\n // 没有冒号的属性\r\n for (; this.i < len; this.i++) {\r\n if (blankChar[this.content[this.i]]) {\r\n this.handler.onAttrVal(this.content.substring(this.start, this.i))\r\n break\r\n } else if (this.checkClose('onAttrVal')) return\r\n }\r\n }\r\n while (blankChar[this.content[++this.i]]);\r\n if (this.i < len && !this.checkClose()) {\r\n this.start = this.i\r\n this.state = this.attrName\r\n }\r\n}\r\n\r\n/**\r\n * @description 结束标签状态\r\n * @returns {String} 结束的标签名\r\n * @private\r\n */\r\nLexer.prototype.endTag = function () {\r\n const c = this.content[this.i]\r\n if (blankChar[c] || c === '>' || c === '/') {\r\n this.handler.onCloseTag(this.content.substring(this.start, this.i))\r\n if (c !== '>') {\r\n this.i = this.content.indexOf('>', this.i)\r\n if (this.i === -1) return\r\n }\r\n this.start = ++this.i\r\n this.state = this.text\r\n } else {\r\n this.i++\r\n }\r\n}\r\n\r\nexport default Parser\r\n"],"names":["uni","style","node","wx"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js.map
new file mode 100644
index 0000000..b8891b8
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"date-format.js","sources":["uni_modules/uni-dateformat/components/uni-dateformat/date-format.js"],"sourcesContent":["// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型\r\nfunction pad(str, length = 2) {\r\n\tstr += ''\r\n\twhile (str.length < length) {\r\n\t\tstr = '0' + str\r\n\t}\r\n\treturn str.slice(-length)\r\n}\r\n\r\nconst parser = {\r\n\tyyyy: (dateObj) => {\r\n\t\treturn pad(dateObj.year, 4)\r\n\t},\r\n\tyy: (dateObj) => {\r\n\t\treturn pad(dateObj.year)\r\n\t},\r\n\tMM: (dateObj) => {\r\n\t\treturn pad(dateObj.month)\r\n\t},\r\n\tM: (dateObj) => {\r\n\t\treturn dateObj.month\r\n\t},\r\n\tdd: (dateObj) => {\r\n\t\treturn pad(dateObj.day)\r\n\t},\r\n\td: (dateObj) => {\r\n\t\treturn dateObj.day\r\n\t},\r\n\thh: (dateObj) => {\r\n\t\treturn pad(dateObj.hour)\r\n\t},\r\n\th: (dateObj) => {\r\n\t\treturn dateObj.hour\r\n\t},\r\n\tmm: (dateObj) => {\r\n\t\treturn pad(dateObj.minute)\r\n\t},\r\n\tm: (dateObj) => {\r\n\t\treturn dateObj.minute\r\n\t},\r\n\tss: (dateObj) => {\r\n\t\treturn pad(dateObj.second)\r\n\t},\r\n\ts: (dateObj) => {\r\n\t\treturn dateObj.second\r\n\t},\r\n\tSSS: (dateObj) => {\r\n\t\treturn pad(dateObj.millisecond, 3)\r\n\t},\r\n\tS: (dateObj) => {\r\n\t\treturn dateObj.millisecond\r\n\t},\r\n}\r\n\r\n// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12\r\nfunction getDate(time) {\r\n\tif (time instanceof Date) {\r\n\t\treturn time\r\n\t}\r\n\tswitch (typeof time) {\r\n\t\tcase 'string':\r\n\t\t\t{\r\n\t\t\t\t// 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000\r\n\t\t\t\tif (time.indexOf('T') > -1) {\r\n\t\t\t\t\treturn new Date(time)\r\n\t\t\t\t}\r\n\t\t\t\treturn new Date(time.replace(/-/g, '/'))\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\treturn new Date(time)\r\n\t}\r\n}\r\n\r\nexport function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') {\r\n\tif (!date && date !== 0) {\r\n\t\treturn ''\r\n\t}\r\n\tdate = getDate(date)\r\n\tconst dateObj = {\r\n\t\tyear: date.getFullYear(),\r\n\t\tmonth: date.getMonth() + 1,\r\n\t\tday: date.getDate(),\r\n\t\thour: date.getHours(),\r\n\t\tminute: date.getMinutes(),\r\n\t\tsecond: date.getSeconds(),\r\n\t\tmillisecond: date.getMilliseconds()\r\n\t}\r\n\tconst tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/\r\n\tlet flag = true\r\n\tlet result = format\r\n\twhile (flag) {\r\n\t\tflag = false\r\n\t\tresult = result.replace(tokenRegExp, function(matched) {\r\n\t\t\tflag = true\r\n\t\t\treturn parser[matched](dateObj)\r\n\t\t})\r\n\t}\r\n\treturn result\r\n}\r\n\r\nexport function friendlyDate(time, {\r\n\tlocale = 'zh',\r\n\tthreshold = [60000, 3600000],\r\n\tformat = 'yyyy/MM/dd hh:mm:ss'\r\n}) {\r\n\tif (time === '-') {\r\n\t\treturn time\r\n\t}\r\n\tif (!time && time !== 0) {\r\n\t\treturn ''\r\n\t}\r\n\tconst localeText = {\r\n\t\tzh: {\r\n\t\t\tyear: '年',\r\n\t\t\tmonth: '月',\r\n\t\t\tday: '天',\r\n\t\t\thour: '小时',\r\n\t\t\tminute: '分钟',\r\n\t\t\tsecond: '秒',\r\n\t\t\tago: '前',\r\n\t\t\tlater: '后',\r\n\t\t\tjustNow: '刚刚',\r\n\t\t\tsoon: '马上',\r\n\t\t\ttemplate: '{num}{unit}{suffix}'\r\n\t\t},\r\n\t\ten: {\r\n\t\t\tyear: 'year',\r\n\t\t\tmonth: 'month',\r\n\t\t\tday: 'day',\r\n\t\t\thour: 'hour',\r\n\t\t\tminute: 'minute',\r\n\t\t\tsecond: 'second',\r\n\t\t\tago: 'ago',\r\n\t\t\tlater: 'later',\r\n\t\t\tjustNow: 'just now',\r\n\t\t\tsoon: 'soon',\r\n\t\t\ttemplate: '{num} {unit} {suffix}'\r\n\t\t}\r\n\t}\r\n\tconst text = localeText[locale] || localeText.zh\r\n\tlet date = getDate(time)\r\n\tlet ms = date.getTime() - Date.now()\r\n\tlet absMs = Math.abs(ms)\r\n\tif (absMs < threshold[0]) {\r\n\t\treturn ms < 0 ? text.justNow : text.soon\r\n\t}\r\n\tif (absMs >= threshold[1]) {\r\n\t\treturn formatDate(date, format)\r\n\t}\r\n\tlet num\r\n\tlet unit\r\n\tlet suffix = text.later\r\n\tif (ms < 0) {\r\n\t\tsuffix = text.ago\r\n\t\tms = -ms\r\n\t}\r\n\tconst seconds = Math.floor((ms) / 1000)\r\n\tconst minutes = Math.floor(seconds / 60)\r\n\tconst hours = Math.floor(minutes / 60)\r\n\tconst days = Math.floor(hours / 24)\r\n\tconst months = Math.floor(days / 30)\r\n\tconst years = Math.floor(months / 12)\r\n\tswitch (true) {\r\n\t\tcase years > 0:\r\n\t\t\tnum = years\r\n\t\t\tunit = text.year\r\n\t\t\tbreak\r\n\t\tcase months > 0:\r\n\t\t\tnum = months\r\n\t\t\tunit = text.month\r\n\t\t\tbreak\r\n\t\tcase days > 0:\r\n\t\t\tnum = days\r\n\t\t\tunit = text.day\r\n\t\t\tbreak\r\n\t\tcase hours > 0:\r\n\t\t\tnum = hours\r\n\t\t\tunit = text.hour\r\n\t\t\tbreak\r\n\t\tcase minutes > 0:\r\n\t\t\tnum = minutes\r\n\t\t\tunit = text.minute\r\n\t\t\tbreak\r\n\t\tdefault:\r\n\t\t\tnum = seconds\r\n\t\t\tunit = text.second\r\n\t\t\tbreak\r\n\t}\r\n\r\n\tif (locale === 'en') {\r\n\t\tif (num === 1) {\r\n\t\t\tnum = 'a'\r\n\t\t} else {\r\n\t\t\tunit += 's'\r\n\t\t}\r\n\t}\r\n\r\n\treturn text.template.replace(/{\\s*num\\s*}/g, num + '').replace(/{\\s*unit\\s*}/g, unit).replace(/{\\s*suffix\\s*}/g,\r\n\t\tsuffix)\r\n}\r\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js.map
new file mode 100644
index 0000000..4872f51
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-dateformat.js","sources":["uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktZGF0ZWZvcm1hdC9jb21wb25lbnRzL3VuaS1kYXRlZm9ybWF0L3VuaS1kYXRlZm9ybWF0LnZ1ZQ"],"sourcesContent":["\r\n\t{{dateShow}}\r\n\r\n\r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue'\nwx.createComponent(Component)"],"names":["friendlyDate"],"mappings":";;;AAiBC,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,OAAO;AAAA,IACN,MAAM;AAAA,MACL,MAAM,CAAC,QAAQ,QAAQ,MAAM;AAAA,MAC7B,UAAW;AACV,eAAO;AAAA,MACR;AAAA,IACA;AAAA,IACD,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,WAAW;AAAA,MACV,MAAM;AAAA,MACN,UAAW;AACV,eAAO,CAAC,GAAG,CAAC;AAAA,MACb;AAAA,IACA;AAAA,IACD,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,aAAa;AAAA,MACZ,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACV;AAAA,EACA;AAAA,EACD,OAAO;AACN,WAAO;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACA;AAAA,EACD,UAAU;AAAA,IACT,WAAW;AACV,WAAK;AACL,aAAOA,8DAAY,aAAC,KAAK,MAAM;AAAA,QAC9B,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK;AAAA,OACb;AAAA,IACF;AAAA,EACA;AAAA,EACD,OAAO;AAAA,IACN,aAAa;AAAA,MACZ,UAAU;AACT,aAAK,eAAe;AAAA,MACpB;AAAA,MACD,WAAW;AAAA,IACZ;AAAA,EACA;AAAA,EACD,SAAS;AAAA,IACR,UAAU;AACT,WAAK;AAAA,IACL;AAAA,IACD,iBAAiB;AAChB,oBAAc,KAAK,eAAe;AAClC,UAAI,KAAK,aAAa;AACrB,aAAK,kBAAkB,YAAY,MAAM;AACxC,eAAK,QAAQ;AAAA,WACX,SAAS,KAAK,WAAW,CAAC;AAAA,MAC9B;AAAA,IACD;AAAA,EACD;AACD;;;;;;;ACjFD,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map
new file mode 100644
index 0000000..b6aa829
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uni-icons.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-icons.js","sources":["uni_modules/uni-icons/components/uni-icons/uni-icons.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktaWNvbnMvY29tcG9uZW50cy91bmktaWNvbnMvdW5pLWljb25zLnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t{{unicode}}\r\n\t\r\n\t\r\n\t\r\n\t\t\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-icons/components/uni-icons/uni-icons.vue'\nwx.createComponent(Component)"],"names":["fontData"],"mappings":";;;AAcC,MAAM,SAAS,CAAC,QAAQ;AACvB,QAAM,MAAM;AACZ,SAAQ,OAAO,QAAQ,YAAY,IAAI,KAAK,GAAG,IAAK,MAAM,OAAO;AAClE;AAqBA,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,OAAO,CAAC,OAAO;AAAA,EACf,OAAO;AAAA,IACN,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,OAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,MAAM;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA,IACD,cAAc;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,YAAY;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACA;AAAA,EACD,OAAO;AACN,WAAO;AAAA,MACN,OAAOA,2DAAO;AAAA,IACf;AAAA,EACA;AAAA,EACD,UAAU;AAAA,IACT,UAAU;AACT,UAAI,OAAO,KAAK,MAAM,KAAK,OAAK,EAAE,eAAe,KAAK,IAAI;AAC1D,UAAI,MAAM;AACT,eAAO,KAAK;AAAA,MACb;AACA,aAAO;AAAA,IACP;AAAA,IACD,WAAW;AACV,aAAO,OAAO,KAAK,IAAI;AAAA,IACvB;AAAA,IACD,WAAW;AACV,UAAI,KAAK,eAAe,IAAI;AAC3B,eAAO,UAAU,KAAK,KAAK,gBAAgB,KAAK,QAAQ,kBAAkB,KAAK,UAAU;AAAA,MAC1F;AACA,aAAO,UAAU,KAAK,KAAK,gBAAgB,KAAK,QAAQ;AAAA,IACzD;AAAA,EACA;AAAA,EACD,SAAS;AAAA,IACR,WAAW;AACV,WAAK,MAAM,OAAO;AAAA,IACnB;AAAA,EACD;AACD;;;;;;;;;;;AC1FD,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js.map
new file mode 100644
index 0000000..bfd3961
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uniicons_file_vue.js","sources":["uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js"],"sourcesContent":["\r\nexport const fontData = [\n {\n \"font_class\": \"arrow-down\",\n \"unicode\": \"\\ue6be\"\n },\n {\n \"font_class\": \"arrow-left\",\n \"unicode\": \"\\ue6bc\"\n },\n {\n \"font_class\": \"arrow-right\",\n \"unicode\": \"\\ue6bb\"\n },\n {\n \"font_class\": \"arrow-up\",\n \"unicode\": \"\\ue6bd\"\n },\n {\n \"font_class\": \"auth\",\n \"unicode\": \"\\ue6ab\"\n },\n {\n \"font_class\": \"auth-filled\",\n \"unicode\": \"\\ue6cc\"\n },\n {\n \"font_class\": \"back\",\n \"unicode\": \"\\ue6b9\"\n },\n {\n \"font_class\": \"bars\",\n \"unicode\": \"\\ue627\"\n },\n {\n \"font_class\": \"calendar\",\n \"unicode\": \"\\ue6a0\"\n },\n {\n \"font_class\": \"calendar-filled\",\n \"unicode\": \"\\ue6c0\"\n },\n {\n \"font_class\": \"camera\",\n \"unicode\": \"\\ue65a\"\n },\n {\n \"font_class\": \"camera-filled\",\n \"unicode\": \"\\ue658\"\n },\n {\n \"font_class\": \"cart\",\n \"unicode\": \"\\ue631\"\n },\n {\n \"font_class\": \"cart-filled\",\n \"unicode\": \"\\ue6d0\"\n },\n {\n \"font_class\": \"chat\",\n \"unicode\": \"\\ue65d\"\n },\n {\n \"font_class\": \"chat-filled\",\n \"unicode\": \"\\ue659\"\n },\n {\n \"font_class\": \"chatboxes\",\n \"unicode\": \"\\ue696\"\n },\n {\n \"font_class\": \"chatboxes-filled\",\n \"unicode\": \"\\ue692\"\n },\n {\n \"font_class\": \"chatbubble\",\n \"unicode\": \"\\ue697\"\n },\n {\n \"font_class\": \"chatbubble-filled\",\n \"unicode\": \"\\ue694\"\n },\n {\n \"font_class\": \"checkbox\",\n \"unicode\": \"\\ue62b\"\n },\n {\n \"font_class\": \"checkbox-filled\",\n \"unicode\": \"\\ue62c\"\n },\n {\n \"font_class\": \"checkmarkempty\",\n \"unicode\": \"\\ue65c\"\n },\n {\n \"font_class\": \"circle\",\n \"unicode\": \"\\ue65b\"\n },\n {\n \"font_class\": \"circle-filled\",\n \"unicode\": \"\\ue65e\"\n },\n {\n \"font_class\": \"clear\",\n \"unicode\": \"\\ue66d\"\n },\n {\n \"font_class\": \"close\",\n \"unicode\": \"\\ue673\"\n },\n {\n \"font_class\": \"closeempty\",\n \"unicode\": \"\\ue66c\"\n },\n {\n \"font_class\": \"cloud-download\",\n \"unicode\": \"\\ue647\"\n },\n {\n \"font_class\": \"cloud-download-filled\",\n \"unicode\": \"\\ue646\"\n },\n {\n \"font_class\": \"cloud-upload\",\n \"unicode\": \"\\ue645\"\n },\n {\n \"font_class\": \"cloud-upload-filled\",\n \"unicode\": \"\\ue648\"\n },\n {\n \"font_class\": \"color\",\n \"unicode\": \"\\ue6cf\"\n },\n {\n \"font_class\": \"color-filled\",\n \"unicode\": \"\\ue6c9\"\n },\n {\n \"font_class\": \"compose\",\n \"unicode\": \"\\ue67f\"\n },\n {\n \"font_class\": \"contact\",\n \"unicode\": \"\\ue693\"\n },\n {\n \"font_class\": \"contact-filled\",\n \"unicode\": \"\\ue695\"\n },\n {\n \"font_class\": \"down\",\n \"unicode\": \"\\ue6b8\"\n },\n\t{\n\t \"font_class\": \"bottom\",\n\t \"unicode\": \"\\ue6b8\"\n\t},\n {\n \"font_class\": \"download\",\n \"unicode\": \"\\ue68d\"\n },\n {\n \"font_class\": \"download-filled\",\n \"unicode\": \"\\ue681\"\n },\n {\n \"font_class\": \"email\",\n \"unicode\": \"\\ue69e\"\n },\n {\n \"font_class\": \"email-filled\",\n \"unicode\": \"\\ue69a\"\n },\n {\n \"font_class\": \"eye\",\n \"unicode\": \"\\ue651\"\n },\n {\n \"font_class\": \"eye-filled\",\n \"unicode\": \"\\ue66a\"\n },\n {\n \"font_class\": \"eye-slash\",\n \"unicode\": \"\\ue6b3\"\n },\n {\n \"font_class\": \"eye-slash-filled\",\n \"unicode\": \"\\ue6b4\"\n },\n {\n \"font_class\": \"fire\",\n \"unicode\": \"\\ue6a1\"\n },\n {\n \"font_class\": \"fire-filled\",\n \"unicode\": \"\\ue6c5\"\n },\n {\n \"font_class\": \"flag\",\n \"unicode\": \"\\ue65f\"\n },\n {\n \"font_class\": \"flag-filled\",\n \"unicode\": \"\\ue660\"\n },\n {\n \"font_class\": \"folder-add\",\n \"unicode\": \"\\ue6a9\"\n },\n {\n \"font_class\": \"folder-add-filled\",\n \"unicode\": \"\\ue6c8\"\n },\n {\n \"font_class\": \"font\",\n \"unicode\": \"\\ue6a3\"\n },\n {\n \"font_class\": \"forward\",\n \"unicode\": \"\\ue6ba\"\n },\n {\n \"font_class\": \"gear\",\n \"unicode\": \"\\ue664\"\n },\n {\n \"font_class\": \"gear-filled\",\n \"unicode\": \"\\ue661\"\n },\n {\n \"font_class\": \"gift\",\n \"unicode\": \"\\ue6a4\"\n },\n {\n \"font_class\": \"gift-filled\",\n \"unicode\": \"\\ue6c4\"\n },\n {\n \"font_class\": \"hand-down\",\n \"unicode\": \"\\ue63d\"\n },\n {\n \"font_class\": \"hand-down-filled\",\n \"unicode\": \"\\ue63c\"\n },\n {\n \"font_class\": \"hand-up\",\n \"unicode\": \"\\ue63f\"\n },\n {\n \"font_class\": \"hand-up-filled\",\n \"unicode\": \"\\ue63e\"\n },\n {\n \"font_class\": \"headphones\",\n \"unicode\": \"\\ue630\"\n },\n {\n \"font_class\": \"heart\",\n \"unicode\": \"\\ue639\"\n },\n {\n \"font_class\": \"heart-filled\",\n \"unicode\": \"\\ue641\"\n },\n {\n \"font_class\": \"help\",\n \"unicode\": \"\\ue679\"\n },\n {\n \"font_class\": \"help-filled\",\n \"unicode\": \"\\ue674\"\n },\n {\n \"font_class\": \"home\",\n \"unicode\": \"\\ue662\"\n },\n {\n \"font_class\": \"home-filled\",\n \"unicode\": \"\\ue663\"\n },\n {\n \"font_class\": \"image\",\n \"unicode\": \"\\ue670\"\n },\n {\n \"font_class\": \"image-filled\",\n \"unicode\": \"\\ue678\"\n },\n {\n \"font_class\": \"images\",\n \"unicode\": \"\\ue650\"\n },\n {\n \"font_class\": \"images-filled\",\n \"unicode\": \"\\ue64b\"\n },\n {\n \"font_class\": \"info\",\n \"unicode\": \"\\ue669\"\n },\n {\n \"font_class\": \"info-filled\",\n \"unicode\": \"\\ue649\"\n },\n {\n \"font_class\": \"left\",\n \"unicode\": \"\\ue6b7\"\n },\n {\n \"font_class\": \"link\",\n \"unicode\": \"\\ue6a5\"\n },\n {\n \"font_class\": \"list\",\n \"unicode\": \"\\ue644\"\n },\n {\n \"font_class\": \"location\",\n \"unicode\": \"\\ue6ae\"\n },\n {\n \"font_class\": \"location-filled\",\n \"unicode\": \"\\ue6af\"\n },\n {\n \"font_class\": \"locked\",\n \"unicode\": \"\\ue66b\"\n },\n {\n \"font_class\": \"locked-filled\",\n \"unicode\": \"\\ue668\"\n },\n {\n \"font_class\": \"loop\",\n \"unicode\": \"\\ue633\"\n },\n {\n \"font_class\": \"mail-open\",\n \"unicode\": \"\\ue643\"\n },\n {\n \"font_class\": \"mail-open-filled\",\n \"unicode\": \"\\ue63a\"\n },\n {\n \"font_class\": \"map\",\n \"unicode\": \"\\ue667\"\n },\n {\n \"font_class\": \"map-filled\",\n \"unicode\": \"\\ue666\"\n },\n {\n \"font_class\": \"map-pin\",\n \"unicode\": \"\\ue6ad\"\n },\n {\n \"font_class\": \"map-pin-ellipse\",\n \"unicode\": \"\\ue6ac\"\n },\n {\n \"font_class\": \"medal\",\n \"unicode\": \"\\ue6a2\"\n },\n {\n \"font_class\": \"medal-filled\",\n \"unicode\": \"\\ue6c3\"\n },\n {\n \"font_class\": \"mic\",\n \"unicode\": \"\\ue671\"\n },\n {\n \"font_class\": \"mic-filled\",\n \"unicode\": \"\\ue677\"\n },\n {\n \"font_class\": \"micoff\",\n \"unicode\": \"\\ue67e\"\n },\n {\n \"font_class\": \"micoff-filled\",\n \"unicode\": \"\\ue6b0\"\n },\n {\n \"font_class\": \"minus\",\n \"unicode\": \"\\ue66f\"\n },\n {\n \"font_class\": \"minus-filled\",\n \"unicode\": \"\\ue67d\"\n },\n {\n \"font_class\": \"more\",\n \"unicode\": \"\\ue64d\"\n },\n {\n \"font_class\": \"more-filled\",\n \"unicode\": \"\\ue64e\"\n },\n {\n \"font_class\": \"navigate\",\n \"unicode\": \"\\ue66e\"\n },\n {\n \"font_class\": \"navigate-filled\",\n \"unicode\": \"\\ue67a\"\n },\n {\n \"font_class\": \"notification\",\n \"unicode\": \"\\ue6a6\"\n },\n {\n \"font_class\": \"notification-filled\",\n \"unicode\": \"\\ue6c1\"\n },\n {\n \"font_class\": \"paperclip\",\n \"unicode\": \"\\ue652\"\n },\n {\n \"font_class\": \"paperplane\",\n \"unicode\": \"\\ue672\"\n },\n {\n \"font_class\": \"paperplane-filled\",\n \"unicode\": \"\\ue675\"\n },\n {\n \"font_class\": \"person\",\n \"unicode\": \"\\ue699\"\n },\n {\n \"font_class\": \"person-filled\",\n \"unicode\": \"\\ue69d\"\n },\n {\n \"font_class\": \"personadd\",\n \"unicode\": \"\\ue69f\"\n },\n {\n \"font_class\": \"personadd-filled\",\n \"unicode\": \"\\ue698\"\n },\n {\n \"font_class\": \"personadd-filled-copy\",\n \"unicode\": \"\\ue6d1\"\n },\n {\n \"font_class\": \"phone\",\n \"unicode\": \"\\ue69c\"\n },\n {\n \"font_class\": \"phone-filled\",\n \"unicode\": \"\\ue69b\"\n },\n {\n \"font_class\": \"plus\",\n \"unicode\": \"\\ue676\"\n },\n {\n \"font_class\": \"plus-filled\",\n \"unicode\": \"\\ue6c7\"\n },\n {\n \"font_class\": \"plusempty\",\n \"unicode\": \"\\ue67b\"\n },\n {\n \"font_class\": \"pulldown\",\n \"unicode\": \"\\ue632\"\n },\n {\n \"font_class\": \"pyq\",\n \"unicode\": \"\\ue682\"\n },\n {\n \"font_class\": \"qq\",\n \"unicode\": \"\\ue680\"\n },\n {\n \"font_class\": \"redo\",\n \"unicode\": \"\\ue64a\"\n },\n {\n \"font_class\": \"redo-filled\",\n \"unicode\": \"\\ue655\"\n },\n {\n \"font_class\": \"refresh\",\n \"unicode\": \"\\ue657\"\n },\n {\n \"font_class\": \"refresh-filled\",\n \"unicode\": \"\\ue656\"\n },\n {\n \"font_class\": \"refreshempty\",\n \"unicode\": \"\\ue6bf\"\n },\n {\n \"font_class\": \"reload\",\n \"unicode\": \"\\ue6b2\"\n },\n {\n \"font_class\": \"right\",\n \"unicode\": \"\\ue6b5\"\n },\n {\n \"font_class\": \"scan\",\n \"unicode\": \"\\ue62a\"\n },\n {\n \"font_class\": \"search\",\n \"unicode\": \"\\ue654\"\n },\n {\n \"font_class\": \"settings\",\n \"unicode\": \"\\ue653\"\n },\n {\n \"font_class\": \"settings-filled\",\n \"unicode\": \"\\ue6ce\"\n },\n {\n \"font_class\": \"shop\",\n \"unicode\": \"\\ue62f\"\n },\n {\n \"font_class\": \"shop-filled\",\n \"unicode\": \"\\ue6cd\"\n },\n {\n \"font_class\": \"smallcircle\",\n \"unicode\": \"\\ue67c\"\n },\n {\n \"font_class\": \"smallcircle-filled\",\n \"unicode\": \"\\ue665\"\n },\n {\n \"font_class\": \"sound\",\n \"unicode\": \"\\ue684\"\n },\n {\n \"font_class\": \"sound-filled\",\n \"unicode\": \"\\ue686\"\n },\n {\n \"font_class\": \"spinner-cycle\",\n \"unicode\": \"\\ue68a\"\n },\n {\n \"font_class\": \"staff\",\n \"unicode\": \"\\ue6a7\"\n },\n {\n \"font_class\": \"staff-filled\",\n \"unicode\": \"\\ue6cb\"\n },\n {\n \"font_class\": \"star\",\n \"unicode\": \"\\ue688\"\n },\n {\n \"font_class\": \"star-filled\",\n \"unicode\": \"\\ue68f\"\n },\n {\n \"font_class\": \"starhalf\",\n \"unicode\": \"\\ue683\"\n },\n {\n \"font_class\": \"trash\",\n \"unicode\": \"\\ue687\"\n },\n {\n \"font_class\": \"trash-filled\",\n \"unicode\": \"\\ue685\"\n },\n {\n \"font_class\": \"tune\",\n \"unicode\": \"\\ue6aa\"\n },\n {\n \"font_class\": \"tune-filled\",\n \"unicode\": \"\\ue6ca\"\n },\n {\n \"font_class\": \"undo\",\n \"unicode\": \"\\ue64f\"\n },\n {\n \"font_class\": \"undo-filled\",\n \"unicode\": \"\\ue64c\"\n },\n {\n \"font_class\": \"up\",\n \"unicode\": \"\\ue6b6\"\n },\n\t{\n\t \"font_class\": \"top\",\n\t \"unicode\": \"\\ue6b6\"\n\t},\n {\n \"font_class\": \"upload\",\n \"unicode\": \"\\ue690\"\n },\n {\n \"font_class\": \"upload-filled\",\n \"unicode\": \"\\ue68e\"\n },\n {\n \"font_class\": \"videocam\",\n \"unicode\": \"\\ue68c\"\n },\n {\n \"font_class\": \"videocam-filled\",\n \"unicode\": \"\\ue689\"\n },\n {\n \"font_class\": \"vip\",\n \"unicode\": \"\\ue6a8\"\n },\n {\n \"font_class\": \"vip-filled\",\n \"unicode\": \"\\ue6c6\"\n },\n {\n \"font_class\": \"wallet\",\n \"unicode\": \"\\ue6b1\"\n },\n {\n \"font_class\": \"wallet-filled\",\n \"unicode\": \"\\ue6c2\"\n },\n {\n \"font_class\": \"weibo\",\n \"unicode\": \"\\ue68b\"\n },\n {\n \"font_class\": \"weixin\",\n \"unicode\": \"\\ue691\"\n }\n]\r\n\r\n// export const fontData = JSON.parse(fontDataJson)\n"],"names":[],"mappings":";AACY,MAAC,WAAW;AAAA,EACtB;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACF;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACF;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AAAA,EACD;AAAA,IACE,cAAc;AAAA,IACd,WAAW;AAAA,EACZ;AACH;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js.map
new file mode 100644
index 0000000..333694f
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["uni_modules/uni-load-more/components/uni-load-more/i18n/index.js"],"sourcesContent":["import en from './en.json'\r\nimport zhHans from './zh-Hans.json'\r\nimport zhHant from './zh-Hant.json'\r\nexport default {\r\n\ten,\r\n\t'zh-Hans': zhHans,\r\n\t'zh-Hant': zhHant\r\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,MAAe,WAAA;AAAA,EACd;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AACZ;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js.map
new file mode 100644
index 0000000..2569b78
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-load-more.js","sources":["uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktbG9hZC1tb3JlL2NvbXBvbmVudHMvdW5pLWxvYWQtbW9yZS91bmktbG9hZC1tb3JlLnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t{{ status === 'more' ? contentdownText : status === 'loading' ? contentrefreshText : contentnomoreText }}\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue'\nwx.createComponent(Component)"],"names":["uni","initVueI18n","messages"],"mappings":";;;AAqCC,IAAI;AACJ,WAAW,MAAM;AAEhB,aAAWA,cAAAA,MAAI,cAAa,EAAG;AAK/B,GAAE,EAAE;AAML,MAAM;AAAA,EACL;IACGC,cAAAA,YAAYC,0DAAAA,QAAQ;AAoBxB,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,OAAO,CAAC,eAAe;AAAA,EACvB,OAAO;AAAA,IACN,QAAQ;AAAA;AAAA,MAEP,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,UAAU;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,UAAU;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,UAAU;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,OAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,UAAW;AACV,eAAO;AAAA,UACN,aAAa;AAAA,UACb,gBAAgB;AAAA,UAChB,eAAe;AAAA,QAChB;AAAA,MACD;AAAA,IACA;AAAA,IACD,UAAU;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACA;AAAA,EACD,OAAO;AACN,WAAO;AAAA,MACN,aAAa;AAAA,MACb;AAAA,MACA,WAAW;AAAA,IACZ;AAAA,EACA;AAAA,EACD,UAAU;AAAA,IACT,gBAAgB;AACf,cAAQ,KAAK,MAAM,KAAK,WAAW,EAAE,KAAK,KAAK;AAAA,IAC/C;AAAA,IACD,kBAAkB;AACjB,aAAO,KAAK,YAAY,eAAe,EAAE,2BAA2B;AAAA,IACpE;AAAA,IACD,qBAAqB;AACpB,aAAO,KAAK,YAAY,kBAAkB,EAAE,8BAA8B;AAAA,IAC1E;AAAA,IACD,oBAAoB;AACnB,aAAO,KAAK,YAAY,iBAAiB,EAAE,6BAA6B;AAAA,IACzE;AAAA,EACA;AAAA,EACD,UAAU;AAAA,EAYT;AAAA,EACD,SAAS;AAAA,IACR,UAAU;AACT,WAAK,MAAM,iBAAiB;AAAA,QAC3B,QAAQ;AAAA,UACP,QAAQ,KAAK;AAAA,QACd;AAAA,OACA;AAAA,IACF;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3JD,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js.map
new file mode 100644
index 0000000..8207345
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-popup/components/uni-popup/uni-popup.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-popup.js","sources":["uni_modules/uni-popup/components/uni-popup/uni-popup.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktcG9wdXAvY29tcG9uZW50cy91bmktcG9wdXAvdW5pLXBvcHVwLnZ1ZQ"],"sourcesContent":["\n\t\n\n\n\n\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-popup/components/uni-popup/uni-popup.vue'\nwx.createComponent(Component)"],"names":["uni"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.js.map
new file mode 100644
index 0000000..8b88d4c
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-rate/components/uni-rate/uni-rate.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-rate.js","sources":["uni_modules/uni-rate/components/uni-rate/uni-rate.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktcmF0ZS9jb21wb25lbnRzL3VuaS1yYXRlL3VuaS1yYXRlLnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-rate/components/uni-rate/uni-rate.vue'\nwx.createComponent(Component)"],"names":["uni"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js.map
new file mode 100644
index 0000000..fd743f3
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js"],"sourcesContent":["import en from './en.json'\r\nimport zhHans from './zh-Hans.json'\r\nimport zhHant from './zh-Hant.json'\r\nexport default {\r\n\ten,\r\n\t'zh-Hans': zhHans,\r\n\t'zh-Hant': zhHant\r\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGA,MAAe,WAAA;AAAA,EACd;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AACZ;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js.map
new file mode 100644
index 0000000..05e2b83
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-search-bar.js","sources":["uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktc2VhcmNoLWJhci9jb21wb25lbnRzL3VuaS1zZWFyY2gtYmFyL3VuaS1zZWFyY2gtYmFyLnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{{ placeholder }}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t{{cancelTextI18n}}\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue'\nwx.createComponent(Component)"],"names":["initVueI18n","messages","uni"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.js.map
new file mode 100644
index 0000000..7159838
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-tag/components/uni-tag/uni-tag.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-tag.js","sources":["uni_modules/uni-tag/components/uni-tag/uni-tag.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktdGFnL2NvbXBvbmVudHMvdW5pLXRhZy91bmktdGFnLnZ1ZQ"],"sourcesContent":["\r\n\t{{text}}\r\n\r\n\r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-tag/components/uni-tag/uni-tag.vue'\nwx.createComponent(Component)"],"names":[],"mappings":";;AA0BC,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,OAAO,CAAC,OAAO;AAAA,EACf,OAAO;AAAA,IACN,MAAM;AAAA;AAAA,MAEL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,MAAM;AAAA;AAAA,MAEL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,UAAU;AAAA;AAAA,MAET,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACT;AAAA,IACD,UAAU;AAAA;AAAA,MAET,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACT;AAAA,IACD,QAAQ;AAAA;AAAA,MAEP,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACT;AAAA,IACD,MAAM;AAAA;AAAA,MAEL,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACT;AAAA,IACD,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,EACA;AAAA,EACD,UAAU;AAAA,IACT,UAAU;AACT,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACG;AACJ,YAAM,WAAW;AAAA,QAChB,cAAc;AAAA,QACd,cAAc;AAAA,QACd,OAAO,QAAQ,IAAI,sBAAsB;AAAA,QACzC,OAAO,QAAQ,IAAI,cAAc,OAAO,eAAe;AAAA,QACvD,OAAO,MAAM,IAAI,oBAAoB;AAAA,QACrC,OAAO,IAAI,IAAI,kBAAkB;AAAA;AAAA,QAEjC,OAAO,QAAQ,IAAI,qCAAqC,OAAO;AAAA,QAC/D,SAAS,UAAU,wBAAwB;AAAA,MAC5C;AAEA,aAAO,SAAS,KAAK,GAAG;AAAA,IACzB;AAAA,EACA;AAAA,EACD,SAAS;AAAA,IACR,OAAO,OAAO;AACb,aAAO,UAAU,QAAQ,UAAU;AAAA,IACnC;AAAA,IACD,UAAU;AACT,UAAI,KAAK,OAAO,KAAK,QAAQ;AAAG;AAChC,WAAK,MAAM,OAAO;AAAA,IACnB;AAAA,EACD;;;;;;;;;;;;;ACvGF,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/createAnimation.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/createAnimation.js.map
new file mode 100644
index 0000000..91bd620
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/createAnimation.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createAnimation.js","sources":["uni_modules/uni-transition/components/uni-transition/createAnimation.js"],"sourcesContent":["// const defaultOption = {\n// \tduration: 300,\n// \ttimingFunction: 'linear',\n// \tdelay: 0,\n// \ttransformOrigin: '50% 50% 0'\n// }\n// #ifdef APP-NVUE\nconst nvueAnimation = uni.requireNativePlugin('animation')\n// #endif\nclass MPAnimation {\n\tconstructor(options, _this) {\n\t\tthis.options = options\n\t\t// 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误\n\t\tthis.animation = uni.createAnimation({\n\t\t\t...options\n\t\t})\n\t\tthis.currentStepAnimates = {}\n\t\tthis.next = 0\n\t\tthis.$ = _this\n\n\t}\n\n\t_nvuePushAnimates(type, args) {\n\t\tlet aniObj = this.currentStepAnimates[this.next]\n\t\tlet styles = {}\n\t\tif (!aniObj) {\n\t\t\tstyles = {\n\t\t\t\tstyles: {},\n\t\t\t\tconfig: {}\n\t\t\t}\n\t\t} else {\n\t\t\tstyles = aniObj\n\t\t}\n\t\tif (animateTypes1.includes(type)) {\n\t\t\tif (!styles.styles.transform) {\n\t\t\t\tstyles.styles.transform = ''\n\t\t\t}\n\t\t\tlet unit = ''\n\t\t\tif(type === 'rotate'){\n\t\t\t\tunit = 'deg'\n\t\t\t}\n\t\t\tstyles.styles.transform += `${type}(${args+unit}) `\n\t\t} else {\n\t\t\tstyles.styles[type] = `${args}`\n\t\t}\n\t\tthis.currentStepAnimates[this.next] = styles\n\t}\n\t_animateRun(styles = {}, config = {}) {\n\t\tlet ref = this.$.$refs['ani'].ref\n\t\tif (!ref) return\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tnvueAnimation.transition(ref, {\n\t\t\t\tstyles,\n\t\t\t\t...config\n\t\t\t}, res => {\n\t\t\t\tresolve()\n\t\t\t})\n\t\t})\n\t}\n\n\t_nvueNextAnimate(animates, step = 0, fn) {\n\t\tlet obj = animates[step]\n\t\tif (obj) {\n\t\t\tlet {\n\t\t\t\tstyles,\n\t\t\t\tconfig\n\t\t\t} = obj\n\t\t\tthis._animateRun(styles, config).then(() => {\n\t\t\t\tstep += 1\n\t\t\t\tthis._nvueNextAnimate(animates, step, fn)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.currentStepAnimates = {}\n\t\t\ttypeof fn === 'function' && fn()\n\t\t\tthis.isEnd = true\n\t\t}\n\t}\n\n\tstep(config = {}) {\n\t\t// #ifndef APP-NVUE\n\t\tthis.animation.step(config)\n\t\t// #endif\n\t\t// #ifdef APP-NVUE\n\t\tthis.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)\n\t\tthis.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin\n\t\tthis.next++\n\t\t// #endif\n\t\treturn this\n\t}\n\n\trun(fn) {\n\t\t// #ifndef APP-NVUE\n\t\tthis.$.animationData = this.animation.export()\n\t\tthis.$.timer = setTimeout(() => {\n\t\t\ttypeof fn === 'function' && fn()\n\t\t}, this.$.durationTime)\n\t\t// #endif\n\t\t// #ifdef APP-NVUE\n\t\tthis.isEnd = false\n\t\tlet ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref\n\t\tif(!ref) return\n\t\tthis._nvueNextAnimate(this.currentStepAnimates, 0, fn)\n\t\tthis.next = 0\n\t\t// #endif\n\t}\n}\n\n\nconst animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',\n\t'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',\n\t'translateZ'\n]\nconst animateTypes2 = ['opacity', 'backgroundColor']\nconst animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']\nanimateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {\n\tMPAnimation.prototype[type] = function(...args) {\n\t\t// #ifndef APP-NVUE\n\t\tthis.animation[type](...args)\n\t\t// #endif\n\t\t// #ifdef APP-NVUE\n\t\tthis._nvuePushAnimates(type, args)\n\t\t// #endif\n\t\treturn this\n\t}\n})\n\nexport function createAnimation(option, _this) {\n\tif(!_this) return\n\tclearTimeout(_this.timer)\n\treturn new MPAnimation(option, _this)\n}\n"],"names":["uni"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js.map
new file mode 100644
index 0000000..f4e55ba
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uni-transition/components/uni-transition/uni-transition.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uni-transition.js","sources":["uni_modules/uni-transition/components/uni-transition/uni-transition.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91bmktdHJhbnNpdGlvbi9jb21wb25lbnRzL3VuaS10cmFuc2l0aW9uL3VuaS10cmFuc2l0aW9uLnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\r\n\t\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\t\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uni-transition/components/uni-transition/uni-transition.vue'\nwx.createComponent(Component)"],"names":["createAnimation","type"],"mappings":";;;AAgCC,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,OAAO,CAAC,SAAS,QAAQ;AAAA,EACzB,OAAO;AAAA,IACN,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,WAAW;AAAA,MACV,MAAM,CAAC,OAAO,MAAM;AAAA,MACpB,UAAW;AACV,eAAO;AAAA,MACR;AAAA,IACA;AAAA,IACD,UAAU;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,UAAW;AACV,eAAO,CAAC;AAAA,MACT;AAAA,IACA;AAAA,IACD,aAAa;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,YAAY;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,EACD;AAAA,EACD,OAAO;AACN,WAAO;AAAA,MACN,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe,CAAE;AAAA,MACjB,cAAc;AAAA,MACd,QAAQ,CAAC;AAAA,IACV;AAAA,EACA;AAAA,EACD,OAAO;AAAA,IACN,MAAM;AAAA,MACL,QAAQ,QAAQ;AACf,YAAI,QAAQ;AACX,eAAK,KAAK;AAAA,eACJ;AAEN,cAAI,KAAK,QAAQ;AAChB,iBAAK,MAAM;AAAA,UACZ;AAAA,QACD;AAAA,MACA;AAAA,MACD,WAAW;AAAA,IACZ;AAAA,EACA;AAAA,EACD,UAAU;AAAA;AAAA,IAET,eAAe;AACd,UAAI,SAAS;AAAA,QACZ,GAAG,KAAK;AAAA,QACR,uBAAuB,KAAK,WAAW,MAAO;AAAA,MAC/C;AACA,UAAI,YAAY;AAChB,eAAS,KAAK,QAAQ;AACrB,YAAI,OAAO,KAAK,OAAO,CAAC;AACxB,qBAAa,OAAO,MAAM,OAAO,CAAC,IAAI;AAAA,MACvC;AACA,aAAO;AAAA,IACP;AAAA;AAAA,IAED,kBAAkB;AACjB,aAAO,eAAe,KAAK,YAAY,cAAmB,KAAK,UAAU,MAAM,KAAK;AAAA,IACrF;AAAA,EACA;AAAA,EACD,UAAU;AAET,SAAK,SAAS;AAAA,MACb,UAAU,KAAK;AAAA,MACf,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,OAAO;AAAA,IACR;AACA,SAAK,eAAe,KAAK;AAAA,EACzB;AAAA,EACD,SAAS;AAAA;AAAA;AAAA;AAAA,IAIR,KAAK,MAAM,IAAI;AACd,UAAI,IAAI,UAAU;AACjB,aAAK,eAAe,IAAI;AAAA,MACzB;AACA,WAAK,YAAYA,mEAAe,gBAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,GAAG,IAAI;AAAA,IACtE;AAAA;AAAA;AAAA;AAAA,IAID,UAAU;AACT,WAAK,MAAM,SAAS;AAAA,QACnB,QAAQ,KAAK;AAAA,OACb;AAAA,IACD;AAAA;AAAA;AAAA;AAAA;AAAA,IAKD,KAAK,KAAK,SAAS,IAAI;AACtB,UAAI,CAAC,KAAK;AAAW,eAAO;AAC5B,aAAO,KAAK,GAAG,EAAE,QAAQ,SAAO;AAC/B,cAAM,QAAQ,IAAI,GAAG;AACrB,YAAI,OAAO,KAAK,UAAU,GAAG,MAAM,YAAY;AAC9C,gBAAM,QAAQ,KAAK,IAClB,KAAK,UAAU,GAAG,EAAE,GAAG,KAAK,IAC5B,KAAK,UAAU,GAAG,EAAE,KAAK;AAAA,QAC3B;AAAA,OACA;AACD,WAAK,UAAU,KAAK,MAAM;AAC1B,aAAO;AAAA,IACP;AAAA;AAAA;AAAA;AAAA,IAID,IAAI,IAAI;AACP,UAAI,CAAC,KAAK;AAAW;AACrB,WAAK,UAAU,IAAI,EAAE;AAAA,IACrB;AAAA;AAAA,IAED,OAAO;AACN,mBAAa,KAAK,KAAK;AACvB,WAAK,SAAS;AAEd,WAAK,YAAY,KAAK,UAAU,KAAK,EAAE,aAAa;AACpD,WAAK,UAAU,KAAK,UAAU,KAAK,EAAE,WAAW;AAGhD,WAAK,UAAU,MAAM;AAEpB,aAAK,QAAQ,WAAW,MAAM;AAC7B,eAAK,YAAYA,mEAAAA,gBAAgB,KAAK,QAAQ,IAAI;AAClD,eAAK,aAAa,KAAK,EAAE,KAAK;AAC9B,eAAK,UAAU,IAAI,MAAM;AAMxB,iBAAK,YAAY;AACjB,iBAAK,UAAU,KAAK,UAAU,KAAK,EAAE,WAAW;AAEhD,iBAAK,MAAM,UAAU;AAAA,cACpB,QAAQ,KAAK;AAAA,aACb;AAAA,WACD;AAAA,QACD,GAAE,EAAE;AAAA,OACL;AAAA,IACD;AAAA;AAAA,IAED,MAAM,MAAM;AACX,UAAI,CAAC,KAAK;AAAW;AACrB,WAAK,aAAa,IAAI,EACpB,KAAK,EACL,IAAI,MAAM;AACV,aAAK,SAAS;AACd,aAAK,gBAAgB;AACrB,aAAK,YAAY;AACjB,YAAI,EAAE,SAAS,UAAQ,IAAM,KAAK,UAAU,KAAK;AACjD,aAAK,UAAU,WAAW;AAC1B,aAAK,YAAY;AACjB,aAAK,MAAM,UAAU;AAAA,UACpB,QAAQ,KAAK;AAAA,SACb;AAAA,OACD;AAAA,IACF;AAAA;AAAA,IAED,UAAU,MAAM;AACf,UAAI,SAAS,EAAE,WAAW,IAAI,SAAS,EAAE;AACzC,YAAM,aAAa,CAACC,OAAM,SAAS;AAClC,cAAM,QAAQ,KAAK,cAAcA,KAAI,EAAE,IAAI;AAC3C,YAAI,KAAK,WAAW,MAAM,GAAG;AAC5B,iBAAO,UAAU;AAAA,eACX;AACN,iBAAO,aAAa,QAAQ;AAAA,QAC7B;AAAA,MACD;AAEA,UAAI,OAAO,KAAK,cAAc,UAAU;AACvC,mBAAW,MAAM,KAAK,SAAS;AAAA,aACzB;AACN,aAAK,UAAU,QAAQ,UAAQ,WAAW,MAAM,IAAI,CAAC;AAAA,MACtD;AACA,aAAO;AAAA,IACP;AAAA;AAAA,IAED,aAAa,MAAM;AAClB,UAAI,gBAAgB,CAACA,OAAM,SAAS;AACnC,YAAI,SAAS;AACb,YAAI,SAAS,QAAQ;AACpB,mBAASA,QAAO,IAAI;AAAA,eACd;AACN,mBAASA,QAAO,UAAU;AAC1B,cAAI,SAAS,WAAW;AACvB,qBAASA,QAAO,MAAM;AAAA,UACvB;AACA,cAAI,SAAS,YAAY;AACxB,qBAASA,QAAO,MAAM;AAAA,UACvB;AACA,cAAI,SAAS,eAAe;AAC3B,qBAASA,QAAO,SAAS;AAAA,UAC1B;AACA,cAAI,SAAS,gBAAgB;AAC5B,qBAASA,QAAO,SAAS;AAAA,UAC1B;AAAA,QACD;AACA,aAAK,UAAU,KAAK,cAAe,EAAC,IAAI,CAAC,EAAE,MAAM;AAAA,MAClD;AACA,UAAI,OAAO,KAAK,cAAc,UAAU;AACvC,sBAAc,MAAM,KAAK,SAAS;AAAA,aAC5B;AACN,aAAK,UAAU,QAAQ,UAAQ;AAC9B,wBAAc,MAAM,IAAI;AAAA,SACxB;AAAA,MACF;AAEA,aAAO,KAAK;AAAA,IACZ;AAAA,IACD,cAAc,MAAM;AACnB,aAAO;AAAA,QACN,MAAM,OAAO,IAAI;AAAA,QACjB,aAAa,cAAc,OAAO,MAAM,OAAO;AAAA,QAC/C,eAAe,cAAc,OAAO,MAAM,MAAM;AAAA,QAChD,gBAAgB,cAAc,OAAO,MAAM,MAAM;AAAA,QACjD,cAAc,cAAc,OAAO,MAAM,OAAO;AAAA,QAChD,WAAW,UAAU,OAAO,IAAI,GAAG,YAAY,OAAO,IAAI,GAAG;AAAA,QAC7D,YAAY,UAAU,OAAO,IAAI,GAAG,YAAY,OAAO,IAAI,GAAG;AAAA,MAC/D;AAAA,IACA;AAAA;AAAA,IAED,gBAAgB;AACf,aAAO;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,WAAW;AAAA,QACX,YAAY;AAAA,MACb;AAAA,IACA;AAAA;AAAA,IAED,OAAO,MAAM;AACZ,aAAO,KAAK,QAAQ,YAAY,KAAK,EAAE,YAAY;AAAA,IACpD;AAAA,EACD;AACD;;;;;;;;;;;AC/RD,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-empty/components/uv-empty/props.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-empty/components/uv-empty/props.js.map
new file mode 100644
index 0000000..a289ab1
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-empty/components/uv-empty/props.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"props.js","sources":["uni_modules/uv-empty/components/uv-empty/props.js"],"sourcesContent":["export default {\r\n\tprops: {\r\n\t\t// 内置图标名称,或图片路径,建议绝对路径\r\n\t\ticon: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 提示文字\r\n\t\ttext: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 文字颜色\r\n\t\ttextColor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '#c0c4cc'\r\n\t\t},\r\n\t\t// 文字大小\r\n\t\ttextSize: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: 14\r\n\t\t},\r\n\t\t// 图标的颜色\r\n\t\ticonColor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '#c0c4cc'\r\n\t\t},\r\n\t\t// 图标的大小\r\n\t\ticonSize: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: 90\r\n\t\t},\r\n\t\t// 选择预置的图标类型\r\n\t\tmode: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'data'\r\n\t\t},\r\n\t\t// 图标宽度,单位px\r\n\t\twidth: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: 160\r\n\t\t},\r\n\t\t// 图标高度,单位px\r\n\t\theight: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: 160\r\n\t\t},\r\n\t\t// 是否显示组件\r\n\t\tshow: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: true\r\n\t\t},\r\n\t\t// 组件距离上一个元素之间的距离,默认px单位\r\n\t\tmarginTop: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: 0\r\n\t\t},\r\n\t\t...uni.$uv?.props?.empty\r\n\t}\r\n}"],"names":["uni"],"mappings":";;;AAAA,MAAe,QAAA;AAAA,EACd,OAAO;AAAA;AAAA,IAEN,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,WAAW;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,UAAU;AAAA,MACT,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,WAAW;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,UAAU;AAAA,MACT,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,OAAO;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,QAAQ;AAAA,MACP,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,WAAW;AAAA,MACV,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA,IACD,IAAGA,yBAAG,MAAC,QAAJA,mBAAS,UAATA,mBAAgB;AAAA,EACnB;AACF;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.js.map
new file mode 100644
index 0000000..e216fff
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-empty/components/uv-empty/uv-empty.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uv-empty.js","sources":["uni_modules/uv-empty/components/uv-empty/uv-empty.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91di1lbXB0eS9jb21wb25lbnRzL3V2LWVtcHR5L3V2LWVtcHR5LnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t{{text ? text : icons[mode]}}\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uv-empty/components/uv-empty/uv-empty.vue'\nwx.createComponent(Component)"],"names":["mpMixin","mixin","props"],"mappings":";;;;;AAwDC,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,QAAQ,CAACA,yCAAAA,SAASC,uCAAK,OAAEC,kDAAK;AAAA,EAC9B,OAAO;AACN,WAAO;AAAA,MACN,OAAO;AAAA,QACN,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACV;AAAA,IACD;AAAA,EACA;AAAA,EACD,UAAU;AAAA;AAAA,IAET,aAAa;AACZ,YAAM,QAAQ,CAAC;AACf,YAAM,YAAY,KAAK,IAAI,QAAQ,KAAK,SAAS;AAEjD,aAAO,KAAK,IAAI,UAAU,OAAO,KAAK,IAAI,SAAS,KAAK,WAAW,CAAC;AAAA,IACpE;AAAA;AAAA,IAED,YAAY;AACX,YAAM,QAAQ,CAAC;AACf,YAAM,QAAQ,KAAK;AACnB,YAAM,WAAW,KAAK,IAAI,QAAQ,KAAK,QAAQ;AAC/C,aAAO;AAAA,IACP;AAAA;AAAA,IAED,QAAQ;AACP,YAAM,WAAW,KAAK,KAAK,QAAQ,OAAO,IAAI,MAAM,KAAK,KAAK,QAAQ,QAAQ,IAAI;AAClF,aAAO,KAAK,KAAK,QAAQ,GAAG,MAAM,MAAM;AAAA,IACzC;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpGD,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/icons.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/icons.js.map
new file mode 100644
index 0000000..eff7474
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/icons.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"icons.js","sources":["uni_modules/uv-icon/components/uv-icon/icons.js"],"sourcesContent":["export default {\r\n\t'uvicon-level': 'e68f',\r\n\t'uvicon-checkbox-mark': 'e659',\r\n\t'uvicon-folder': 'e694',\r\n\t'uvicon-movie': 'e67c',\r\n\t'uvicon-star-fill': 'e61e',\r\n\t'uvicon-star': 'e618',\r\n\t'uvicon-phone-fill': 'e6ac',\r\n\t'uvicon-phone': 'e6ba',\r\n\t'uvicon-apple-fill': 'e635',\r\n\t'uvicon-backspace': 'e64d',\r\n\t'uvicon-attach': 'e640',\r\n\t'uvicon-empty-data': 'e671',\r\n\t'uvicon-empty-address': 'e68a',\r\n\t'uvicon-empty-favor': 'e662',\r\n\t'uvicon-empty-car': 'e657',\r\n\t'uvicon-empty-order': 'e66b',\r\n\t'uvicon-empty-list': 'e672',\r\n\t'uvicon-empty-search': 'e677',\r\n\t'uvicon-empty-permission': 'e67d',\r\n\t'uvicon-empty-news': 'e67e',\r\n\t'uvicon-empty-history': 'e685',\r\n\t'uvicon-empty-coupon': 'e69b',\r\n\t'uvicon-empty-page': 'e60e',\r\n\t'uvicon-empty-wifi-off': 'e6cc',\r\n\t'uvicon-reload': 'e627',\r\n\t'uvicon-order': 'e695',\r\n\t'uvicon-server-man': 'e601',\r\n\t'uvicon-search': 'e632',\r\n\t'uvicon-more-dot-fill': 'e66f',\r\n\t'uvicon-scan': 'e631',\r\n\t'uvicon-map': 'e665',\r\n\t'uvicon-map-fill': 'e6a8',\r\n\t'uvicon-tags': 'e621',\r\n\t'uvicon-tags-fill': 'e613',\r\n\t'uvicon-eye': 'e664',\r\n\t'uvicon-eye-fill': 'e697',\r\n\t'uvicon-eye-off': 'e69c',\r\n\t'uvicon-eye-off-outline': 'e688',\r\n\t'uvicon-mic': 'e66d',\r\n\t'uvicon-mic-off': 'e691',\r\n\t'uvicon-calendar': 'e65c',\r\n\t'uvicon-trash': 'e623',\r\n\t'uvicon-trash-fill': 'e6ce',\r\n\t'uvicon-play-left': 'e6bf',\r\n\t'uvicon-play-right': 'e6b3',\r\n\t'uvicon-minus': 'e614',\r\n\t'uvicon-plus': 'e625',\r\n\t'uvicon-info-circle': 'e69f',\r\n\t'uvicon-info-circle-fill': 'e6a7',\r\n\t'uvicon-question-circle': 'e622',\r\n\t'uvicon-question-circle-fill': 'e6bc',\r\n\t'uvicon-close': 'e65a',\r\n\t'uvicon-checkmark': 'e64a',\r\n\t'uvicon-checkmark-circle': 'e643',\r\n\t'uvicon-checkmark-circle-fill': 'e668',\r\n\t'uvicon-setting': 'e602',\r\n\t'uvicon-setting-fill': 'e6d0',\r\n\t'uvicon-heart': 'e6a2',\r\n\t'uvicon-heart-fill': 'e68b',\r\n\t'uvicon-camera': 'e642',\r\n\t'uvicon-camera-fill': 'e650',\r\n\t'uvicon-more-circle': 'e69e',\r\n\t'uvicon-more-circle-fill': 'e684',\r\n\t'uvicon-chat': 'e656',\r\n\t'uvicon-chat-fill': 'e63f',\r\n\t'uvicon-bag': 'e647',\r\n\t'uvicon-error-circle': 'e66e',\r\n\t'uvicon-error-circle-fill': 'e655',\r\n\t'uvicon-close-circle': 'e64e',\r\n\t'uvicon-close-circle-fill': 'e666',\r\n\t'uvicon-share': 'e629',\r\n\t'uvicon-share-fill': 'e6bb',\r\n\t'uvicon-share-square': 'e6c4',\r\n\t'uvicon-shopping-cart': 'e6cb',\r\n\t'uvicon-shopping-cart-fill': 'e630',\r\n\t'uvicon-bell': 'e651',\r\n\t'uvicon-bell-fill': 'e604',\r\n\t'uvicon-list': 'e690',\r\n\t'uvicon-list-dot': 'e6a9',\r\n\t'uvicon-zhifubao-circle-fill': 'e617',\r\n\t'uvicon-weixin-circle-fill': 'e6cd',\r\n\t'uvicon-weixin-fill': 'e620',\r\n\t'uvicon-qq-fill': 'e608',\r\n\t'uvicon-qq-circle-fill': 'e6b9',\r\n\t'uvicon-moments-circel-fill': 'e6c2',\r\n\t'uvicon-moments': 'e6a0',\r\n\t'uvicon-car': 'e64f',\r\n\t'uvicon-car-fill': 'e648',\r\n\t'uvicon-warning-fill': 'e6c7',\r\n\t'uvicon-warning': 'e6c1',\r\n\t'uvicon-clock-fill': 'e64b',\r\n\t'uvicon-clock': 'e66c',\r\n\t'uvicon-edit-pen': 'e65d',\r\n\t'uvicon-edit-pen-fill': 'e679',\r\n\t'uvicon-email': 'e673',\r\n\t'uvicon-email-fill': 'e683',\r\n\t'uvicon-minus-circle': 'e6a5',\r\n\t'uvicon-plus-circle': 'e603',\r\n\t'uvicon-plus-circle-fill': 'e611',\r\n\t'uvicon-file-text': 'e687',\r\n\t'uvicon-file-text-fill': 'e67f',\r\n\t'uvicon-pushpin': 'e6d1',\r\n\t'uvicon-pushpin-fill': 'e6b6',\r\n\t'uvicon-grid': 'e68c',\r\n\t'uvicon-grid-fill': 'e698',\r\n\t'uvicon-play-circle': 'e6af',\r\n\t'uvicon-play-circle-fill': 'e62a',\r\n\t'uvicon-pause-circle-fill': 'e60c',\r\n\t'uvicon-pause': 'e61c',\r\n\t'uvicon-pause-circle': 'e696',\r\n\t'uvicon-gift-fill': 'e6b0',\r\n\t'uvicon-gift': 'e680',\r\n\t'uvicon-kefu-ermai': 'e660',\r\n\t'uvicon-server-fill': 'e610',\r\n\t'uvicon-coupon-fill': 'e64c',\r\n\t'uvicon-coupon': 'e65f',\r\n\t'uvicon-integral': 'e693',\r\n\t'uvicon-integral-fill': 'e6b1',\r\n\t'uvicon-home-fill': 'e68e',\r\n\t'uvicon-home': 'e67b',\r\n\t'uvicon-account': 'e63a',\r\n\t'uvicon-account-fill': 'e653',\r\n\t'uvicon-thumb-down-fill': 'e628',\r\n\t'uvicon-thumb-down': 'e60a',\r\n\t'uvicon-thumb-up': 'e612',\r\n\t'uvicon-thumb-up-fill': 'e62c',\r\n\t'uvicon-lock-fill': 'e6a6',\r\n\t'uvicon-lock-open': 'e68d',\r\n\t'uvicon-lock-opened-fill': 'e6a1',\r\n\t'uvicon-lock': 'e69d',\r\n\t'uvicon-red-packet': 'e6c3',\r\n\t'uvicon-photo-fill': 'e6b4',\r\n\t'uvicon-photo': 'e60d',\r\n\t'uvicon-volume-off-fill': 'e6c8',\r\n\t'uvicon-volume-off': 'e6bd',\r\n\t'uvicon-volume-fill': 'e624',\r\n\t'uvicon-volume': 'e605',\r\n\t'uvicon-download': 'e670',\r\n\t'uvicon-arrow-up-fill': 'e636',\r\n\t'uvicon-arrow-down-fill': 'e638',\r\n\t'uvicon-play-left-fill': 'e6ae',\r\n\t'uvicon-play-right-fill': 'e6ad',\r\n\t'uvicon-arrow-downward': 'e634',\r\n\t'uvicon-arrow-leftward': 'e63b',\r\n\t'uvicon-arrow-rightward': 'e644',\r\n\t'uvicon-arrow-upward': 'e641',\r\n\t'uvicon-arrow-down': 'e63e',\r\n\t'uvicon-arrow-right': 'e63c',\r\n\t'uvicon-arrow-left': 'e646',\r\n\t'uvicon-arrow-up': 'e633',\r\n\t'uvicon-skip-back-left': 'e6c5',\r\n\t'uvicon-skip-forward-right': 'e61f',\r\n\t'uvicon-arrow-left-double': 'e637',\r\n\t'uvicon-man': 'e675',\r\n\t'uvicon-woman': 'e626',\r\n\t'uvicon-en': 'e6b8',\r\n\t'uvicon-twitte': 'e607',\r\n\t'uvicon-twitter-circle-fill': 'e6cf'\r\n}"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/props.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/props.js.map
new file mode 100644
index 0000000..285e50c
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/props.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"props.js","sources":["uni_modules/uv-icon/components/uv-icon/props.js"],"sourcesContent":["export default {\r\n\tprops: {\r\n\t\t// 图标类名\r\n\t\tname: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 图标颜色,可接受主题色\r\n\t\tcolor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '#606266'\r\n\t\t},\r\n\t\t// 字体大小,单位px\r\n\t\tsize: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: '16px'\r\n\t\t},\r\n\t\t// 是否显示粗体\r\n\t\tbold: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\t// 点击图标的时候传递事件出去的index(用于区分点击了哪一个)\r\n\t\tindex: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: null\r\n\t\t},\r\n\t\t// 触摸图标时的类名\r\n\t\thoverClass: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 自定义扩展前缀,方便用户扩展自己的图标库\r\n\t\tcustomPrefix: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'uvicon'\r\n\t\t},\r\n\t\t// 图标右边或者下面的文字\r\n\t\tlabel: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// label的位置,只能右边或者下边\r\n\t\tlabelPos: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'right'\r\n\t\t},\r\n\t\t// label的大小\r\n\t\tlabelSize: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: '15px'\r\n\t\t},\r\n\t\t// label的颜色\r\n\t\tlabelColor: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: '#606266'\r\n\t\t},\r\n\t\t// label与图标的距离\r\n\t\tspace: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: '3px'\r\n\t\t},\r\n\t\t// 图片的mode\r\n\t\timgMode: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'aspectFit'\r\n\t\t},\r\n\t\t// 用于显示图片小图标时,图片的宽度\r\n\t\twidth: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 用于显示图片小图标时,图片的高度\r\n\t\theight: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 用于解决某些情况下,让图标垂直居中的用途\r\n\t\ttop: {\r\n\t\t\ttype: [String, Number],\r\n\t\t\tdefault: 0\r\n\t\t},\r\n\t\t// 是否阻止事件传播\r\n\t\tstop: {\r\n\t\t\ttype: Boolean,\r\n\t\t\tdefault: false\r\n\t\t},\r\n\t\t...uni.$uv?.props?.icon\r\n\t}\r\n}"],"names":["uni"],"mappings":";;;AAAA,MAAe,QAAA;AAAA,EACd,OAAO;AAAA;AAAA,IAEN,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,OAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,OAAO;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,YAAY;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,cAAc;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,OAAO;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,UAAU;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,WAAW;AAAA,MACV,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,YAAY;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,OAAO;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,SAAS;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA;AAAA,IAED,OAAO;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,QAAQ;AAAA,MACP,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,KAAK;AAAA,MACJ,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACT;AAAA;AAAA,IAED,MAAM;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACT;AAAA,IACD,IAAGA,yBAAG,MAAC,QAAJA,mBAAS,UAATA,mBAAgB;AAAA,EACnB;AACF;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.js.map
new file mode 100644
index 0000000..f62ac48
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-icon/components/uv-icon/uv-icon.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"uv-icon.js","sources":["uni_modules/uv-icon/components/uv-icon/uv-icon.vue","../../HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovY29kaW5nIHNvZnR3YXJlL0hCdWlsZGVyWC91bmlhcHBfdnVlM19jb2RlL3dhbGxwYXBlci1rdC91bmlfbW9kdWxlcy91di1pY29uL2NvbXBvbmVudHMvdXYtaWNvbi91di1pY29uLnZ1ZQ"],"sourcesContent":["\r\n\t\r\n\t\t\r\n\t\t{{icon}}\r\n\t\t\r\n\t\t{{ label }}\r\n\t\r\n\r\n\r\n\r\n\r\n","import Component from 'D:/coding software/HBuilderX/uniapp_vue3_code/wallpaper-kt/uni_modules/uv-icon/components/uv-icon/uv-icon.vue'\nwx.createComponent(Component)"],"names":["mpMixin","mixin","props","icons"],"mappings":";;;;;;AA8EC,MAAK,YAAU;AAAA,EACd,MAAM;AAAA,EACN,OAAO,CAAC,OAAO;AAAA,EACf,QAAQ,CAACA,yCAAAA,SAASC,uCAAK,OAAEC,gDAAK;AAAA,EAC9B,OAAO;AACN,WAAO;AAAA,MACN,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,EACA;AAAA,EACD,UAAU;AAAA,IACT,WAAW;AACV,UAAI,UAAU,CAAC;AACf,cAAQ,KAAK,KAAK,YAAY;AAC9B,cAAQ,KAAK,KAAK,eAAe,MAAM,KAAK,IAAI;AAEhD,UAAI,KAAK,SAAS,KAAK,UAAU,SAAS,KAAK,KAAK;AAAG,gBAAQ,KAAK,oBAAoB,KAAK,KAAK;AAMlG,aAAO;AAAA,IACP;AAAA,IACD,YAAY;AACX,UAAI,QAAQ,CAAC;AACb,cAAQ;AAAA,QACP,UAAU,KAAK,IAAI,QAAQ,KAAK,IAAI;AAAA,QACpC,YAAY,KAAK,IAAI,QAAQ,KAAK,IAAI;AAAA,QACtC,YAAY,KAAK,OAAO,SAAS;AAAA;AAAA,QAEjC,KAAK,KAAK,IAAI,QAAQ,KAAK,GAAG;AAAA,MAC/B;AAEA,UAAI,KAAK,SAAS,CAAC,KAAK,UAAU,SAAS,KAAK,KAAK;AAAG,cAAM,QAAQ,KAAK;AAC3E,aAAO;AAAA,IACP;AAAA;AAAA,IAED,QAAQ;AACP,YAAM,WAAW,KAAK,KAAK,QAAQ,OAAO,IAAI,MAAM,KAAK,KAAK,QAAQ,QAAQ,IAAI;AAClF,aAAO,KAAK,KAAK,QAAQ,GAAG,MAAM,MAAM;AAAA,IACxC;AAAA,IACD,WAAW;AACV,UAAI,QAAQ,CAAC;AAEb,YAAM,QAAQ,KAAK,QAAQ,KAAK,IAAI,QAAQ,KAAK,KAAK,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI;AACpF,YAAM,SAAS,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,MAAM,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI;AACvF,aAAO;AAAA,IACP;AAAA;AAAA,IAED,OAAO;AAEN,YAAM,OAAOC,2CAAK,MAAC,YAAY,KAAK,IAAI;AAMxC,aAAO,OAAO,SAAS,KAAK,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,KAAK,YAAY,IAAI,KAAK,KAAK,OAAO;AAAA,IAChG;AAAA,EACA;AAAA,EACD,SAAS;AAAA,IACR,aAAa,GAAG;AACf,WAAK,MAAM,SAAS,KAAK,KAAK;AAE9B,WAAK,QAAQ,KAAK,aAAa,CAAC;AAAA,IACjC;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtJD,GAAG,gBAAgB,SAAS;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/debounce.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/debounce.js.map
new file mode 100644
index 0000000..1086bbd
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/debounce.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"debounce.js","sources":["uni_modules/uv-ui-tools/libs/function/debounce.js"],"sourcesContent":["let timeout = null\r\n\r\n/**\r\n * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数\r\n *\r\n * @param {Function} func 要执行的回调函数\r\n * @param {Number} wait 延时的时间\r\n * @param {Boolean} immediate 是否立即执行\r\n * @return null\r\n */\r\nfunction debounce(func, wait = 500, immediate = false) {\r\n // 清除定时器\r\n if (timeout !== null) clearTimeout(timeout)\r\n // 立即执行,此类情况一般用不到\r\n if (immediate) {\r\n const callNow = !timeout\r\n timeout = setTimeout(() => {\r\n timeout = null\r\n }, wait)\r\n if (callNow) typeof func === 'function' && func()\r\n } else {\r\n // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法\r\n timeout = setTimeout(() => {\r\n typeof func === 'function' && func()\r\n }, wait)\r\n }\r\n}\r\n\r\nexport default debounce\r\n"],"names":[],"mappings":";AAAA,IAAI,UAAU;AAUd,SAAS,SAAS,MAAM,OAAO,KAAK,YAAY,OAAO;AAEnD,MAAI,YAAY;AAAM,iBAAa,OAAO;AAE1C,MAAI,WAAW;AACX,UAAM,UAAU,CAAC;AACjB,cAAU,WAAW,MAAM;AACvB,gBAAU;AAAA,IACb,GAAE,IAAI;AACP,QAAI;AAAS,aAAO,SAAS,cAAc,KAAM;AAAA,EACzD,OAAW;AAEH,cAAU,WAAW,MAAM;AACvB,aAAO,SAAS,cAAc,KAAM;AAAA,IACvC,GAAE,IAAI;AAAA,EACV;AACL;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/digit.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/digit.js.map
new file mode 100644
index 0000000..7364149
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/digit.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"digit.js","sources":["uni_modules/uv-ui-tools/libs/function/digit.js"],"sourcesContent":["let _boundaryCheckingState = true; // 是否进行越界检查的全局开关\n\n/**\n * 把错误的数据转正\n * @private\n * @example strip(0.09999999999999998)=0.1\n */\nfunction strip(num, precision = 15) {\n return +parseFloat(Number(num).toPrecision(precision));\n}\n\n/**\n * Return digits length of a number\n * @private\n * @param {*number} num Input number\n */\nfunction digitLength(num) {\n // Get digit length of e\n const eSplit = num.toString().split(/[eE]/);\n const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0);\n return len > 0 ? len : 0;\n}\n\n/**\n * 把小数转成整数,如果是小数则放大成整数\n * @private\n * @param {*number} num 输入数\n */\nfunction float2Fixed(num) {\n if (num.toString().indexOf('e') === -1) {\n return Number(num.toString().replace('.', ''));\n }\n const dLen = digitLength(num);\n return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);\n}\n\n/**\n * 检测数字是否越界,如果越界给出提示\n * @private\n * @param {*number} num 输入数\n */\nfunction checkBoundary(num) {\n if (_boundaryCheckingState) {\n if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {\n console.warn(`${num} 超出了精度限制,结果可能不正确`);\n }\n }\n}\n\n/**\n * 把递归操作扁平迭代化\n * @param {number[]} arr 要操作的数字数组\n * @param {function} operation 迭代操作\n * @private\n */\nfunction iteratorOperation(arr, operation) {\n const [num1, num2, ...others] = arr;\n let res = operation(num1, num2);\n\n others.forEach((num) => {\n res = operation(res, num);\n });\n\n return res;\n}\n\n/**\n * 高精度乘法\n * @export\n */\nexport function times(...nums) {\n if (nums.length > 2) {\n return iteratorOperation(nums, times);\n }\n\n const [num1, num2] = nums;\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n const baseNum = digitLength(num1) + digitLength(num2);\n const leftValue = num1Changed * num2Changed;\n\n checkBoundary(leftValue);\n\n return leftValue / Math.pow(10, baseNum);\n}\n\n/**\n * 高精度加法\n * @export\n */\nexport function plus(...nums) {\n if (nums.length > 2) {\n return iteratorOperation(nums, plus);\n }\n\n const [num1, num2] = nums;\n // 取最大的小数位\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n // 把小数都转为整数然后再计算\n return (times(num1, baseNum) + times(num2, baseNum)) / baseNum;\n}\n\n/**\n * 高精度减法\n * @export\n */\nexport function minus(...nums) {\n if (nums.length > 2) {\n return iteratorOperation(nums, minus);\n }\n\n const [num1, num2] = nums;\n const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)));\n return (times(num1, baseNum) - times(num2, baseNum)) / baseNum;\n}\n\n/**\n * 高精度除法\n * @export\n */\nexport function divide(...nums) {\n if (nums.length > 2) {\n return iteratorOperation(nums, divide);\n }\n\n const [num1, num2] = nums;\n const num1Changed = float2Fixed(num1);\n const num2Changed = float2Fixed(num2);\n checkBoundary(num1Changed);\n checkBoundary(num2Changed);\n // 重要,这里必须用strip进行修正\n return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));\n}\n\n/**\n * 四舍五入\n * @export\n */\nexport function round(num, ratio) {\n const base = Math.pow(10, ratio);\n let result = divide(Math.round(Math.abs(times(num, base))), base);\n if (num < 0 && result !== 0) {\n result = times(result, -1);\n }\n // 位数不足则补0\n return result;\n}\n\n/**\n * 是否进行边界检查,默认开启\n * @param flag 标记开关,true 为开启,false 为关闭,默认为 true\n * @export\n */\nexport function enableBoundaryChecking(flag = true) {\n _boundaryCheckingState = flag;\n}\n\n\nexport default {\n times,\n plus,\n minus,\n divide,\n round,\n enableBoundaryChecking,\n};\n\n"],"names":["uni"],"mappings":";;AAOA,SAAS,MAAM,KAAK,YAAY,IAAI;AAClC,SAAO,CAAC,WAAW,OAAO,GAAG,EAAE,YAAY,SAAS,CAAC;AACvD;AAOA,SAAS,YAAY,KAAK;AAExB,QAAM,SAAS,IAAI,SAAU,EAAC,MAAM,MAAM;AAC1C,QAAM,OAAO,OAAO,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,SAAS,EAAE,OAAO,CAAC,KAAK;AACpE,SAAO,MAAM,IAAI,MAAM;AACzB;AAOA,SAAS,YAAY,KAAK;AACxB,MAAI,IAAI,SAAU,EAAC,QAAQ,GAAG,MAAM,IAAI;AACtC,WAAO,OAAO,IAAI,SAAQ,EAAG,QAAQ,KAAK,EAAE,CAAC;AAAA,EAC9C;AACD,QAAM,OAAO,YAAY,GAAG;AAC5B,SAAO,OAAO,IAAI,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,OAAO,GAAG;AACxE;AAOA,SAAS,cAAc,KAAK;AACE;AAC1B,QAAI,MAAM,OAAO,oBAAoB,MAAM,OAAO,kBAAkB;AAClEA,oBAAA,MAAA,MAAA,QAAA,wDAAa,GAAG,GAAG,kBAAkB;AAAA,IACtC;AAAA,EACF;AACH;AAQA,SAAS,kBAAkB,KAAK,WAAW;AACzC,QAAM,CAAC,MAAM,MAAM,GAAG,MAAM,IAAI;AAChC,MAAI,MAAM,UAAU,MAAM,IAAI;AAE9B,SAAO,QAAQ,CAAC,QAAQ;AACtB,UAAM,UAAU,KAAK,GAAG;AAAA,EAC5B,CAAG;AAED,SAAO;AACT;AAMO,SAAS,SAAS,MAAM;AAC7B,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,kBAAkB,MAAM,KAAK;AAAA,EACrC;AAED,QAAM,CAAC,MAAM,IAAI,IAAI;AACrB,QAAM,cAAc,YAAY,IAAI;AACpC,QAAM,cAAc,YAAY,IAAI;AACpC,QAAM,UAAU,YAAY,IAAI,IAAI,YAAY,IAAI;AACpD,QAAM,YAAY,cAAc;AAEhC,gBAAc,SAAS;AAEvB,SAAO,YAAY,KAAK,IAAI,IAAI,OAAO;AACzC;AAoCO,SAAS,UAAU,MAAM;AAC9B,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,kBAAkB,MAAM,MAAM;AAAA,EACtC;AAED,QAAM,CAAC,MAAM,IAAI,IAAI;AACrB,QAAM,cAAc,YAAY,IAAI;AACpC,QAAM,cAAc,YAAY,IAAI;AACpC,gBAAc,WAAW;AACzB,gBAAc,WAAW;AAEzB,SAAO,MAAM,cAAc,aAAa,MAAM,KAAK,IAAI,IAAI,YAAY,IAAI,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC;AACpG;AAMO,SAAS,MAAM,KAAK,OAAO;AAChC,QAAM,OAAO,KAAK,IAAI,IAAI,KAAK;AAC/B,MAAI,SAAS,OAAO,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;AAChE,MAAI,MAAM,KAAK,WAAW,GAAG;AAC3B,aAAS,MAAM,QAAQ,EAAE;AAAA,EAC1B;AAED,SAAO;AACT;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/index.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/index.js.map
new file mode 100644
index 0000000..3b17bd5
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["uni_modules/uv-ui-tools/libs/function/index.js"],"sourcesContent":["import { number, empty } from './test.js'\r\nimport { round } from './digit.js'\r\n/**\r\n * @description 如果value小于min,取min;如果value大于max,取max\r\n * @param {number} min\r\n * @param {number} max\r\n * @param {number} value\r\n */\r\nfunction range(min = 0, max = 0, value = 0) {\r\n\treturn Math.max(min, Math.min(max, Number(value)))\r\n}\r\n\r\n/**\r\n * @description 用于获取用户传递值的px值 如果用户传递了\"xxpx\"或者\"xxrpx\",取出其数值部分,如果是\"xxxrpx\"还需要用过uni.upx2px进行转换\r\n * @param {number|string} value 用户传递值的px值\r\n * @param {boolean} unit\r\n * @returns {number|string}\r\n */\r\nfunction getPx(value, unit = false) {\r\n\tif (number(value)) {\r\n\t\treturn unit ? `${value}px` : Number(value)\r\n\t}\r\n\t// 如果带有rpx,先取出其数值部分,再转为px值\r\n\tif (/(rpx|upx)$/.test(value)) {\r\n\t\treturn unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value)))\r\n\t}\r\n\treturn unit ? `${parseInt(value)}px` : parseInt(value)\r\n}\r\n\r\n/**\r\n * @description 进行延时,以达到可以简写代码的目的 比如: await uni.$uv.sleep(20)将会阻塞20ms\r\n * @param {number} value 堵塞时间 单位ms 毫秒\r\n * @returns {Promise} 返回promise\r\n */\r\nfunction sleep(value = 30) {\r\n\treturn new Promise((resolve) => {\r\n\t\tsetTimeout(() => {\r\n\t\t\tresolve()\r\n\t\t}, value)\r\n\t})\r\n}\r\n/**\r\n * @description 运行期判断平台\r\n * @returns {string} 返回所在平台(小写)\r\n * @link 运行期判断平台 https://uniapp.dcloud.io/frame?id=判断平台\r\n */\r\nfunction os() {\r\n\treturn uni.getSystemInfoSync().platform.toLowerCase()\r\n}\r\n/**\r\n * @description 获取系统信息同步接口\r\n * @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync\r\n */\r\nfunction sys() {\r\n\treturn uni.getSystemInfoSync()\r\n}\r\n\r\n/**\r\n * @description 取一个区间数\r\n * @param {Number} min 最小值\r\n * @param {Number} max 最大值\r\n */\r\nfunction random(min, max) {\r\n\tif (min >= 0 && max > 0 && max >= min) {\r\n\t\tconst gab = max - min + 1\r\n\t\treturn Math.floor(Math.random() * gab + min)\r\n\t}\r\n\treturn 0\r\n}\r\n\r\n/**\r\n * @param {Number} len uuid的长度\r\n * @param {Boolean} firstU 将返回的首字母置为\"u\"\r\n * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制\r\n */\r\nfunction guid(len = 32, firstU = true, radix = null) {\r\n\tconst chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')\r\n\tconst uuid = []\r\n\tradix = radix || chars.length\r\n\r\n\tif (len) {\r\n\t\t// 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位\r\n\t\tfor (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]\r\n\t} else {\r\n\t\tlet r\r\n\t\t// rfc4122标准要求返回的uuid中,某些位为固定的字符\r\n\t\tuuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'\r\n\t\tuuid[14] = '4'\r\n\r\n\t\tfor (let i = 0; i < 36; i++) {\r\n\t\t\tif (!uuid[i]) {\r\n\t\t\t\tr = 0 | Math.random() * 16\r\n\t\t\t\tuuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class\r\n\tif (firstU) {\r\n\t\tuuid.shift()\r\n\t\treturn `u${uuid.join('')}`\r\n\t}\r\n\treturn uuid.join('')\r\n}\r\n\r\n/**\r\n* @description 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法\r\n this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx\r\n 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name\r\n 值(默认为undefined),就是查找最顶层的$parent\r\n* @param {string|undefined} name 父组件的参数名\r\n*/\r\nfunction $parent(name = undefined) {\r\n\tlet parent = this.$parent\r\n\t// 通过while历遍,这里主要是为了H5需要多层解析的问题\r\n\twhile (parent) {\r\n\t\t// 父组件\r\n\t\tif (parent.$options && parent.$options.name !== name) {\r\n\t\t\t// 如果组件的name不相等,继续上一级寻找\r\n\t\t\tparent = parent.$parent\r\n\t\t} else {\r\n\t\t\treturn parent\r\n\t\t}\r\n\t}\r\n\treturn false\r\n}\r\n\r\n/**\r\n * @description 样式转换\r\n * 对象转字符串,或者字符串转对象\r\n * @param {object | string} customStyle 需要转换的目标\r\n * @param {String} target 转换的目的,object-转为对象,string-转为字符串\r\n * @returns {object|string}\r\n */\r\nfunction addStyle(customStyle, target = 'object') {\r\n\t// 字符串转字符串,对象转对象情形,直接返回\r\n\tif (empty(customStyle) || typeof(customStyle) === 'object' && target === 'object' || target === 'string' &&\r\n\t\ttypeof(customStyle) === 'string') {\r\n\t\treturn customStyle\r\n\t}\r\n\t// 字符串转对象\r\n\tif (target === 'object') {\r\n\t\t// 去除字符串样式中的两端空格(中间的空格不能去掉,比如padding: 20px 0如果去掉了就错了),空格是无用的\r\n\t\tcustomStyle = trim(customStyle)\r\n\t\t// 根据\";\"将字符串转为数组形式\r\n\t\tconst styleArray = customStyle.split(';')\r\n\t\tconst style = {}\r\n\t\t// 历遍数组,拼接成对象\r\n\t\tfor (let i = 0; i < styleArray.length; i++) {\r\n\t\t\t// 'font-size:20px;color:red;',如此最后字符串有\";\"的话,会导致styleArray最后一个元素为空字符串,这里需要过滤\r\n\t\t\tif (styleArray[i]) {\r\n\t\t\t\tconst item = styleArray[i].split(':')\r\n\t\t\t\tstyle[trim(item[0])] = trim(item[1])\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn style\r\n\t}\r\n\t// 这里为对象转字符串形式\r\n\tlet string = ''\r\n\tfor (const i in customStyle) {\r\n\t\t// 驼峰转为中划线的形式,否则css内联样式,无法识别驼峰样式属性名\r\n\t\tconst key = i.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\t\tstring += `${key}:${customStyle[i]};`\r\n\t}\r\n\t// 去除两端空格\r\n\treturn trim(string)\r\n}\r\n\r\n/**\r\n * @description 添加单位,如果有rpx,upx,%,px等单位结尾或者值为auto,直接返回,否则加上px单位结尾\r\n * @param {string|number} value 需要添加单位的值\r\n * @param {string} unit 添加的单位名 比如px\r\n */\r\nfunction addUnit(value = 'auto', unit = uni?.$uv?.config?.unit ? uni?.$uv?.config?.unit : 'px') {\r\n\tvalue = String(value)\r\n\t// 用uvui内置验证规则中的number判断是否为数值\r\n\treturn number(value) ? `${value}${unit}` : value\r\n}\r\n\r\n/**\r\n * @description 深度克隆\r\n * @param {object} obj 需要深度克隆的对象\r\n * @param cache 缓存\r\n * @returns {*} 克隆后的对象或者原值(不是对象)\r\n */\r\nfunction deepClone(obj, cache = new WeakMap()) {\r\n\tif (obj === null || typeof obj !== 'object') return obj;\r\n\tif (cache.has(obj)) return cache.get(obj);\r\n\tlet clone;\r\n\tif (obj instanceof Date) {\r\n\t\tclone = new Date(obj.getTime());\r\n\t} else if (obj instanceof RegExp) {\r\n\t\tclone = new RegExp(obj);\r\n\t} else if (obj instanceof Map) {\r\n\t\tclone = new Map(Array.from(obj, ([key, value]) => [key, deepClone(value, cache)]));\r\n\t} else if (obj instanceof Set) {\r\n\t\tclone = new Set(Array.from(obj, value => deepClone(value, cache)));\r\n\t} else if (Array.isArray(obj)) {\r\n\t\tclone = obj.map(value => deepClone(value, cache));\r\n\t} else if (Object.prototype.toString.call(obj) === '[object Object]') {\r\n\t\tclone = Object.create(Object.getPrototypeOf(obj));\r\n\t\tcache.set(obj, clone);\r\n\t\tfor (const [key, value] of Object.entries(obj)) {\r\n\t\t\tclone[key] = deepClone(value, cache);\r\n\t\t}\r\n\t} else {\r\n\t\tclone = Object.assign({}, obj);\r\n\t}\r\n\tcache.set(obj, clone);\r\n\treturn clone;\r\n}\r\n\r\n/**\r\n * @description JS对象深度合并\r\n * @param {object} target 需要拷贝的对象\r\n * @param {object} source 拷贝的来源对象\r\n * @returns {object|boolean} 深度合并后的对象或者false(入参有不是对象)\r\n */\r\nfunction deepMerge(target = {}, source = {}) {\r\n\ttarget = deepClone(target)\r\n\tif (typeof target !== 'object' || target === null || typeof source !== 'object' || source === null) return target;\r\n\tconst merged = Array.isArray(target) ? target.slice() : Object.assign({}, target);\r\n\tfor (const prop in source) {\r\n\t\tif (!source.hasOwnProperty(prop)) continue;\r\n\t\tconst sourceValue = source[prop];\r\n\t\tconst targetValue = merged[prop];\r\n\t\tif (sourceValue instanceof Date) {\r\n\t\t\tmerged[prop] = new Date(sourceValue);\r\n\t\t} else if (sourceValue instanceof RegExp) {\r\n\t\t\tmerged[prop] = new RegExp(sourceValue);\r\n\t\t} else if (sourceValue instanceof Map) {\r\n\t\t\tmerged[prop] = new Map(sourceValue);\r\n\t\t} else if (sourceValue instanceof Set) {\r\n\t\t\tmerged[prop] = new Set(sourceValue);\r\n\t\t} else if (typeof sourceValue === 'object' && sourceValue !== null) {\r\n\t\t\tmerged[prop] = deepMerge(targetValue, sourceValue);\r\n\t\t} else {\r\n\t\t\tmerged[prop] = sourceValue;\r\n\t\t}\r\n\t}\r\n\treturn merged;\r\n}\r\n\r\n/**\r\n * @description error提示\r\n * @param {*} err 错误内容\r\n */\r\nfunction error(err) {\r\n\t// 开发环境才提示,生产环境不会提示\r\n\tif (process.env.NODE_ENV === 'development') {\r\n\t\tconsole.error(`uvui提示:${err}`)\r\n\t}\r\n}\r\n\r\n/**\r\n * @description 打乱数组\r\n * @param {array} array 需要打乱的数组\r\n * @returns {array} 打乱后的数组\r\n */\r\nfunction randomArray(array = []) {\r\n\t// 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0\r\n\treturn array.sort(() => Math.random() - 0.5)\r\n}\r\n\r\n// padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序\r\n// 所以这里做一个兼容polyfill的兼容处理\r\nif (!String.prototype.padStart) {\r\n\t// 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解\r\n\tString.prototype.padStart = function(maxLength, fillString = ' ') {\r\n\t\tif (Object.prototype.toString.call(fillString) !== '[object String]') {\r\n\t\t\tthrow new TypeError(\r\n\t\t\t\t'fillString must be String'\r\n\t\t\t)\r\n\t\t}\r\n\t\tconst str = this\r\n\t\t// 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉\r\n\t\tif (str.length >= maxLength) return String(str)\r\n\r\n\t\tconst fillLength = maxLength - str.length\r\n\t\tlet times = Math.ceil(fillLength / fillString.length)\r\n\t\twhile (times >>= 1) {\r\n\t\t\tfillString += fillString\r\n\t\t\tif (times === 1) {\r\n\t\t\t\tfillString += fillString\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn fillString.slice(0, fillLength) + str\r\n\t}\r\n}\r\n\r\n/**\r\n * @description 格式化时间\r\n * @param {String|Number} dateTime 需要格式化的时间戳\r\n * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 默认yyyy-mm-dd\r\n * @returns {string} 返回格式化后的字符串\r\n */\r\nfunction timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') {\r\n\tlet date\r\n\t// 若传入时间为假值,则取当前时间\r\n\tif (!dateTime) {\r\n\t\tdate = new Date()\r\n\t}\r\n\t// 若为unix秒时间戳,则转为毫秒时间戳(逻辑有点奇怪,但不敢改,以保证历史兼容)\r\n\telse if (/^\\d{10}$/.test(dateTime?.toString().trim())) {\r\n\t\tdate = new Date(dateTime * 1000)\r\n\t}\r\n\t// 若用户传入字符串格式时间戳,new Date无法解析,需做兼容\r\n\telse if (typeof dateTime === 'string' && /^\\d+$/.test(dateTime.trim())) {\r\n\t\tdate = new Date(Number(dateTime))\r\n\t}\r\n\t// 处理平台性差异,在Safari/Webkit中,new Date仅支持/作为分割符的字符串时间\r\n\t// 处理 '2022-07-10 01:02:03',跳过 '2022-07-10T01:02:03'\r\n\telse if (typeof dateTime === 'string' && dateTime.includes('-') && !dateTime.includes('T')) {\r\n\t\tdate = new Date(dateTime.replace(/-/g, '/'))\r\n\t}\r\n\t// 其他都认为符合 RFC 2822 规范\r\n\telse {\r\n\t\tdate = new Date(dateTime)\r\n\t}\r\n\r\n\tconst timeSource = {\r\n\t\t'y': date.getFullYear().toString(), // 年\r\n\t\t'm': (date.getMonth() + 1).toString().padStart(2, '0'), // 月\r\n\t\t'd': date.getDate().toString().padStart(2, '0'), // 日\r\n\t\t'h': date.getHours().toString().padStart(2, '0'), // 时\r\n\t\t'M': date.getMinutes().toString().padStart(2, '0'), // 分\r\n\t\t's': date.getSeconds().toString().padStart(2, '0') // 秒\r\n\t\t// 有其他格式化字符需求可以继续添加,必须转化成字符串\r\n\t}\r\n\r\n\tfor (const key in timeSource) {\r\n\t\tconst [ret] = new RegExp(`${key}+`).exec(formatStr) || []\r\n\t\tif (ret) {\r\n\t\t\t// 年可能只需展示两位\r\n\t\t\tconst beginIndex = key === 'y' && ret.length === 2 ? 2 : 0\r\n\t\t\tformatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))\r\n\t\t}\r\n\t}\r\n\r\n\treturn formatStr\r\n}\r\n\r\n/**\r\n * @description 时间戳转为多久之前\r\n * @param {String|Number} timestamp 时间戳\r\n * @param {String|Boolean} format\r\n * 格式化规则如果为时间格式字符串,超出一定时间范围,返回固定的时间格式;\r\n * 如果为布尔值false,无论什么时间,都返回多久以前的格式\r\n * @returns {string} 转化后的内容\r\n */\r\nfunction timeFrom(timestamp = null, format = 'yyyy-mm-dd') {\r\n\tif (timestamp == null) timestamp = Number(new Date())\r\n\ttimestamp = parseInt(timestamp)\r\n\t// 判断用户输入的时间戳是秒还是毫秒,一般前端js获取的时间戳是毫秒(13位),后端传过来的为秒(10位)\r\n\tif (timestamp.toString().length == 10) timestamp *= 1000\r\n\tlet timer = (new Date()).getTime() - timestamp\r\n\ttimer = parseInt(timer / 1000)\r\n\t// 如果小于5分钟,则返回\"刚刚\",其他以此类推\r\n\tlet tips = ''\r\n\tswitch (true) {\r\n\t\tcase timer < 300:\r\n\t\t\ttips = '刚刚'\r\n\t\t\tbreak\r\n\t\tcase timer >= 300 && timer < 3600:\r\n\t\t\ttips = `${parseInt(timer / 60)}分钟前`\r\n\t\t\tbreak\r\n\t\tcase timer >= 3600 && timer < 86400:\r\n\t\t\ttips = `${parseInt(timer / 3600)}小时前`\r\n\t\t\tbreak\r\n\t\tcase timer >= 86400 && timer < 2592000:\r\n\t\t\ttips = `${parseInt(timer / 86400)}天前`\r\n\t\t\tbreak\r\n\t\tdefault:\r\n\t\t\t// 如果format为false,则无论什么时间戳,都显示xx之前\r\n\t\t\tif (format === false) {\r\n\t\t\t\tif (timer >= 2592000 && timer < 365 * 86400) {\r\n\t\t\t\t\ttips = `${parseInt(timer / (86400 * 30))}个月前`\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttips = `${parseInt(timer / (86400 * 365))}年前`\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttips = timeFormat(timestamp, format)\r\n\t\t\t}\r\n\t}\r\n\treturn tips\r\n}\r\n\r\n/**\r\n * @description 去除空格\r\n * @param String str 需要去除空格的字符串\r\n * @param String pos both(左右)|left|right|all 默认both\r\n */\r\nfunction trim(str, pos = 'both') {\r\n\tstr = String(str)\r\n\tif (pos == 'both') {\r\n\t\treturn str.replace(/^\\s+|\\s+$/g, '')\r\n\t}\r\n\tif (pos == 'left') {\r\n\t\treturn str.replace(/^\\s*/, '')\r\n\t}\r\n\tif (pos == 'right') {\r\n\t\treturn str.replace(/(\\s*$)/g, '')\r\n\t}\r\n\tif (pos == 'all') {\r\n\t\treturn str.replace(/\\s+/g, '')\r\n\t}\r\n\treturn str\r\n}\r\n\r\n/**\r\n * @description 对象转url参数\r\n * @param {object} data,对象\r\n * @param {Boolean} isPrefix,是否自动加上\"?\"\r\n * @param {string} arrayFormat 规则 indices|brackets|repeat|comma\r\n */\r\nfunction queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {\r\n\tconst prefix = isPrefix ? '?' : ''\r\n\tconst _result = []\r\n\tif (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets'\r\n\tfor (const key in data) {\r\n\t\tconst value = data[key]\r\n\t\t// 去掉为空的参数\r\n\t\tif (['', undefined, null].indexOf(value) >= 0) {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\t// 如果值为数组,另行处理\r\n\t\tif (value.constructor === Array) {\r\n\t\t\t// e.g. {ids: [1, 2, 3]}\r\n\t\t\tswitch (arrayFormat) {\r\n\t\t\t\tcase 'indices':\r\n\t\t\t\t\t// 结果: ids[0]=1&ids[1]=2&ids[2]=3\r\n\t\t\t\t\tfor (let i = 0; i < value.length; i++) {\r\n\t\t\t\t\t\t_result.push(`${key}[${i}]=${value[i]}`)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 'brackets':\r\n\t\t\t\t\t// 结果: ids[]=1&ids[]=2&ids[]=3\r\n\t\t\t\t\tvalue.forEach((_value) => {\r\n\t\t\t\t\t\t_result.push(`${key}[]=${_value}`)\r\n\t\t\t\t\t})\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 'repeat':\r\n\t\t\t\t\t// 结果: ids=1&ids=2&ids=3\r\n\t\t\t\t\tvalue.forEach((_value) => {\r\n\t\t\t\t\t\t_result.push(`${key}=${_value}`)\r\n\t\t\t\t\t})\r\n\t\t\t\t\tbreak\r\n\t\t\t\tcase 'comma':\r\n\t\t\t\t\t// 结果: ids=1,2,3\r\n\t\t\t\t\tlet commaStr = ''\r\n\t\t\t\t\tvalue.forEach((_value) => {\r\n\t\t\t\t\t\tcommaStr += (commaStr ? ',' : '') + _value\r\n\t\t\t\t\t})\r\n\t\t\t\t\t_result.push(`${key}=${commaStr}`)\r\n\t\t\t\t\tbreak\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tvalue.forEach((_value) => {\r\n\t\t\t\t\t\t_result.push(`${key}[]=${_value}`)\r\n\t\t\t\t\t})\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t_result.push(`${key}=${value}`)\r\n\t\t}\r\n\t}\r\n\treturn _result.length ? prefix + _result.join('&') : ''\r\n}\r\n\r\n/**\r\n * 显示消息提示框\r\n * @param {String} title 提示的内容,长度与 icon 取值有关。\r\n * @param {Number} duration 提示的延迟时间,单位毫秒,默认:2000\r\n */\r\nfunction toast(title, duration = 2000) {\r\n\tuni.showToast({\r\n\t\ttitle: String(title),\r\n\t\ticon: 'none',\r\n\t\tduration\r\n\t})\r\n}\r\n\r\n/**\r\n * @description 根据主题type值,获取对应的图标\r\n * @param {String} type 主题名称,primary|info|error|warning|success\r\n * @param {boolean} fill 是否使用fill填充实体的图标\r\n */\r\nfunction type2icon(type = 'success', fill = false) {\r\n\t// 如果非预置值,默认为success\r\n\tif (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success'\r\n\tlet iconName = ''\r\n\t// 目前(2019-12-12),info和primary使用同一个图标\r\n\tswitch (type) {\r\n\t\tcase 'primary':\r\n\t\t\ticonName = 'info-circle'\r\n\t\t\tbreak\r\n\t\tcase 'info':\r\n\t\t\ticonName = 'info-circle'\r\n\t\t\tbreak\r\n\t\tcase 'error':\r\n\t\t\ticonName = 'close-circle'\r\n\t\t\tbreak\r\n\t\tcase 'warning':\r\n\t\t\ticonName = 'error-circle'\r\n\t\t\tbreak\r\n\t\tcase 'success':\r\n\t\t\ticonName = 'checkmark-circle'\r\n\t\t\tbreak\r\n\t\tdefault:\r\n\t\t\ticonName = 'checkmark-circle'\r\n\t}\r\n\t// 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的\r\n\tif (fill) iconName += '-fill'\r\n\treturn iconName\r\n}\r\n\r\n/**\r\n * @description 数字格式化\r\n * @param {number|string} number 要格式化的数字\r\n * @param {number} decimals 保留几位小数\r\n * @param {string} decimalPoint 小数点符号\r\n * @param {string} thousandsSeparator 千分位符号\r\n * @returns {string} 格式化后的数字\r\n */\r\nfunction priceFormat(number, decimals = 0, decimalPoint = '.', thousandsSeparator = ',') {\r\n\tnumber = (`${number}`).replace(/[^0-9+-Ee.]/g, '')\r\n\tconst n = !isFinite(+number) ? 0 : +number\r\n\tconst prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)\r\n\tconst sep = (typeof thousandsSeparator === 'undefined') ? ',' : thousandsSeparator\r\n\tconst dec = (typeof decimalPoint === 'undefined') ? '.' : decimalPoint\r\n\tlet s = ''\r\n\r\n\ts = (prec ? round(n, prec) + '' : `${Math.round(n)}`).split('.')\r\n\tconst re = /(-?\\d+)(\\d{3})/\r\n\twhile (re.test(s[0])) {\r\n\t\ts[0] = s[0].replace(re, `$1${sep}$2`)\r\n\t}\r\n\r\n\tif ((s[1] || '').length < prec) {\r\n\t\ts[1] = s[1] || ''\r\n\t\ts[1] += new Array(prec - s[1].length + 1).join('0')\r\n\t}\r\n\treturn s.join(dec)\r\n}\r\n\r\n/**\r\n * @description 获取duration值\r\n * 如果带有ms或者s直接返回,如果大于一定值,认为是ms单位,小于一定值,认为是s单位\r\n * 比如以30位阈值,那么300大于30,可以理解为用户想要的是300ms,而不是想花300s去执行一个动画\r\n * @param {String|number} value 比如: \"1s\"|\"100ms\"|1|100\r\n * @param {boolean} unit 提示: 如果是false 默认返回number\r\n * @return {string|number}\r\n */\r\nfunction getDuration(value, unit = true) {\r\n\tconst valueNum = parseInt(value)\r\n\tif (unit) {\r\n\t\tif (/s$/.test(value)) return value\r\n\t\treturn value > 30 ? `${value}ms` : `${value}s`\r\n\t}\r\n\tif (/ms$/.test(value)) return valueNum\r\n\tif (/s$/.test(value)) return valueNum > 30 ? valueNum : valueNum * 1000\r\n\treturn valueNum\r\n}\r\n\r\n/**\r\n * @description 日期的月或日补零操作\r\n * @param {String} value 需要补零的值\r\n */\r\nfunction padZero(value) {\r\n\treturn `00${value}`.slice(-2)\r\n}\r\n\r\n/**\r\n * @description 在uv-form的子组件内容发生变化,或者失去焦点时,尝试通知uv-form执行校验方法\r\n * @param {*} instance\r\n * @param {*} event\r\n */\r\nfunction formValidate(instance, event) {\r\n\tconst formItem = $parent.call(instance, 'uv-form-item')\r\n\tconst form = $parent.call(instance, 'uv-form')\r\n\t// 如果发生变化的input或者textarea等,其父组件中有uv-form-item或者uv-form等,就执行form的validate方法\r\n\t// 同时将form-item的pros传递给form,让其进行精确对象验证\r\n\tif (formItem && form) {\r\n\t\tform.validateField(formItem.prop, () => {}, event)\r\n\t}\r\n}\r\n\r\n/**\r\n * @description 获取某个对象下的属性,用于通过类似'a.b.c'的形式去获取一个对象的的属性的形式\r\n * @param {object} obj 对象\r\n * @param {string} key 需要获取的属性字段\r\n * @returns {*}\r\n */\r\nfunction getProperty(obj, key) {\r\n\tif (!obj) {\r\n\t\treturn\r\n\t}\r\n\tif (typeof key !== 'string' || key === '') {\r\n\t\treturn ''\r\n\t}\r\n\tif (key.indexOf('.') !== -1) {\r\n\t\tconst keys = key.split('.')\r\n\t\tlet firstObj = obj[keys[0]] || {}\r\n\r\n\t\tfor (let i = 1; i < keys.length; i++) {\r\n\t\t\tif (firstObj) {\r\n\t\t\t\tfirstObj = firstObj[keys[i]]\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn firstObj\r\n\t}\r\n\treturn obj[key]\r\n}\r\n\r\n/**\r\n * @description 设置对象的属性值,如果'a.b.c'的形式进行设置\r\n * @param {object} obj 对象\r\n * @param {string} key 需要设置的属性\r\n * @param {string} value 设置的值\r\n */\r\nfunction setProperty(obj, key, value) {\r\n\tif (!obj) {\r\n\t\treturn\r\n\t}\r\n\t// 递归赋值\r\n\tconst inFn = function(_obj, keys, v) {\r\n\t\t// 最后一个属性key\r\n\t\tif (keys.length === 1) {\r\n\t\t\t_obj[keys[0]] = v\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// 0~length-1个key\r\n\t\twhile (keys.length > 1) {\r\n\t\t\tconst k = keys[0]\r\n\t\t\tif (!_obj[k] || (typeof _obj[k] !== 'object')) {\r\n\t\t\t\t_obj[k] = {}\r\n\t\t\t}\r\n\t\t\tconst key = keys.shift()\r\n\t\t\t// 自调用判断是否存在属性,不存在则自动创建对象\r\n\t\t\tinFn(_obj[k], keys, v)\r\n\t\t}\r\n\t}\r\n\r\n\tif (typeof key !== 'string' || key === '') {\r\n\r\n\t} else if (key.indexOf('.') !== -1) { // 支持多层级赋值操作\r\n\t\tconst keys = key.split('.')\r\n\t\tinFn(obj, keys, value)\r\n\t} else {\r\n\t\tobj[key] = value\r\n\t}\r\n}\r\n\r\n/**\r\n * @description 获取当前页面路径\r\n */\r\nfunction page() {\r\n\tconst pages = getCurrentPages();\r\n\tconst route = pages[pages.length - 1]?.route;\r\n\t// 某些特殊情况下(比如页面进行redirectTo时的一些时机),pages可能为空数组\r\n\treturn `/${route ? route : ''}`\r\n}\r\n\r\n/**\r\n * @description 获取当前路由栈实例数组\r\n */\r\nfunction pages() {\r\n\tconst pages = getCurrentPages()\r\n\treturn pages\r\n}\r\n\r\n/**\r\n * 获取页面历史栈指定层实例\r\n * @param back {number} [0] - 0或者负数,表示获取历史栈的哪一层,0表示获取当前页面实例,-1 表示获取上一个页面实例。默认0。\r\n */\r\nfunction getHistoryPage(back = 0) {\r\n\tconst pages = getCurrentPages()\r\n\tconst len = pages.length\r\n\treturn pages[len - 1 + back]\r\n}\r\n\r\n\r\n\r\n/**\r\n * @description 修改uvui内置属性值\r\n * @param {object} props 修改内置props属性\r\n * @param {object} config 修改内置config属性\r\n * @param {object} color 修改内置color属性\r\n * @param {object} zIndex 修改内置zIndex属性\r\n */\r\nfunction setConfig({\r\n\tprops = {},\r\n\tconfig = {},\r\n\tcolor = {},\r\n\tzIndex = {}\r\n}) {\r\n\tconst {\r\n\t\tdeepMerge,\r\n\t} = uni.$uv\r\n\tuni.$uv.config = deepMerge(uni.$uv.config, config)\r\n\tuni.$uv.props = deepMerge(uni.$uv.props, props)\r\n\tuni.$uv.color = deepMerge(uni.$uv.color, color)\r\n\tuni.$uv.zIndex = deepMerge(uni.$uv.zIndex, zIndex)\r\n}\r\n\r\nexport {\r\n\trange,\r\n\tgetPx,\r\n\tsleep,\r\n\tos,\r\n\tsys,\r\n\trandom,\r\n\tguid,\r\n\t$parent,\r\n\taddStyle,\r\n\taddUnit,\r\n\tdeepClone,\r\n\tdeepMerge,\r\n\terror,\r\n\trandomArray,\r\n\ttimeFormat,\r\n\ttimeFrom,\r\n\ttrim,\r\n\tqueryParams,\r\n\ttoast,\r\n\ttype2icon,\r\n\tpriceFormat,\r\n\tgetDuration,\r\n\tpadZero,\r\n\tformValidate,\r\n\tgetProperty,\r\n\tsetProperty,\r\n\tpage,\r\n\tpages,\r\n\tgetHistoryPage,\r\n\tsetConfig\r\n}"],"names":["number","uni","empty","round","pages","deepMerge"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/test.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/test.js.map
new file mode 100644
index 0000000..8289f69
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/test.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"test.js","sources":["uni_modules/uv-ui-tools/libs/function/test.js"],"sourcesContent":["/**\r\n * 验证电子邮箱格式\r\n */\r\nfunction email(value) {\r\n return /^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证手机格式\r\n */\r\nfunction mobile(value) {\r\n return /^1([3589]\\d|4[5-9]|6[1-2,4-7]|7[0-8])\\d{8}$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证URL格式\r\n */\r\nfunction url(value) {\r\n return /^((https|http|ftp|rtsp|mms):\\/\\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\\/?)|(\\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\\/?)$/\r\n .test(value)\r\n}\r\n\r\n/**\r\n * 验证日期格式\r\n */\r\nfunction date(value) {\r\n if (!value) return false\r\n // 判断是否数值或者字符串数值(意味着为时间戳),转为数值,否则new Date无法识别字符串时间戳\r\n if (number(value)) value = +value\r\n return !/Invalid|NaN/.test(new Date(value).toString())\r\n}\r\n\r\n/**\r\n * 验证ISO类型的日期格式\r\n */\r\nfunction dateISO(value) {\r\n return /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证十进制数字\r\n */\r\nfunction number(value) {\r\n return /^[\\+-]?(\\d+\\.?\\d*|\\.\\d+|\\d\\.\\d+e\\+\\d+)$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证字符串\r\n */\r\nfunction string(value) {\r\n return typeof value === 'string'\r\n}\r\n\r\n/**\r\n * 验证整数\r\n */\r\nfunction digits(value) {\r\n return /^\\d+$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证身份证号码\r\n */\r\nfunction idCard(value) {\r\n return /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/.test(\r\n value\r\n )\r\n}\r\n\r\n/**\r\n * 是否车牌号\r\n */\r\nfunction carNo(value) {\r\n // 新能源车牌\r\n const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/\r\n // 旧车牌\r\n const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/\r\n if (value.length === 7) {\r\n return creg.test(value)\r\n } if (value.length === 8) {\r\n return xreg.test(value)\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * 金额,只允许2位小数\r\n */\r\nfunction amount(value) {\r\n // 金额,只允许保留两位小数\r\n return /^[1-9]\\d*(,\\d{3})*(\\.\\d{1,2})?$|^0\\.\\d{1,2}$/.test(value)\r\n}\r\n\r\n/**\r\n * 中文\r\n */\r\nfunction chinese(value) {\r\n const reg = /^[\\u4e00-\\u9fa5]+$/gi\r\n return reg.test(value)\r\n}\r\n\r\n/**\r\n * 只能输入字母\r\n */\r\nfunction letter(value) {\r\n return /^[a-zA-Z]*$/.test(value)\r\n}\r\n\r\n/**\r\n * 只能是字母或者数字\r\n */\r\nfunction enOrNum(value) {\r\n // 英文或者数字\r\n const reg = /^[0-9a-zA-Z]*$/g\r\n return reg.test(value)\r\n}\r\n\r\n/**\r\n * 验证是否包含某个值\r\n */\r\nfunction contains(value, param) {\r\n return value.indexOf(param) >= 0\r\n}\r\n\r\n/**\r\n * 验证一个值范围[min, max]\r\n */\r\nfunction range(value, param) {\r\n return value >= param[0] && value <= param[1]\r\n}\r\n\r\n/**\r\n * 验证一个长度范围[min, max]\r\n */\r\nfunction rangeLength(value, param) {\r\n return value.length >= param[0] && value.length <= param[1]\r\n}\r\n\r\n/**\r\n * 是否固定电话\r\n */\r\nfunction landline(value) {\r\n const reg = /^\\d{3,4}-\\d{7,8}(-\\d{3,4})?$/\r\n return reg.test(value)\r\n}\r\n\r\n/**\r\n * 判断是否为空\r\n */\r\nfunction empty(value) {\r\n switch (typeof value) {\r\n case 'undefined':\r\n return true\r\n case 'string':\r\n if (value.replace(/(^[ \\t\\n\\r]*)|([ \\t\\n\\r]*$)/g, '').length == 0) return true\r\n break\r\n case 'boolean':\r\n if (!value) return true\r\n break\r\n case 'number':\r\n if (value === 0 || isNaN(value)) return true\r\n break\r\n case 'object':\r\n if (value === null || value.length === 0) return true\r\n for (const i in value) {\r\n return false\r\n }\r\n return true\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * 是否json字符串\r\n */\r\nfunction jsonString(value) {\r\n if (typeof value === 'string') {\r\n try {\r\n const obj = JSON.parse(value)\r\n if (typeof obj === 'object' && obj) {\r\n return true\r\n }\r\n return false\r\n } catch (e) {\r\n return false\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\r\n * 是否数组\r\n */\r\nfunction array(value) {\r\n if (typeof Array.isArray === 'function') {\r\n return Array.isArray(value)\r\n }\r\n return Object.prototype.toString.call(value) === '[object Array]'\r\n}\r\n\r\n/**\r\n * 是否对象\r\n */\r\nfunction object(value) {\r\n return Object.prototype.toString.call(value) === '[object Object]'\r\n}\r\n\r\n/**\r\n * 是否短信验证码\r\n */\r\nfunction code(value, len = 6) {\r\n return new RegExp(`^\\\\d{${len}}$`).test(value)\r\n}\r\n\r\n/**\r\n * 是否函数方法\r\n * @param {Object} value\r\n */\r\nfunction func(value) {\r\n return typeof value === 'function'\r\n}\r\n\r\n/**\r\n * 是否promise对象\r\n * @param {Object} value\r\n */\r\nfunction promise(value) {\r\n return object(value) && func(value.then) && func(value.catch)\r\n}\r\n\r\n/** 是否图片格式\r\n * @param {Object} value\r\n */\r\nfunction image(value) {\r\n const newValue = value.split('?')[0]\r\n const IMAGE_REGEXP = /\\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i\r\n return IMAGE_REGEXP.test(newValue)\r\n}\r\n\r\n/**\r\n * 是否视频格式\r\n * @param {Object} value\r\n */\r\nfunction video(value) {\r\n const VIDEO_REGEXP = /\\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i\r\n return VIDEO_REGEXP.test(value)\r\n}\r\n\r\n/**\r\n * 是否为正则对象\r\n * @param {Object}\r\n * @return {Boolean}\r\n */\r\nfunction regExp(o) {\r\n return o && Object.prototype.toString.call(o) === '[object RegExp]'\r\n}\r\n\r\nexport {\r\n email,\r\n mobile,\r\n url,\r\n date,\r\n dateISO,\r\n number,\r\n digits,\r\n idCard,\r\n carNo,\r\n amount,\r\n chinese,\r\n letter,\r\n enOrNum,\r\n contains,\r\n range,\r\n rangeLength,\r\n empty,\r\n jsonString,\r\n landline,\r\n object,\r\n array,\r\n code,\r\n func,\r\n promise,\r\n video,\r\n image,\r\n regExp,\r\n string\r\n}\r\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/throttle.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/throttle.js.map
new file mode 100644
index 0000000..628f1e8
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/function/throttle.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"throttle.js","sources":["uni_modules/uv-ui-tools/libs/function/throttle.js"],"sourcesContent":["let timer; let\n flag\r\n/**\r\n * 节流原理:在一定时间内,只能触发一次\r\n *\r\n * @param {Function} func 要执行的回调函数\r\n * @param {Number} wait 延时的时间\r\n * @param {Boolean} immediate 是否立即执行\r\n * @return null\r\n */\r\nfunction throttle(func, wait = 500, immediate = true) {\r\n if (immediate) {\r\n if (!flag) {\r\n flag = true\r\n // 如果是立即执行,则在wait毫秒内开始时执行\r\n typeof func === 'function' && func()\r\n timer = setTimeout(() => {\r\n flag = false\r\n }, wait)\r\n }\r\n } else if (!flag) {\r\n flag = true\r\n // 如果是非立即执行,则在wait毫秒内的结束处执行\r\n timer = setTimeout(() => {\r\n flag = false\r\n typeof func === 'function' && func()\r\n }, wait)\r\n }\r\n}\r\nexport default throttle\r\n"],"names":[],"mappings":";AAAW,IACP;AASJ,SAAS,SAAS,MAAM,OAAO,KAAK,YAAY,MAAM;AAClD,MAAI,WAAW;AACX,QAAI,CAAC,MAAM;AACP,aAAO;AAEP,aAAO,SAAS,cAAc,KAAM;AAC5B,iBAAW,MAAM;AACrB,eAAO;AAAA,MACV,GAAE,IAAI;AAAA,IACV;AAAA,EACT,WAAe,CAAC,MAAM;AACd,WAAO;AAEC,eAAW,MAAM;AACrB,aAAO;AACP,aAAO,SAAS,cAAc,KAAM;AAAA,IACvC,GAAE,IAAI;AAAA,EACV;AACL;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mixin.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mixin.js.map
new file mode 100644
index 0000000..f475524
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mixin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mixin.js","sources":["uni_modules/uv-ui-tools/libs/mixin/mixin.js"],"sourcesContent":["import * as index from '../function/index.js';\r\nimport * as test from '../function/test.js';\r\nimport route from '../util/route.js';\r\nimport debounce from '../function/debounce.js';\r\nimport throttle from '../function/throttle.js';\r\nexport default {\r\n\t// 定义每个组件都可能需要用到的外部样式以及类名\r\n\tprops: {\r\n\t\t// 每个组件都有的父组件传递的样式,可以为字符串或者对象形式\r\n\t\tcustomStyle: {\r\n\t\t\ttype: [Object, String],\r\n\t\t\tdefault: () => ({})\r\n\t\t},\r\n\t\tcustomClass: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 跳转的页面路径\r\n\t\turl: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: ''\r\n\t\t},\r\n\t\t// 页面跳转的类型\r\n\t\tlinkType: {\r\n\t\t\ttype: String,\r\n\t\t\tdefault: 'navigateTo'\r\n\t\t}\r\n\t},\r\n\tdata() {\r\n\t\treturn {}\r\n\t},\r\n\tonLoad() {\r\n\t\t// getRect挂载到$uv上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出\r\n\t\tthis.$uv.getRect = this.$uvGetRect\r\n\t},\r\n\tcreated() {\r\n\t\t// 组件当中,只有created声明周期,为了能在组件使用,故也在created中将方法挂载到$uv\r\n\t\tthis.$uv.getRect = this.$uvGetRect\r\n\t},\r\n\tcomputed: {\r\n\t\t$uv() {\r\n\t\t\treturn {\r\n\t\t\t\t...index,\r\n\t\t\t\ttest,\r\n\t\t\t\troute,\r\n\t\t\t\tdebounce,\r\n\t\t\t\tthrottle,\r\n\t\t\t\tunit: uni?.$uv?.config?.unit\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t * 生成bem规则类名\r\n\t\t * 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class=\"[bem()]\"的形式进行同用\r\n\t\t * 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式\r\n\t\t * @param {String} name 组件名称\r\n\t\t * @param {Array} fixed 一直会存在的类名\r\n\t\t * @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名\r\n\t\t * @returns {Array|string}\r\n\t\t */\r\n\t\tbem() {\r\n\t\t\treturn function(name, fixed, change) {\r\n\t\t\t\t// 类名前缀\r\n\t\t\t\tconst prefix = `uv-${name}--`\r\n\t\t\t\tconst classes = {}\r\n\t\t\t\tif (fixed) {\r\n\t\t\t\t\tfixed.map((item) => {\r\n\t\t\t\t\t\t// 这里的类名,会一直存在\r\n\t\t\t\t\t\tclasses[prefix + this[item]] = true\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\tif (change) {\r\n\t\t\t\t\tchange.map((item) => {\r\n\t\t\t\t\t\t// 这里的类名,会根据this[item]的值为true或者false,而进行添加或者移除某一个类\r\n\t\t\t\t\t\tthis[item] ? (classes[prefix + item] = this[item]) : (delete classes[prefix + item])\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\treturn Object.keys(classes)\r\n\t\t\t\t\t// 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有\",\",而导致失效\r\n\t\t\t\t\t// #ifdef MP-ALIPAY || MP-TOUTIAO || MP-LARK || MP-BAIDU\r\n\t\t\t\t\t.join(' ')\r\n\t\t\t\t// #endif\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tmethods: {\r\n\t\t// 跳转某一个页面\r\n\t\topenPage(urlKey = 'url') {\r\n\t\t\tconst url = this[urlKey]\r\n\t\t\tif (url) {\r\n\t\t\t\t// 执行类似uni.navigateTo的方法\r\n\t\t\t\tuni[this.linkType]({\r\n\t\t\t\t\turl\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t},\r\n\t\t// 查询节点信息\r\n\t\t// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)\r\n\t\t// 解决办法为在组件根部再套一个没有任何作用的view元素\r\n\t\t$uvGetRect(selector, all) {\r\n\t\t\treturn new Promise((resolve) => {\r\n\t\t\t\tuni.createSelectorQuery()\r\n\t\t\t\t\t.in(this)[all ? 'selectAll' : 'select'](selector)\r\n\t\t\t\t\t.boundingClientRect((rect) => {\r\n\t\t\t\t\t\tif (all && Array.isArray(rect) && rect.length) {\r\n\t\t\t\t\t\t\tresolve(rect)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!all && rect) {\r\n\t\t\t\t\t\t\tresolve(rect)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.exec()\r\n\t\t\t})\r\n\t\t},\r\n\t\tgetParentData(parentName = '') {\r\n\t\t\t// 避免在created中去定义parent变量\r\n\t\t\tif (!this.parent) this.parent = {}\r\n\t\t\t// 这里的本质原理是,通过获取父组件实例(也即类似uv-radio的父组件uv-radio-group的this)\r\n\t\t\t// 将父组件this中对应的参数,赋值给本组件(uv-radio的this)的parentData对象中对应的属性\r\n\t\t\t// 之所以需要这么做,是因为所有端中,头条小程序不支持通过this.parent.xxx去监听父组件参数的变化\r\n\t\t\t// 此处并不会自动更新子组件的数据,而是依赖父组件uv-radio-group去监听data的变化,手动调用更新子组件的方法去重新获取\r\n\t\t\tthis.parent = this.$uv.$parent.call(this, parentName)\r\n\t\t\tif (this.parent.children) {\r\n\t\t\t\t// 如果父组件的children不存在本组件的实例,才将本实例添加到父组件的children中\r\n\t\t\t\tthis.parent.children.indexOf(this) === -1 && this.parent.children.push(this)\r\n\t\t\t}\r\n\t\t\tif (this.parent && this.parentData) {\r\n\t\t\t\t// 历遍parentData中的属性,将parent中的同名属性赋值给parentData\r\n\t\t\t\tObject.keys(this.parentData).map((key) => {\r\n\t\t\t\t\tthis.parentData[key] = this.parent[key]\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t},\r\n\t\t// 阻止事件冒泡\r\n\t\tpreventEvent(e) {\r\n\t\t\te && typeof(e.stopPropagation) === 'function' && e.stopPropagation()\r\n\t\t},\r\n\t\t// 空操作\r\n\t\tnoop(e) {\r\n\t\t\tthis.preventEvent(e)\r\n\t\t}\r\n\t},\r\n\tonReachBottom() {\r\n\t\tuni.$emit('uvOnReachBottom')\r\n\t},\r\n\tbeforeDestroy() {\r\n\t\t// 判断当前页面是否存在parent和chldren,一般在checkbox和checkbox-group父子联动的场景会有此情况\r\n\t\t// 组件销毁时,移除子组件在父组件children数组中的实例,释放资源,避免数据混乱\r\n\t\tif (this.parent && test.array(this.parent.children)) {\r\n\t\t\t// 组件销毁时,移除父组件中的children数组中对应的实例\r\n\t\t\tconst childrenList = this.parent.children\r\n\t\t\tchildrenList.map((child, index) => {\r\n\t\t\t\t// 如果相等,则移除\r\n\t\t\t\tif (child === this) {\r\n\t\t\t\t\tchildrenList.splice(index, 1)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t},\r\n\t// 兼容vue3\r\n\tunmounted() {\r\n\t\tif (this.parent && test.array(this.parent.children)) {\r\n\t\t\t// 组件销毁时,移除父组件中的children数组中对应的实例\r\n\t\t\tconst childrenList = this.parent.children\r\n\t\t\tchildrenList.map((child, index) => {\r\n\t\t\t\t// 如果相等,则移除\r\n\t\t\t\tif (child === this) {\r\n\t\t\t\t\tchildrenList.splice(index, 1)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}"],"names":["index","test","route","debounce","throttle","uni","test.array"],"mappings":"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"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js.map
new file mode 100644
index 0000000..a7031ea
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"mpMixin.js","sources":["uni_modules/uv-ui-tools/libs/mixin/mpMixin.js"],"sourcesContent":["export default {\r\n // #ifdef MP-WEIXIN\r\n // 将自定义节点设置成虚拟的(去掉自定义组件包裹层),更加接近Vue组件的表现,能更好的使用flex属性\r\n options: {\r\n virtualHost: true\r\n }\r\n // #endif\r\n}"],"names":[],"mappings":";AAAA,MAAe,UAAA;AAAA;AAAA,EAGX,SAAS;AAAA,IACL,aAAa;AAAA,EAChB;AAEL;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/util/route.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/util/route.js.map
new file mode 100644
index 0000000..b49f9a3
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uv-ui-tools/libs/util/route.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"route.js","sources":["uni_modules/uv-ui-tools/libs/util/route.js"],"sourcesContent":["/**\r\n * 路由跳转方法,该方法相对于直接使用uni.xxx的好处是使用更加简单快捷\r\n * 并且带有路由拦截功能\r\n */\r\nimport { queryParams, deepMerge, page } from '@/uni_modules/uv-ui-tools/libs/function/index.js'\r\nclass Router {\r\n\tconstructor() {\r\n\t\t// 原始属性定义\r\n\t\tthis.config = {\r\n\t\t\ttype: 'navigateTo',\r\n\t\t\turl: '',\r\n\t\t\tdelta: 1, // navigateBack页面后退时,回退的层数\r\n\t\t\tparams: {}, // 传递的参数\r\n\t\t\tanimationType: 'pop-in', // 窗口动画,只在APP有效\r\n\t\t\tanimationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效\r\n\t\t\tintercept: false ,// 是否需要拦截\r\n\t\t\tevents: {} // 页面间通信接口,用于监听被打开页面发送到当前页面的数据。hbuilderx 2.8.9+ 开始支持。\r\n\t\t}\r\n\t\t// 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文\r\n\t\t// 这里在构造函数中进行this绑定\r\n\t\tthis.route = this.route.bind(this)\r\n\t}\r\n\r\n\t// 判断url前面是否有\"/\",如果没有则加上,否则无法跳转\r\n\taddRootPath(url) {\r\n\t\treturn url[0] === '/' ? url : `/${url}`\r\n\t}\r\n\r\n\t// 整合路由参数\r\n\tmixinParam(url, params) {\r\n\t\turl = url && this.addRootPath(url)\r\n\r\n\t\t// 使用正则匹配,主要依据是判断是否有\"/\",\"?\",\"=\"等,如“/page/index/index?name=mary\"\r\n\t\t// 如果有url中有get参数,转换后无需带上\"?\"\r\n\t\tlet query = ''\r\n\t\tif (/.*\\/.*\\?.*=.*/.test(url)) {\r\n\t\t\t// object对象转为get类型的参数\r\n\t\t\tquery = queryParams(params, false)\r\n\t\t\t// 因为已有get参数,所以后面拼接的参数需要带上\"&\"隔开\r\n\t\t\treturn url += `&${query}`\r\n\t\t}\r\n\t\t// 直接拼接参数,因为此处url中没有后面的query参数,也就没有\"?/&\"之类的符号\r\n\t\tquery = queryParams(params)\r\n\t\treturn url += query\r\n\t}\r\n\r\n\t// 对外的方法名称\r\n\tasync route(options = {}, params = {}) {\r\n\t\t// 合并用户的配置和内部的默认配置\r\n\t\tlet mergeConfig = {}\r\n\r\n\t\tif (typeof options === 'string') {\r\n\t\t\t// 如果options为字符串,则为route(url, params)的形式\r\n\t\t\tmergeConfig.url = this.mixinParam(options, params)\r\n\t\t\tmergeConfig.type = 'navigateTo'\r\n\t\t} else {\r\n\t\t\tmergeConfig = deepMerge(this.config, options)\r\n\t\t\t// 否则正常使用mergeConfig中的url和params进行拼接\r\n\t\t\tmergeConfig.url = this.mixinParam(options.url, options.params)\r\n\t\t}\r\n\t\t// 如果本次跳转的路径和本页面路径一致,不执行跳转,防止用户快速点击跳转按钮,造成多次跳转同一个页面的问题\r\n\t\tif (mergeConfig.url === page()) return\r\n\r\n\t\tif (params.intercept) {\r\n\t\t\tmergeConfig.intercept = params.intercept\r\n\t\t}\r\n\t\t// params参数也带给拦截器\r\n\t\tmergeConfig.params = params\r\n\t\t// 合并内外部参数\r\n\t\tmergeConfig = deepMerge(this.config, mergeConfig)\r\n\t\t// 判断用户是否定义了拦截器\r\n\t\tif (typeof mergeConfig.intercept === 'function') {\r\n\t\t\t// 定一个promise,根据用户执行resolve(true)或者resolve(false)来决定是否进行路由跳转\r\n\t\t\tconst isNext = await new Promise((resolve, reject) => {\r\n\t\t\t\tmergeConfig.intercept(mergeConfig, resolve)\r\n\t\t\t})\r\n\t\t\t// 如果isNext为true,则执行路由跳转\r\n\t\t\tisNext && this.openPage(mergeConfig)\r\n\t\t} else {\r\n\t\t\tthis.openPage(mergeConfig)\r\n\t\t}\r\n\t}\r\n\r\n\t// 执行路由跳转\r\n\topenPage(config) {\r\n\t\t// 解构参数\r\n\t\tconst {\r\n\t\t\turl,\r\n\t\t\ttype,\r\n\t\t\tdelta,\r\n\t\t\tanimationType,\r\n\t\t\tanimationDuration,\r\n\t\t\tevents\r\n\t\t} = config\r\n\t\tif (config.type == 'navigateTo' || config.type == 'to') {\r\n\t\t\tuni.navigateTo({\r\n\t\t\t\turl,\r\n\t\t\t\tanimationType,\r\n\t\t\t\tanimationDuration,\r\n\t\t\t\tevents\r\n\t\t\t})\r\n\t\t}\r\n\t\tif (config.type == 'redirectTo' || config.type == 'redirect') {\r\n\t\t\tuni.redirectTo({\r\n\t\t\t\turl\r\n\t\t\t})\r\n\t\t}\r\n\t\tif (config.type == 'switchTab' || config.type == 'tab') {\r\n\t\t\tuni.switchTab({\r\n\t\t\t\turl\r\n\t\t\t})\r\n\t\t}\r\n\t\tif (config.type == 'reLaunch' || config.type == 'launch') {\r\n\t\t\tuni.reLaunch({\r\n\t\t\t\turl\r\n\t\t\t})\r\n\t\t}\r\n\t\tif (config.type == 'navigateBack' || config.type == 'back') {\r\n\t\t\tuni.navigateBack({\r\n\t\t\t\tdelta\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default (new Router()).route"],"names":["queryParams","deepMerge","page","uni"],"mappings":";;;AAKA,MAAM,OAAO;AAAA,EACZ,cAAc;AAEb,SAAK,SAAS;AAAA,MACb,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA;AAAA,MACP,QAAQ,CAAE;AAAA;AAAA,MACV,eAAe;AAAA;AAAA,MACf,mBAAmB;AAAA;AAAA,MACnB,WAAW;AAAA;AAAA,MACX,QAAQ,CAAE;AAAA;AAAA,IACV;AAGD,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EACjC;AAAA;AAAA,EAGD,YAAY,KAAK;AAChB,WAAO,IAAI,CAAC,MAAM,MAAM,MAAM,IAAI,GAAG;AAAA,EACrC;AAAA;AAAA,EAGD,WAAW,KAAK,QAAQ;AACvB,UAAM,OAAO,KAAK,YAAY,GAAG;AAIjC,QAAI,QAAQ;AACZ,QAAI,gBAAgB,KAAK,GAAG,GAAG;AAE9B,cAAQA,0CAAAA,YAAY,QAAQ,KAAK;AAEjC,aAAO,OAAO,IAAI,KAAK;AAAA,IACvB;AAED,YAAQA,0CAAW,YAAC,MAAM;AAC1B,WAAO,OAAO;AAAA,EACd;AAAA;AAAA,EAGD,MAAM,MAAM,UAAU,IAAI,SAAS,CAAA,GAAI;AAEtC,QAAI,cAAc,CAAE;AAEpB,QAAI,OAAO,YAAY,UAAU;AAEhC,kBAAY,MAAM,KAAK,WAAW,SAAS,MAAM;AACjD,kBAAY,OAAO;AAAA,IACtB,OAAS;AACN,oBAAcC,0CAAS,UAAC,KAAK,QAAQ,OAAO;AAE5C,kBAAY,MAAM,KAAK,WAAW,QAAQ,KAAK,QAAQ,MAAM;AAAA,IAC7D;AAED,QAAI,YAAY,QAAQC,0CAAI,KAAA;AAAI;AAEhC,QAAI,OAAO,WAAW;AACrB,kBAAY,YAAY,OAAO;AAAA,IAC/B;AAED,gBAAY,SAAS;AAErB,kBAAcD,0CAAS,UAAC,KAAK,QAAQ,WAAW;AAEhD,QAAI,OAAO,YAAY,cAAc,YAAY;AAEhD,YAAM,SAAS,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrD,oBAAY,UAAU,aAAa,OAAO;AAAA,MAC9C,CAAI;AAED,gBAAU,KAAK,SAAS,WAAW;AAAA,IACtC,OAAS;AACN,WAAK,SAAS,WAAW;AAAA,IACzB;AAAA,EACD;AAAA;AAAA,EAGD,SAAS,QAAQ;AAEhB,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH,IAAM;AACJ,QAAI,OAAO,QAAQ,gBAAgB,OAAO,QAAQ,MAAM;AACvDE,oBAAAA,MAAI,WAAW;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAI;AAAA,IACD;AACD,QAAI,OAAO,QAAQ,gBAAgB,OAAO,QAAQ,YAAY;AAC7DA,oBAAAA,MAAI,WAAW;AAAA,QACd;AAAA,MACJ,CAAI;AAAA,IACD;AACD,QAAI,OAAO,QAAQ,eAAe,OAAO,QAAQ,OAAO;AACvDA,oBAAAA,MAAI,UAAU;AAAA,QACb;AAAA,MACJ,CAAI;AAAA,IACD;AACD,QAAI,OAAO,QAAQ,cAAc,OAAO,QAAQ,UAAU;AACzDA,oBAAAA,MAAI,SAAS;AAAA,QACZ;AAAA,MACJ,CAAI;AAAA,IACD;AACD,QAAI,OAAO,QAAQ,kBAAkB,OAAO,QAAQ,QAAQ;AAC3DA,oBAAAA,MAAI,aAAa;AAAA,QAChB;AAAA,MACJ,CAAI;AAAA,IACD;AAAA,EACD;AACF;AAEA,MAAA,QAAgB,IAAI,OAAM,EAAI;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/utils/common.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/common.js.map
new file mode 100644
index 0000000..3e85324
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/common.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"common.js","sources":["utils/common.js"],"sourcesContent":["export function compareTimestamp(timestamp) {\n const currentTime = new Date().getTime();\n const timeDiff = currentTime - timestamp;\n\n if (timeDiff < 60000) { \n return '1分钟内';\n } else if (timeDiff < 3600000) {\n return Math.floor(timeDiff / 60000) + '分钟';\n } else if (timeDiff < 86400000) {\n return Math.floor(timeDiff / 3600000) + '小时';\n } else if (timeDiff < 2592000000) {\n return Math.floor(timeDiff / 86400000) + '天';\n } else if (timeDiff < 7776000000) {\n return Math.floor(timeDiff / 2592000000) + '月';\n } else {\n return null;\n }\n}\n\n\nexport function gotoHome(){\n\tuni.showModal({\n\t\ttitle:\"提示\",\n\t\tcontent:\"页面有误将返回首页\",\n\t\tshowCancel:false,\n\t\tsuccess: (res) => {\n\t\t\tif(res.confirm){\n\t\t\t\tuni.reLaunch({\n\t\t\t\t\turl:\"/pages/index/index\"\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t})\n}\r\n\r\n\n"],"names":[],"mappings":";;AAAO,SAAS,iBAAiB,WAAW;AAC1C,QAAM,eAAc,oBAAI,KAAM,GAAC,QAAO;AACtC,QAAM,WAAW,cAAc;AAE/B,MAAI,WAAW,KAAO;AACpB,WAAO;AAAA,EACX,WAAa,WAAW,MAAS;AAC7B,WAAO,KAAK,MAAM,WAAW,GAAK,IAAI;AAAA,EAC1C,WAAa,WAAW,OAAU;AAC9B,WAAO,KAAK,MAAM,WAAW,IAAO,IAAI;AAAA,EAC5C,WAAa,WAAW,QAAY;AAChC,WAAO,KAAK,MAAM,WAAW,KAAQ,IAAI;AAAA,EAC7C,WAAa,WAAW,QAAY;AAChC,WAAO,KAAK,MAAM,WAAW,MAAU,IAAI;AAAA,EAC/C,OAAS;AACL,WAAO;AAAA,EACR;AACH;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/utils/request.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/request.js.map
new file mode 100644
index 0000000..a571704
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/request.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"request.js","sources":["utils/request.js"],"sourcesContent":["\r\nconst BASE_URL = \"https://tea.qingnian8.com/api/bizhi\";\r\n// config是形参,然后对其进行解构\r\nexport function request(config={}){\r\n\tlet {\r\n\t\turl,\r\n\t\tdata={},\r\n\t\tmethod=\"GET\",\r\n\t\theader={}\r\n\t} = config\r\n\t\r\n\t// 对url进行拼接\r\n\turl = BASE_URL + url\r\n\t//下面这种写法是针对header里面的属性进行赋值\r\n\theader['access-key'] = \"888888\"\r\n\t//你要加一个token的话,就可以按下面的步骤进行\r\n\t// header['token'] = '11212212'\r\n\t\r\n\treturn new Promise((resolve,reject)=>{\r\n\t\tuni.request({\r\n\t\t\t//url属性接收外面传入的url,可以进行简写url:url, ==》 url\r\n\t\t\turl,\r\n\t\t\tdata,\r\n\t\t\tmethod,\r\n\t\t\theader,\r\n\t\t\tsuccess:res =>{\r\n\t\t\t\tif(res.data.errCode === 0){\r\n\t\t\t\t\t//res返回是全部信息,但是我们要的是res.data就可以了,\r\n\t\t\t\t\t// resolve(res)\r\n\t\t\t\t\tresolve(res.data)\r\n\t\t\t\t}else if(res.data.errCode === 400){\r\n\t\t\t\t\tuni.showModal({\r\n\t\t\t\t\t\ttitle:\"错误提示\",\r\n\t\t\t\t\t\tcontent:res.data.errMsg,\r\n\t\t\t\t\t\t// 不展示“取消”键\r\n\t\t\t\t\t\tshowCancel:false\r\n\t\t\t\t\t})\r\n\t\t\t\t\treject(res.data)\r\n\t\t\t\t}else{\r\n\t\t\t\t\tuni.showToast({\r\n\t\t\t\t\t\ttitle:res.data.errMsg,\r\n\t\t\t\t\t\ticon:\"none\"\r\n\t\t\t\t\t})\r\n\t\t\t\t\treject(res.data)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfail:err=>{\r\n\t\t\t\treject(err)\r\n\t\t\t}\r\n\t\t})\r\n\t})\r\n}"],"names":["uni"],"mappings":";;AACA,MAAM,WAAW;AAEV,SAAS,QAAQ,SAAO,IAAG;AACjC,MAAI;AAAA,IACH;AAAA,IACA,OAAK,CAAE;AAAA,IACP,SAAO;AAAA,IACP,SAAO,CAAE;AAAA,EACX,IAAK;AAGJ,QAAM,WAAW;AAEjB,SAAO,YAAY,IAAI;AAIvB,SAAO,IAAI,QAAQ,CAAC,SAAQ,WAAS;AACpCA,kBAAAA,MAAI,QAAQ;AAAA;AAAA,MAEX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAQ,SAAM;AACb,YAAG,IAAI,KAAK,YAAY,GAAE;AAGzB,kBAAQ,IAAI,IAAI;AAAA,QAChB,WAAQ,IAAI,KAAK,YAAY,KAAI;AACjCA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAM;AAAA,YACN,SAAQ,IAAI,KAAK;AAAA;AAAA,YAEjB,YAAW;AAAA,UACjB,CAAM;AACD,iBAAO,IAAI,IAAI;AAAA,QACpB,OAAS;AACJA,wBAAAA,MAAI,UAAU;AAAA,YACb,OAAM,IAAI,KAAK;AAAA,YACf,MAAK;AAAA,UACX,CAAM;AACD,iBAAO,IAAI,IAAI;AAAA,QACf;AAAA,MACD;AAAA,MACD,MAAK,SAAK;AACT,eAAO,GAAG;AAAA,MACV;AAAA,IACJ,CAAG;AAAA,EACH,CAAE;AACF;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/utils/system.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/system.js.map
new file mode 100644
index 0000000..c01bcca
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/utils/system.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"system.js","sources":["utils/system.js"],"sourcesContent":["//获取状态栏高度\r\nconst SYSTEM_INFO = uni.getSystemInfoSync();\r\n// 获取高度失败的话就返回默认值 0\r\n// 获取状态栏高度\r\nexport const getStatusBarHeight = ()=> SYSTEM_INFO.statusBarHeight || 0\r\n\r\n//获取预览页面的状态栏\r\nexport const getPreviewBarHeight = ()=>{\r\n\t// 下面是获取胶囊按钮全部信息\r\n\t// let MENU_BUTTON = uni.getMenuButtonBoundingClientRect(); \r\n\t\r\n\t//如果有胶囊按钮,我们才进行操作,否则返回一个固定的值\r\n\tif(uni.getMenuButtonBoundingClientRect){\r\n\t\t//我们使用解构的方法来选取所需的特定内容就可以了\r\n\t\tlet {top} = uni.getMenuButtonBoundingClientRect(); \r\n\t\t// 标题栏的高度\r\n\t\tlet PreviewBarHeight = top\r\n\t\treturn PreviewBarHeight\r\n\t}\r\n\telse{\r\n\t\treturn 40;\r\n\t}\r\n}\r\n\r\n//获取标题栏高度\r\nexport const getTitleBarHeight = ()=>{\r\n\t// 下面是获取胶囊按钮全部信息\r\n\t// let MENU_BUTTON = uni.getMenuButtonBoundingClientRect(); \r\n\t\r\n\t//如果有胶囊按钮,我们才进行操作,否则返回一个固定的值\r\n\tif(uni.getMenuButtonBoundingClientRect){\r\n\t\t//我们使用解构的方法来选取所需的特定内容就可以了\r\n\t\tlet {top,height} = uni.getMenuButtonBoundingClientRect(); \r\n\t\t// 标题栏的高度\r\n\t\tlet titleBarHeight = (top - getStatusBarHeight())*2 + height\r\n\t\treturn titleBarHeight\r\n\t}\r\n\telse{\r\n\t\treturn 40;\r\n\t}\r\n\r\n}\r\n\r\n//获取整个导航栏高度,用于fill栏\r\nexport const getNavBarHeight = ()=> getTitleBarHeight() + getStatusBarHeight();"],"names":["uni"],"mappings":";;AACA,MAAM,cAAcA,cAAAA,MAAI;AAGZ,MAAC,qBAAqB,MAAK,YAAY,mBAAmB;AAG1D,MAAC,sBAAsB,MAAI;AAKtC,MAAGA,cAAAA,MAAI,iCAAgC;AAEtC,QAAI,EAAC,IAAG,IAAIA,cAAG,MAAC,gCAA+B;AAE/C,QAAI,mBAAmB;AACvB,WAAO;AAAA,EACP,OACG;AACH,WAAO;AAAA,EACP;AACF;AAGY,MAAC,oBAAoB,MAAI;AAKpC,MAAGA,cAAAA,MAAI,iCAAgC;AAEtC,QAAI,EAAC,KAAI,OAAM,IAAIA,cAAG,MAAC,gCAA+B;AAEtD,QAAI,kBAAkB,MAAM,mBAAoB,KAAE,IAAI;AACtD,WAAO;AAAA,EACP,OACG;AACH,WAAO;AAAA,EACP;AAEF;AAGY,MAAC,kBAAkB,MAAK,kBAAiB,IAAK,mBAAkB;;;;;"}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/api/apis.js b/unpackage/dist/dev/mp-weixin/api/apis.js
new file mode 100644
index 0000000..7e9d11b
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/api/apis.js
@@ -0,0 +1,83 @@
+"use strict";
+const utils_request = require("../utils/request.js");
+function apiGetBanner() {
+ return utils_request.request({
+ url: "/homeBanner"
+ });
+}
+function apiGetDayRandom() {
+ return utils_request.request({ url: "/randomWall" });
+}
+function apiGetNotice(data = {}) {
+ return utils_request.request({
+ url: "/wallNewsList",
+ data
+ });
+}
+function apiGetClassify(data = {}) {
+ return utils_request.request({
+ url: "/classify",
+ data
+ });
+}
+function apiGetClassList(data = {}) {
+ return utils_request.request({
+ url: "/wallList",
+ data
+ });
+}
+function apiGetSetScore(data = {}) {
+ return utils_request.request({
+ url: "/setupScore",
+ data
+ });
+}
+function apiWriteDownload(data = {}) {
+ return utils_request.request({
+ url: "/downloadWall",
+ data
+ });
+}
+function apiDetailWall(data = {}) {
+ return utils_request.request({
+ url: "/detailWall",
+ data
+ });
+}
+function apiUserInfo(data = {}) {
+ return utils_request.request({
+ url: "/userInfo",
+ data
+ });
+}
+function apiGetHistoryList(data = {}) {
+ return utils_request.request({
+ url: "/userWallList",
+ data
+ });
+}
+function apiNoticeDetail(data = {}) {
+ return utils_request.request({
+ url: "/wallNewsDetail",
+ data
+ });
+}
+function apiSearchData(data = {}) {
+ return utils_request.request({
+ url: "/searchWall",
+ data
+ });
+}
+exports.apiDetailWall = apiDetailWall;
+exports.apiGetBanner = apiGetBanner;
+exports.apiGetClassList = apiGetClassList;
+exports.apiGetClassify = apiGetClassify;
+exports.apiGetDayRandom = apiGetDayRandom;
+exports.apiGetHistoryList = apiGetHistoryList;
+exports.apiGetNotice = apiGetNotice;
+exports.apiGetSetScore = apiGetSetScore;
+exports.apiNoticeDetail = apiNoticeDetail;
+exports.apiSearchData = apiSearchData;
+exports.apiUserInfo = apiUserInfo;
+exports.apiWriteDownload = apiWriteDownload;
+//# sourceMappingURL=../../.sourcemap/mp-weixin/api/apis.js.map
diff --git a/unpackage/dist/dev/mp-weixin/app.js b/unpackage/dist/dev/mp-weixin/app.js
new file mode 100644
index 0000000..56d38db
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/app.js
@@ -0,0 +1,34 @@
+"use strict";
+Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
+const common_vendor = require("./common/vendor.js");
+if (!Math) {
+ "./pages/index/index.js";
+ "./components/components.js";
+ "./pages/classify/classify.js";
+ "./pages/user/user.js";
+ "./pages/classlist/classlist.js";
+ "./pages/preview/preview.js";
+ "./pages/notice/notice.js";
+ "./pages/notice/detail.js";
+ "./pages/search/search.js";
+}
+const _sfc_main = {
+ onLaunch: function() {
+ common_vendor.index.__f__("log", "at App.vue:4", "App Launch");
+ },
+ onShow: function() {
+ common_vendor.index.__f__("log", "at App.vue:7", "App Show");
+ },
+ onHide: function() {
+ common_vendor.index.__f__("log", "at App.vue:10", "App Hide");
+ }
+};
+function createApp() {
+ const app = common_vendor.createSSRApp(_sfc_main);
+ return {
+ app
+ };
+}
+createApp().app.mount("#app");
+exports.createApp = createApp;
+//# sourceMappingURL=../.sourcemap/mp-weixin/app.js.map
diff --git a/unpackage/dist/dev/mp-weixin/app.json b/unpackage/dist/dev/mp-weixin/app.json
new file mode 100644
index 0000000..2bec4bb
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/app.json
@@ -0,0 +1,44 @@
+{
+ "pages": [
+ "pages/index/index",
+ "components/components",
+ "pages/classify/classify",
+ "pages/user/user",
+ "pages/classlist/classlist",
+ "pages/preview/preview",
+ "pages/notice/notice",
+ "pages/notice/detail",
+ "pages/search/search"
+ ],
+ "window": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "咸虾米壁纸",
+ "navigationBarBackgroundColor": "#fff",
+ "backgroundColor": "#F8F8F8"
+ },
+ "tabBar": {
+ "color": "#9799a5",
+ "selectedColor": "#28b389",
+ "list": [
+ {
+ "text": "推荐",
+ "pagePath": "pages/index/index",
+ "iconPath": "/static/images/tabBar/home.png",
+ "selectedIconPath": "/static/images/tabBar/home-h.png"
+ },
+ {
+ "text": "分类",
+ "pagePath": "pages/classify/classify",
+ "iconPath": "/static/images/tabBar/classify.png",
+ "selectedIconPath": "/static/images/tabBar/classify-h.png"
+ },
+ {
+ "text": "我的",
+ "pagePath": "pages/user/user",
+ "iconPath": "/static/images/tabBar/user.png",
+ "selectedIconPath": "/static/images/tabBar/user-h.png"
+ }
+ ]
+ },
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/app.wxss b/unpackage/dist/dev/mp-weixin/app.wxss
new file mode 100644
index 0000000..0282f8c
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/app.wxss
@@ -0,0 +1,39 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+/*每个页面公共css */
+view, swiper, swiper-item {
+ box-sizing: border-box;
+}
+.pageBg {
+ background: linear-gradient(to bottom, transparent 0%, #fff 400rpx), linear-gradient(to right, #beecd8 20%, #F4E2D8);
+ min-height: 80vh;
+}
+.loadingLayout {
+ padding: 30rpx 0;
+}
+.safe-area-inset-bottom {
+ height: env(safe-area-inset-bottom);
+}page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
\ No newline at end of file
diff --git a/unpackage/dist/dev/mp-weixin/assets/more.14a1a72b.jpg b/unpackage/dist/dev/mp-weixin/assets/more.14a1a72b.jpg
new file mode 100644
index 0000000..8cc2ff3
Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/assets/more.14a1a72b.jpg differ
diff --git a/unpackage/dist/dev/mp-weixin/common/assets.js b/unpackage/dist/dev/mp-weixin/common/assets.js
new file mode 100644
index 0000000..d6ad004
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/common/assets.js
@@ -0,0 +1,6 @@
+"use strict";
+const _imports_0$1 = "/static/images/xxmLogo.png";
+const _imports_0 = "/assets/more.14a1a72b.jpg";
+exports._imports_0 = _imports_0$1;
+exports._imports_0$1 = _imports_0;
+//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map
diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js
new file mode 100644
index 0000000..1a01024
--- /dev/null
+++ b/unpackage/dist/dev/mp-weixin/common/vendor.js
@@ -0,0 +1,8288 @@
+"use strict";
+/**
+* @vue/shared v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function makeMap(str, expectsLowerCase) {
+ const set2 = new Set(str.split(","));
+ return expectsLowerCase ? (val) => set2.has(val.toLowerCase()) : (val) => set2.has(val);
+}
+const EMPTY_OBJ = Object.freeze({});
+const EMPTY_ARR = Object.freeze([]);
+const NOOP = () => {
+};
+const NO = () => false;
+const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
+(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
+const isModelListener = (key) => key.startsWith("onUpdate:");
+const extend = Object.assign;
+const remove = (arr, el) => {
+ const i = arr.indexOf(el);
+ if (i > -1) {
+ arr.splice(i, 1);
+ }
+};
+const hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+const hasOwn$1 = (val, key) => hasOwnProperty$2.call(val, key);
+const isArray = Array.isArray;
+const isMap = (val) => toTypeString(val) === "[object Map]";
+const isSet = (val) => toTypeString(val) === "[object Set]";
+const isFunction = (val) => typeof val === "function";
+const isString = (val) => typeof val === "string";
+const isSymbol = (val) => typeof val === "symbol";
+const isObject$1 = (val) => val !== null && typeof val === "object";
+const isPromise = (val) => {
+ return (isObject$1(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
+};
+const objectToString = Object.prototype.toString;
+const toTypeString = (value) => objectToString.call(value);
+const toRawType = (value) => {
+ return toTypeString(value).slice(8, -1);
+};
+const isPlainObject = (val) => toTypeString(val) === "[object Object]";
+const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
+const isReservedProp = /* @__PURE__ */ makeMap(
+ // the leading comma is intentional so empty string "" is also included
+ ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
+);
+const isBuiltInDirective = /* @__PURE__ */ makeMap(
+ "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
+);
+const cacheStringFunction = (fn) => {
+ const cache = /* @__PURE__ */ Object.create(null);
+ return (str) => {
+ const hit = cache[str];
+ return hit || (cache[str] = fn(str));
+ };
+};
+const camelizeRE = /-(\w)/g;
+const camelize = cacheStringFunction((str) => {
+ return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
+});
+const hyphenateRE = /\B([A-Z])/g;
+const hyphenate = cacheStringFunction(
+ (str) => str.replace(hyphenateRE, "-$1").toLowerCase()
+);
+const capitalize = cacheStringFunction((str) => {
+ return str.charAt(0).toUpperCase() + str.slice(1);
+});
+const toHandlerKey = cacheStringFunction((str) => {
+ const s2 = str ? `on${capitalize(str)}` : ``;
+ return s2;
+});
+const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
+const invokeArrayFns$1 = (fns, arg) => {
+ for (let i = 0; i < fns.length; i++) {
+ fns[i](arg);
+ }
+};
+const def = (obj, key, value) => {
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ enumerable: false,
+ value
+ });
+};
+const looseToNumber = (val) => {
+ const n2 = parseFloat(val);
+ return isNaN(n2) ? val : n2;
+};
+function normalizeStyle(value) {
+ if (isArray(value)) {
+ const res = {};
+ for (let i = 0; i < value.length; i++) {
+ const item = value[i];
+ const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
+ if (normalized) {
+ for (const key in normalized) {
+ res[key] = normalized[key];
+ }
+ }
+ }
+ return res;
+ } else if (isString(value) || isObject$1(value)) {
+ return value;
+ }
+}
+const listDelimiterRE = /;(?![^(]*\))/g;
+const propertyDelimiterRE = /:([^]+)/;
+const styleCommentRE = /\/\*[^]*?\*\//g;
+function parseStringStyle(cssText) {
+ const ret = {};
+ cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
+ if (item) {
+ const tmp = item.split(propertyDelimiterRE);
+ tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
+ }
+ });
+ return ret;
+}
+function normalizeClass(value) {
+ let res = "";
+ if (isString(value)) {
+ res = value;
+ } else if (isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ const normalized = normalizeClass(value[i]);
+ if (normalized) {
+ res += normalized + " ";
+ }
+ }
+ } else if (isObject$1(value)) {
+ for (const name in value) {
+ if (value[name]) {
+ res += name + " ";
+ }
+ }
+ }
+ return res.trim();
+}
+const toDisplayString = (val) => {
+ return isString(val) ? val : val == null ? "" : isArray(val) || isObject$1(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
+};
+const replacer = (_key, val) => {
+ if (val && val.__v_isRef) {
+ return replacer(_key, val.value);
+ } else if (isMap(val)) {
+ return {
+ [`Map(${val.size})`]: [...val.entries()].reduce(
+ (entries, [key, val2], i) => {
+ entries[stringifySymbol(key, i) + " =>"] = val2;
+ return entries;
+ },
+ {}
+ )
+ };
+ } else if (isSet(val)) {
+ return {
+ [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))
+ };
+ } else if (isSymbol(val)) {
+ return stringifySymbol(val);
+ } else if (isObject$1(val) && !isArray(val) && !isPlainObject(val)) {
+ return String(val);
+ }
+ return val;
+};
+const stringifySymbol = (v, i = "") => {
+ var _a;
+ return isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v;
+};
+const isObject = (val) => val !== null && typeof val === "object";
+const defaultDelimiters = ["{", "}"];
+class BaseFormatter {
+ constructor() {
+ this._caches = /* @__PURE__ */ Object.create(null);
+ }
+ interpolate(message, values, delimiters = defaultDelimiters) {
+ if (!values) {
+ return [message];
+ }
+ let tokens = this._caches[message];
+ if (!tokens) {
+ tokens = parse(message, delimiters);
+ this._caches[message] = tokens;
+ }
+ return compile$1(tokens, values);
+ }
+}
+const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
+const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
+function parse(format, [startDelimiter, endDelimiter]) {
+ const tokens = [];
+ let position = 0;
+ let text = "";
+ while (position < format.length) {
+ let char = format[position++];
+ if (char === startDelimiter) {
+ if (text) {
+ tokens.push({ type: "text", value: text });
+ }
+ text = "";
+ let sub = "";
+ char = format[position++];
+ while (char !== void 0 && char !== endDelimiter) {
+ sub += char;
+ char = format[position++];
+ }
+ const isClosed = char === endDelimiter;
+ const type = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown";
+ tokens.push({ value: sub, type });
+ } else {
+ text += char;
+ }
+ }
+ text && tokens.push({ type: "text", value: text });
+ return tokens;
+}
+function compile$1(tokens, values) {
+ const compiled = [];
+ let index2 = 0;
+ const mode = Array.isArray(values) ? "list" : isObject(values) ? "named" : "unknown";
+ if (mode === "unknown") {
+ return compiled;
+ }
+ while (index2 < tokens.length) {
+ const token = tokens[index2];
+ switch (token.type) {
+ case "text":
+ compiled.push(token.value);
+ break;
+ case "list":
+ compiled.push(values[parseInt(token.value, 10)]);
+ break;
+ case "named":
+ if (mode === "named") {
+ compiled.push(values[token.value]);
+ } else {
+ {
+ console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);
+ }
+ }
+ break;
+ case "unknown":
+ {
+ console.warn(`Detect 'unknown' type of token!`);
+ }
+ break;
+ }
+ index2++;
+ }
+ return compiled;
+}
+const LOCALE_ZH_HANS = "zh-Hans";
+const LOCALE_ZH_HANT = "zh-Hant";
+const LOCALE_EN = "en";
+const LOCALE_FR = "fr";
+const LOCALE_ES = "es";
+const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
+const defaultFormatter = new BaseFormatter();
+function include(str, parts) {
+ return !!parts.find((part) => str.indexOf(part) !== -1);
+}
+function startsWith(str, parts) {
+ return parts.find((part) => str.indexOf(part) === 0);
+}
+function normalizeLocale(locale, messages) {
+ if (!locale) {
+ return;
+ }
+ locale = locale.trim().replace(/_/g, "-");
+ if (messages && messages[locale]) {
+ return locale;
+ }
+ locale = locale.toLowerCase();
+ if (locale === "chinese") {
+ return LOCALE_ZH_HANS;
+ }
+ if (locale.indexOf("zh") === 0) {
+ if (locale.indexOf("-hans") > -1) {
+ return LOCALE_ZH_HANS;
+ }
+ if (locale.indexOf("-hant") > -1) {
+ return LOCALE_ZH_HANT;
+ }
+ if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
+ return LOCALE_ZH_HANT;
+ }
+ return LOCALE_ZH_HANS;
+ }
+ let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
+ if (messages && Object.keys(messages).length > 0) {
+ locales = Object.keys(messages);
+ }
+ const lang = startsWith(locale, locales);
+ if (lang) {
+ return lang;
+ }
+}
+class I18n {
+ constructor({ locale, fallbackLocale, messages, watcher, formater: formater2 }) {
+ this.locale = LOCALE_EN;
+ this.fallbackLocale = LOCALE_EN;
+ this.message = {};
+ this.messages = {};
+ this.watchers = [];
+ if (fallbackLocale) {
+ this.fallbackLocale = fallbackLocale;
+ }
+ this.formater = formater2 || defaultFormatter;
+ this.messages = messages || {};
+ this.setLocale(locale || LOCALE_EN);
+ if (watcher) {
+ this.watchLocale(watcher);
+ }
+ }
+ setLocale(locale) {
+ const oldLocale = this.locale;
+ this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
+ if (!this.messages[this.locale]) {
+ this.messages[this.locale] = {};
+ }
+ this.message = this.messages[this.locale];
+ if (oldLocale !== this.locale) {
+ this.watchers.forEach((watcher) => {
+ watcher(this.locale, oldLocale);
+ });
+ }
+ }
+ getLocale() {
+ return this.locale;
+ }
+ watchLocale(fn) {
+ const index2 = this.watchers.push(fn) - 1;
+ return () => {
+ this.watchers.splice(index2, 1);
+ };
+ }
+ add(locale, message, override = true) {
+ const curMessages = this.messages[locale];
+ if (curMessages) {
+ if (override) {
+ Object.assign(curMessages, message);
+ } else {
+ Object.keys(message).forEach((key) => {
+ if (!hasOwn(curMessages, key)) {
+ curMessages[key] = message[key];
+ }
+ });
+ }
+ } else {
+ this.messages[locale] = message;
+ }
+ }
+ f(message, values, delimiters) {
+ return this.formater.interpolate(message, values, delimiters).join("");
+ }
+ t(key, locale, values) {
+ let message = this.message;
+ if (typeof locale === "string") {
+ locale = normalizeLocale(locale, this.messages);
+ locale && (message = this.messages[locale]);
+ } else {
+ values = locale;
+ }
+ if (!hasOwn(message, key)) {
+ console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);
+ return key;
+ }
+ return this.formater.interpolate(message[key], values).join("");
+ }
+}
+function watchAppLocale(appVm, i18n) {
+ if (appVm.$watchLocale) {
+ appVm.$watchLocale((newLocale) => {
+ i18n.setLocale(newLocale);
+ });
+ } else {
+ appVm.$watch(() => appVm.$locale, (newLocale) => {
+ i18n.setLocale(newLocale);
+ });
+ }
+}
+function getDefaultLocale() {
+ if (typeof index !== "undefined" && index.getLocale) {
+ return index.getLocale();
+ }
+ if (typeof global !== "undefined" && global.getLocale) {
+ return global.getLocale();
+ }
+ return LOCALE_EN;
+}
+function initVueI18n(locale, messages = {}, fallbackLocale, watcher) {
+ if (typeof locale !== "string") {
+ const options = [
+ messages,
+ locale
+ ];
+ locale = options[0];
+ messages = options[1];
+ }
+ if (typeof locale !== "string") {
+ locale = getDefaultLocale();
+ }
+ if (typeof fallbackLocale !== "string") {
+ fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN;
+ }
+ const i18n = new I18n({
+ locale,
+ fallbackLocale,
+ messages,
+ watcher
+ });
+ let t2 = (key, values) => {
+ if (typeof getApp !== "function") {
+ t2 = function(key2, values2) {
+ return i18n.t(key2, values2);
+ };
+ } else {
+ let isWatchedAppLocale = false;
+ t2 = function(key2, values2) {
+ const appVm = getApp().$vm;
+ if (appVm) {
+ appVm.$locale;
+ if (!isWatchedAppLocale) {
+ isWatchedAppLocale = true;
+ watchAppLocale(appVm, i18n);
+ }
+ }
+ return i18n.t(key2, values2);
+ };
+ }
+ return t2(key, values);
+ };
+ return {
+ i18n,
+ f(message, values, delimiters) {
+ return i18n.f(message, values, delimiters);
+ },
+ t(key, values) {
+ return t2(key, values);
+ },
+ add(locale2, message, override = true) {
+ return i18n.add(locale2, message, override);
+ },
+ watch(fn) {
+ return i18n.watchLocale(fn);
+ },
+ getLocale() {
+ return i18n.getLocale();
+ },
+ setLocale(newLocale) {
+ return i18n.setLocale(newLocale);
+ }
+ };
+}
+const SLOT_DEFAULT_NAME = "d";
+const ON_SHOW = "onShow";
+const ON_HIDE = "onHide";
+const ON_LAUNCH = "onLaunch";
+const ON_ERROR = "onError";
+const ON_THEME_CHANGE = "onThemeChange";
+const ON_PAGE_NOT_FOUND = "onPageNotFound";
+const ON_UNHANDLE_REJECTION = "onUnhandledRejection";
+const ON_EXIT = "onExit";
+const ON_LOAD = "onLoad";
+const ON_READY = "onReady";
+const ON_UNLOAD = "onUnload";
+const ON_INIT = "onInit";
+const ON_SAVE_EXIT_STATE = "onSaveExitState";
+const ON_RESIZE = "onResize";
+const ON_BACK_PRESS = "onBackPress";
+const ON_PAGE_SCROLL = "onPageScroll";
+const ON_TAB_ITEM_TAP = "onTabItemTap";
+const ON_REACH_BOTTOM = "onReachBottom";
+const ON_PULL_DOWN_REFRESH = "onPullDownRefresh";
+const ON_SHARE_TIMELINE = "onShareTimeline";
+const ON_SHARE_CHAT = "onShareChat";
+const ON_ADD_TO_FAVORITES = "onAddToFavorites";
+const ON_SHARE_APP_MESSAGE = "onShareAppMessage";
+const ON_NAVIGATION_BAR_BUTTON_TAP = "onNavigationBarButtonTap";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = "onNavigationBarSearchInputClicked";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = "onNavigationBarSearchInputChanged";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = "onNavigationBarSearchInputConfirmed";
+const ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = "onNavigationBarSearchInputFocusChanged";
+const VIRTUAL_HOST_STYLE = "virtualHostStyle";
+const VIRTUAL_HOST_CLASS = "virtualHostClass";
+const VIRTUAL_HOST_HIDDEN = "virtualHostHidden";
+const VIRTUAL_HOST_ID = "virtualHostId";
+function hasLeadingSlash(str) {
+ return str.indexOf("/") === 0;
+}
+function addLeadingSlash(str) {
+ return hasLeadingSlash(str) ? str : "/" + str;
+}
+const invokeArrayFns = (fns, arg) => {
+ let ret;
+ for (let i = 0; i < fns.length; i++) {
+ ret = fns[i](arg);
+ }
+ return ret;
+};
+function once(fn, ctx = null) {
+ let res;
+ return (...args) => {
+ if (fn) {
+ res = fn.apply(ctx, args);
+ fn = null;
+ }
+ return res;
+ };
+}
+function getValueByDataPath(obj, path) {
+ if (!isString(path)) {
+ return;
+ }
+ path = path.replace(/\[(\d+)\]/g, ".$1");
+ const parts = path.split(".");
+ let key = parts[0];
+ if (!obj) {
+ obj = {};
+ }
+ if (parts.length === 1) {
+ return obj[key];
+ }
+ return getValueByDataPath(obj[key], parts.slice(1).join("."));
+}
+function sortObject(obj) {
+ let sortObj = {};
+ if (isPlainObject(obj)) {
+ Object.keys(obj).sort().forEach((key) => {
+ const _key = key;
+ sortObj[_key] = obj[_key];
+ });
+ }
+ return !Object.keys(sortObj) ? obj : sortObj;
+}
+const customizeRE = /:/g;
+function customizeEvent(str) {
+ return camelize(str.replace(customizeRE, "-"));
+}
+const encode = encodeURIComponent;
+function stringifyQuery(obj, encodeStr = encode) {
+ const res = obj ? Object.keys(obj).map((key) => {
+ let val = obj[key];
+ if (typeof val === void 0 || val === null) {
+ val = "";
+ } else if (isPlainObject(val)) {
+ val = JSON.stringify(val);
+ }
+ return encodeStr(key) + "=" + encodeStr(val);
+ }).filter((x) => x.length > 0).join("&") : null;
+ return res ? `?${res}` : "";
+}
+const PAGE_HOOKS = [
+ ON_INIT,
+ ON_LOAD,
+ ON_SHOW,
+ ON_HIDE,
+ ON_UNLOAD,
+ ON_BACK_PRESS,
+ ON_PAGE_SCROLL,
+ ON_TAB_ITEM_TAP,
+ ON_REACH_BOTTOM,
+ ON_PULL_DOWN_REFRESH,
+ ON_SHARE_TIMELINE,
+ ON_SHARE_APP_MESSAGE,
+ ON_SHARE_CHAT,
+ ON_ADD_TO_FAVORITES,
+ ON_SAVE_EXIT_STATE,
+ ON_NAVIGATION_BAR_BUTTON_TAP,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
+];
+function isRootHook(name) {
+ return PAGE_HOOKS.indexOf(name) > -1;
+}
+const UniLifecycleHooks = [
+ ON_SHOW,
+ ON_HIDE,
+ ON_LAUNCH,
+ ON_ERROR,
+ ON_THEME_CHANGE,
+ ON_PAGE_NOT_FOUND,
+ ON_UNHANDLE_REJECTION,
+ ON_EXIT,
+ ON_INIT,
+ ON_LOAD,
+ ON_READY,
+ ON_UNLOAD,
+ ON_RESIZE,
+ ON_BACK_PRESS,
+ ON_PAGE_SCROLL,
+ ON_TAB_ITEM_TAP,
+ ON_REACH_BOTTOM,
+ ON_PULL_DOWN_REFRESH,
+ ON_SHARE_TIMELINE,
+ ON_ADD_TO_FAVORITES,
+ ON_SHARE_APP_MESSAGE,
+ ON_SHARE_CHAT,
+ ON_SAVE_EXIT_STATE,
+ ON_NAVIGATION_BAR_BUTTON_TAP,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
+ ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
+];
+const MINI_PROGRAM_PAGE_RUNTIME_HOOKS = /* @__PURE__ */ (() => {
+ return {
+ onPageScroll: 1,
+ onShareAppMessage: 1 << 1,
+ onShareTimeline: 1 << 2
+ };
+})();
+function isUniLifecycleHook(name, value, checkType = true) {
+ if (checkType && !isFunction(value)) {
+ return false;
+ }
+ if (UniLifecycleHooks.indexOf(name) > -1) {
+ return true;
+ } else if (name.indexOf("on") === 0) {
+ return true;
+ }
+ return false;
+}
+let vueApp;
+const createVueAppHooks = [];
+function onCreateVueApp(hook) {
+ if (vueApp) {
+ return hook(vueApp);
+ }
+ createVueAppHooks.push(hook);
+}
+function invokeCreateVueAppHook(app) {
+ vueApp = app;
+ createVueAppHooks.forEach((hook) => hook(app));
+}
+const invokeCreateErrorHandler = once((app, createErrorHandler2) => {
+ return createErrorHandler2(app);
+});
+const E = function() {
+};
+E.prototype = {
+ _id: 1,
+ on: function(name, callback, ctx) {
+ var e2 = this.e || (this.e = {});
+ (e2[name] || (e2[name] = [])).push({
+ fn: callback,
+ ctx,
+ _id: this._id
+ });
+ return this._id++;
+ },
+ once: function(name, callback, ctx) {
+ var self2 = this;
+ function listener() {
+ self2.off(name, listener);
+ callback.apply(ctx, arguments);
+ }
+ listener._ = callback;
+ return this.on(name, listener, ctx);
+ },
+ emit: function(name) {
+ var data = [].slice.call(arguments, 1);
+ var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
+ var i = 0;
+ var len = evtArr.length;
+ for (i; i < len; i++) {
+ evtArr[i].fn.apply(evtArr[i].ctx, data);
+ }
+ return this;
+ },
+ off: function(name, event) {
+ var e2 = this.e || (this.e = {});
+ var evts = e2[name];
+ var liveEvents = [];
+ if (evts && event) {
+ for (var i = evts.length - 1; i >= 0; i--) {
+ if (evts[i].fn === event || evts[i].fn._ === event || evts[i]._id === event) {
+ evts.splice(i, 1);
+ break;
+ }
+ }
+ liveEvents = evts;
+ }
+ liveEvents.length ? e2[name] = liveEvents : delete e2[name];
+ return this;
+ }
+};
+var E$1 = E;
+/**
+* @dcloudio/uni-mp-vue v3.4.21
+* (c) 2018-present Yuxi (Evan) You and Vue contributors
+* @license MIT
+**/
+function warn$2(msg, ...args) {
+ console.warn(`[Vue warn] ${msg}`, ...args);
+}
+let activeEffectScope;
+class EffectScope {
+ constructor(detached = false) {
+ this.detached = detached;
+ this._active = true;
+ this.effects = [];
+ this.cleanups = [];
+ this.parent = activeEffectScope;
+ if (!detached && activeEffectScope) {
+ this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
+ this
+ ) - 1;
+ }
+ }
+ get active() {
+ return this._active;
+ }
+ run(fn) {
+ if (this._active) {
+ const currentEffectScope = activeEffectScope;
+ try {
+ activeEffectScope = this;
+ return fn();
+ } finally {
+ activeEffectScope = currentEffectScope;
+ }
+ } else {
+ warn$2(`cannot run an inactive effect scope.`);
+ }
+ }
+ /**
+ * This should only be called on non-detached scopes
+ * @internal
+ */
+ on() {
+ activeEffectScope = this;
+ }
+ /**
+ * This should only be called on non-detached scopes
+ * @internal
+ */
+ off() {
+ activeEffectScope = this.parent;
+ }
+ stop(fromParent) {
+ if (this._active) {
+ let i, l;
+ for (i = 0, l = this.effects.length; i < l; i++) {
+ this.effects[i].stop();
+ }
+ for (i = 0, l = this.cleanups.length; i < l; i++) {
+ this.cleanups[i]();
+ }
+ if (this.scopes) {
+ for (i = 0, l = this.scopes.length; i < l; i++) {
+ this.scopes[i].stop(true);
+ }
+ }
+ if (!this.detached && this.parent && !fromParent) {
+ const last = this.parent.scopes.pop();
+ if (last && last !== this) {
+ this.parent.scopes[this.index] = last;
+ last.index = this.index;
+ }
+ }
+ this.parent = void 0;
+ this._active = false;
+ }
+ }
+}
+function recordEffectScope(effect2, scope = activeEffectScope) {
+ if (scope && scope.active) {
+ scope.effects.push(effect2);
+ }
+}
+function getCurrentScope() {
+ return activeEffectScope;
+}
+let activeEffect;
+class ReactiveEffect {
+ constructor(fn, trigger2, scheduler, scope) {
+ this.fn = fn;
+ this.trigger = trigger2;
+ this.scheduler = scheduler;
+ this.active = true;
+ this.deps = [];
+ this._dirtyLevel = 4;
+ this._trackId = 0;
+ this._runnings = 0;
+ this._shouldSchedule = false;
+ this._depsLength = 0;
+ recordEffectScope(this, scope);
+ }
+ get dirty() {
+ if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {
+ this._dirtyLevel = 1;
+ pauseTracking();
+ for (let i = 0; i < this._depsLength; i++) {
+ const dep = this.deps[i];
+ if (dep.computed) {
+ triggerComputed(dep.computed);
+ if (this._dirtyLevel >= 4) {
+ break;
+ }
+ }
+ }
+ if (this._dirtyLevel === 1) {
+ this._dirtyLevel = 0;
+ }
+ resetTracking();
+ }
+ return this._dirtyLevel >= 4;
+ }
+ set dirty(v) {
+ this._dirtyLevel = v ? 4 : 0;
+ }
+ run() {
+ this._dirtyLevel = 0;
+ if (!this.active) {
+ return this.fn();
+ }
+ let lastShouldTrack = shouldTrack;
+ let lastEffect = activeEffect;
+ try {
+ shouldTrack = true;
+ activeEffect = this;
+ this._runnings++;
+ preCleanupEffect(this);
+ return this.fn();
+ } finally {
+ postCleanupEffect(this);
+ this._runnings--;
+ activeEffect = lastEffect;
+ shouldTrack = lastShouldTrack;
+ }
+ }
+ stop() {
+ var _a;
+ if (this.active) {
+ preCleanupEffect(this);
+ postCleanupEffect(this);
+ (_a = this.onStop) == null ? void 0 : _a.call(this);
+ this.active = false;
+ }
+ }
+}
+function triggerComputed(computed2) {
+ return computed2.value;
+}
+function preCleanupEffect(effect2) {
+ effect2._trackId++;
+ effect2._depsLength = 0;
+}
+function postCleanupEffect(effect2) {
+ if (effect2.deps.length > effect2._depsLength) {
+ for (let i = effect2._depsLength; i < effect2.deps.length; i++) {
+ cleanupDepEffect(effect2.deps[i], effect2);
+ }
+ effect2.deps.length = effect2._depsLength;
+ }
+}
+function cleanupDepEffect(dep, effect2) {
+ const trackId = dep.get(effect2);
+ if (trackId !== void 0 && effect2._trackId !== trackId) {
+ dep.delete(effect2);
+ if (dep.size === 0) {
+ dep.cleanup();
+ }
+ }
+}
+let shouldTrack = true;
+let pauseScheduleStack = 0;
+const trackStack = [];
+function pauseTracking() {
+ trackStack.push(shouldTrack);
+ shouldTrack = false;
+}
+function resetTracking() {
+ const last = trackStack.pop();
+ shouldTrack = last === void 0 ? true : last;
+}
+function pauseScheduling() {
+ pauseScheduleStack++;
+}
+function resetScheduling() {
+ pauseScheduleStack--;
+ while (!pauseScheduleStack && queueEffectSchedulers.length) {
+ queueEffectSchedulers.shift()();
+ }
+}
+function trackEffect(effect2, dep, debuggerEventExtraInfo) {
+ var _a;
+ if (dep.get(effect2) !== effect2._trackId) {
+ dep.set(effect2, effect2._trackId);
+ const oldDep = effect2.deps[effect2._depsLength];
+ if (oldDep !== dep) {
+ if (oldDep) {
+ cleanupDepEffect(oldDep, effect2);
+ }
+ effect2.deps[effect2._depsLength++] = dep;
+ } else {
+ effect2._depsLength++;
+ }
+ {
+ (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
+ }
+ }
+}
+const queueEffectSchedulers = [];
+function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {
+ var _a;
+ pauseScheduling();
+ for (const effect2 of dep.keys()) {
+ let tracking;
+ if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
+ effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);
+ effect2._dirtyLevel = dirtyLevel;
+ }
+ if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
+ {
+ (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
+ }
+ effect2.trigger();
+ if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {
+ effect2._shouldSchedule = false;
+ if (effect2.scheduler) {
+ queueEffectSchedulers.push(effect2.scheduler);
+ }
+ }
+ }
+ }
+ resetScheduling();
+}
+const createDep = (cleanup, computed2) => {
+ const dep = /* @__PURE__ */ new Map();
+ dep.cleanup = cleanup;
+ dep.computed = computed2;
+ return dep;
+};
+const targetMap = /* @__PURE__ */ new WeakMap();
+const ITERATE_KEY = Symbol("iterate");
+const MAP_KEY_ITERATE_KEY = Symbol("Map key iterate");
+function track(target, type, key) {
+ if (shouldTrack && activeEffect) {
+ let depsMap = targetMap.get(target);
+ if (!depsMap) {
+ targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
+ }
+ let dep = depsMap.get(key);
+ if (!dep) {
+ depsMap.set(key, dep = createDep(() => depsMap.delete(key)));
+ }
+ trackEffect(
+ activeEffect,
+ dep,
+ {
+ target,
+ type,
+ key
+ }
+ );
+ }
+}
+function trigger(target, type, key, newValue, oldValue, oldTarget) {
+ const depsMap = targetMap.get(target);
+ if (!depsMap) {
+ return;
+ }
+ let deps = [];
+ if (type === "clear") {
+ deps = [...depsMap.values()];
+ } else if (key === "length" && isArray(target)) {
+ const newLength = Number(newValue);
+ depsMap.forEach((dep, key2) => {
+ if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) {
+ deps.push(dep);
+ }
+ });
+ } else {
+ if (key !== void 0) {
+ deps.push(depsMap.get(key));
+ }
+ switch (type) {
+ case "add":
+ if (!isArray(target)) {
+ deps.push(depsMap.get(ITERATE_KEY));
+ if (isMap(target)) {
+ deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
+ }
+ } else if (isIntegerKey(key)) {
+ deps.push(depsMap.get("length"));
+ }
+ break;
+ case "delete":
+ if (!isArray(target)) {
+ deps.push(depsMap.get(ITERATE_KEY));
+ if (isMap(target)) {
+ deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
+ }
+ }
+ break;
+ case "set":
+ if (isMap(target)) {
+ deps.push(depsMap.get(ITERATE_KEY));
+ }
+ break;
+ }
+ }
+ pauseScheduling();
+ for (const dep of deps) {
+ if (dep) {
+ triggerEffects(
+ dep,
+ 4,
+ {
+ target,
+ type,
+ key,
+ newValue,
+ oldValue,
+ oldTarget
+ }
+ );
+ }
+ }
+ resetScheduling();
+}
+const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
+const builtInSymbols = new Set(
+ /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
+);
+const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
+function createArrayInstrumentations() {
+ const instrumentations = {};
+ ["includes", "indexOf", "lastIndexOf"].forEach((key) => {
+ instrumentations[key] = function(...args) {
+ const arr = toRaw(this);
+ for (let i = 0, l = this.length; i < l; i++) {
+ track(arr, "get", i + "");
+ }
+ const res = arr[key](...args);
+ if (res === -1 || res === false) {
+ return arr[key](...args.map(toRaw));
+ } else {
+ return res;
+ }
+ };
+ });
+ ["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
+ instrumentations[key] = function(...args) {
+ pauseTracking();
+ pauseScheduling();
+ const res = toRaw(this)[key].apply(this, args);
+ resetScheduling();
+ resetTracking();
+ return res;
+ };
+ });
+ return instrumentations;
+}
+function hasOwnProperty(key) {
+ const obj = toRaw(this);
+ track(obj, "has", key);
+ return obj.hasOwnProperty(key);
+}
+class BaseReactiveHandler {
+ constructor(_isReadonly = false, _isShallow = false) {
+ this._isReadonly = _isReadonly;
+ this._isShallow = _isShallow;
+ }
+ get(target, key, receiver) {
+ const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
+ if (key === "__v_isReactive") {
+ return !isReadonly2;
+ } else if (key === "__v_isReadonly") {
+ return isReadonly2;
+ } else if (key === "__v_isShallow") {
+ return isShallow2;
+ } else if (key === "__v_raw") {
+ if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
+ // this means the reciever is a user proxy of the reactive proxy
+ Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
+ return target;
+ }
+ return;
+ }
+ const targetIsArray = isArray(target);
+ if (!isReadonly2) {
+ if (targetIsArray && hasOwn$1(arrayInstrumentations, key)) {
+ return Reflect.get(arrayInstrumentations, key, receiver);
+ }
+ if (key === "hasOwnProperty") {
+ return hasOwnProperty;
+ }
+ }
+ const res = Reflect.get(target, key, receiver);
+ if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
+ return res;
+ }
+ if (!isReadonly2) {
+ track(target, "get", key);
+ }
+ if (isShallow2) {
+ return res;
+ }
+ if (isRef(res)) {
+ return targetIsArray && isIntegerKey(key) ? res : res.value;
+ }
+ if (isObject$1(res)) {
+ return isReadonly2 ? readonly(res) : reactive(res);
+ }
+ return res;
+ }
+}
+class MutableReactiveHandler extends BaseReactiveHandler {
+ constructor(isShallow2 = false) {
+ super(false, isShallow2);
+ }
+ set(target, key, value, receiver) {
+ let oldValue = target[key];
+ if (!this._isShallow) {
+ const isOldValueReadonly = isReadonly(oldValue);
+ if (!isShallow(value) && !isReadonly(value)) {
+ oldValue = toRaw(oldValue);
+ value = toRaw(value);
+ }
+ if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
+ if (isOldValueReadonly) {
+ return false;
+ } else {
+ oldValue.value = value;
+ return true;
+ }
+ }
+ }
+ const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn$1(target, key);
+ const result = Reflect.set(target, key, value, receiver);
+ if (target === toRaw(receiver)) {
+ if (!hadKey) {
+ trigger(target, "add", key, value);
+ } else if (hasChanged(value, oldValue)) {
+ trigger(target, "set", key, value, oldValue);
+ }
+ }
+ return result;
+ }
+ deleteProperty(target, key) {
+ const hadKey = hasOwn$1(target, key);
+ const oldValue = target[key];
+ const result = Reflect.deleteProperty(target, key);
+ if (result && hadKey) {
+ trigger(target, "delete", key, void 0, oldValue);
+ }
+ return result;
+ }
+ has(target, key) {
+ const result = Reflect.has(target, key);
+ if (!isSymbol(key) || !builtInSymbols.has(key)) {
+ track(target, "has", key);
+ }
+ return result;
+ }
+ ownKeys(target) {
+ track(
+ target,
+ "iterate",
+ isArray(target) ? "length" : ITERATE_KEY
+ );
+ return Reflect.ownKeys(target);
+ }
+}
+class ReadonlyReactiveHandler extends BaseReactiveHandler {
+ constructor(isShallow2 = false) {
+ super(true, isShallow2);
+ }
+ set(target, key) {
+ {
+ warn$2(
+ `Set operation on key "${String(key)}" failed: target is readonly.`,
+ target
+ );
+ }
+ return true;
+ }
+ deleteProperty(target, key) {
+ {
+ warn$2(
+ `Delete operation on key "${String(key)}" failed: target is readonly.`,
+ target
+ );
+ }
+ return true;
+ }
+}
+const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();
+const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();
+const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(
+ true
+);
+const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);
+const toShallow = (value) => value;
+const getProto = (v) => Reflect.getPrototypeOf(v);
+function get(target, key, isReadonly2 = false, isShallow2 = false) {
+ target = target["__v_raw"];
+ const rawTarget = toRaw(target);
+ const rawKey = toRaw(key);
+ if (!isReadonly2) {
+ if (hasChanged(key, rawKey)) {
+ track(rawTarget, "get", key);
+ }
+ track(rawTarget, "get", rawKey);
+ }
+ const { has: has2 } = getProto(rawTarget);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ if (has2.call(rawTarget, key)) {
+ return wrap(target.get(key));
+ } else if (has2.call(rawTarget, rawKey)) {
+ return wrap(target.get(rawKey));
+ } else if (target !== rawTarget) {
+ target.get(key);
+ }
+}
+function has$1(key, isReadonly2 = false) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const rawKey = toRaw(key);
+ if (!isReadonly2) {
+ if (hasChanged(key, rawKey)) {
+ track(rawTarget, "has", key);
+ }
+ track(rawTarget, "has", rawKey);
+ }
+ return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
+}
+function size(target, isReadonly2 = false) {
+ target = target["__v_raw"];
+ !isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY);
+ return Reflect.get(target, "size", target);
+}
+function add(value) {
+ value = toRaw(value);
+ const target = toRaw(this);
+ const proto = getProto(target);
+ const hadKey = proto.has.call(target, value);
+ if (!hadKey) {
+ target.add(value);
+ trigger(target, "add", value, value);
+ }
+ return this;
+}
+function set$1(key, value) {
+ value = toRaw(value);
+ const target = toRaw(this);
+ const { has: has2, get: get2 } = getProto(target);
+ let hadKey = has2.call(target, key);
+ if (!hadKey) {
+ key = toRaw(key);
+ hadKey = has2.call(target, key);
+ } else {
+ checkIdentityKeys(target, has2, key);
+ }
+ const oldValue = get2.call(target, key);
+ target.set(key, value);
+ if (!hadKey) {
+ trigger(target, "add", key, value);
+ } else if (hasChanged(value, oldValue)) {
+ trigger(target, "set", key, value, oldValue);
+ }
+ return this;
+}
+function deleteEntry(key) {
+ const target = toRaw(this);
+ const { has: has2, get: get2 } = getProto(target);
+ let hadKey = has2.call(target, key);
+ if (!hadKey) {
+ key = toRaw(key);
+ hadKey = has2.call(target, key);
+ } else {
+ checkIdentityKeys(target, has2, key);
+ }
+ const oldValue = get2 ? get2.call(target, key) : void 0;
+ const result = target.delete(key);
+ if (hadKey) {
+ trigger(target, "delete", key, void 0, oldValue);
+ }
+ return result;
+}
+function clear() {
+ const target = toRaw(this);
+ const hadItems = target.size !== 0;
+ const oldTarget = isMap(target) ? new Map(target) : new Set(target);
+ const result = target.clear();
+ if (hadItems) {
+ trigger(target, "clear", void 0, void 0, oldTarget);
+ }
+ return result;
+}
+function createForEach(isReadonly2, isShallow2) {
+ return function forEach(callback, thisArg) {
+ const observed = this;
+ const target = observed["__v_raw"];
+ const rawTarget = toRaw(target);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ !isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY);
+ return target.forEach((value, key) => {
+ return callback.call(thisArg, wrap(value), wrap(key), observed);
+ });
+ };
+}
+function createIterableMethod(method, isReadonly2, isShallow2) {
+ return function(...args) {
+ const target = this["__v_raw"];
+ const rawTarget = toRaw(target);
+ const targetIsMap = isMap(rawTarget);
+ const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
+ const isKeyOnly = method === "keys" && targetIsMap;
+ const innerIterator = target[method](...args);
+ const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
+ !isReadonly2 && track(
+ rawTarget,
+ "iterate",
+ isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
+ );
+ return {
+ // iterator protocol
+ next() {
+ const { value, done } = innerIterator.next();
+ return done ? { value, done } : {
+ value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
+ done
+ };
+ },
+ // iterable protocol
+ [Symbol.iterator]() {
+ return this;
+ }
+ };
+ };
+}
+function createReadonlyMethod(type) {
+ return function(...args) {
+ {
+ const key = args[0] ? `on key "${args[0]}" ` : ``;
+ warn$2(
+ `${capitalize(type)} operation ${key}failed: target is readonly.`,
+ toRaw(this)
+ );
+ }
+ return type === "delete" ? false : type === "clear" ? void 0 : this;
+ };
+}
+function createInstrumentations() {
+ const mutableInstrumentations2 = {
+ get(key) {
+ return get(this, key);
+ },
+ get size() {
+ return size(this);
+ },
+ has: has$1,
+ add,
+ set: set$1,
+ delete: deleteEntry,
+ clear,
+ forEach: createForEach(false, false)
+ };
+ const shallowInstrumentations2 = {
+ get(key) {
+ return get(this, key, false, true);
+ },
+ get size() {
+ return size(this);
+ },
+ has: has$1,
+ add,
+ set: set$1,
+ delete: deleteEntry,
+ clear,
+ forEach: createForEach(false, true)
+ };
+ const readonlyInstrumentations2 = {
+ get(key) {
+ return get(this, key, true);
+ },
+ get size() {
+ return size(this, true);
+ },
+ has(key) {
+ return has$1.call(this, key, true);
+ },
+ add: createReadonlyMethod("add"),
+ set: createReadonlyMethod("set"),
+ delete: createReadonlyMethod("delete"),
+ clear: createReadonlyMethod("clear"),
+ forEach: createForEach(true, false)
+ };
+ const shallowReadonlyInstrumentations2 = {
+ get(key) {
+ return get(this, key, true, true);
+ },
+ get size() {
+ return size(this, true);
+ },
+ has(key) {
+ return has$1.call(this, key, true);
+ },
+ add: createReadonlyMethod("add"),
+ set: createReadonlyMethod("set"),
+ delete: createReadonlyMethod("delete"),
+ clear: createReadonlyMethod("clear"),
+ forEach: createForEach(true, true)
+ };
+ const iteratorMethods = [
+ "keys",
+ "values",
+ "entries",
+ Symbol.iterator
+ ];
+ iteratorMethods.forEach((method) => {
+ mutableInstrumentations2[method] = createIterableMethod(method, false, false);
+ readonlyInstrumentations2[method] = createIterableMethod(method, true, false);
+ shallowInstrumentations2[method] = createIterableMethod(method, false, true);
+ shallowReadonlyInstrumentations2[method] = createIterableMethod(
+ method,
+ true,
+ true
+ );
+ });
+ return [
+ mutableInstrumentations2,
+ readonlyInstrumentations2,
+ shallowInstrumentations2,
+ shallowReadonlyInstrumentations2
+ ];
+}
+const [
+ mutableInstrumentations,
+ readonlyInstrumentations,
+ shallowInstrumentations,
+ shallowReadonlyInstrumentations
+] = /* @__PURE__ */ createInstrumentations();
+function createInstrumentationGetter(isReadonly2, shallow) {
+ const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
+ return (target, key, receiver) => {
+ if (key === "__v_isReactive") {
+ return !isReadonly2;
+ } else if (key === "__v_isReadonly") {
+ return isReadonly2;
+ } else if (key === "__v_raw") {
+ return target;
+ }
+ return Reflect.get(
+ hasOwn$1(instrumentations, key) && key in target ? instrumentations : target,
+ key,
+ receiver
+ );
+ };
+}
+const mutableCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(false, false)
+};
+const shallowCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(false, true)
+};
+const readonlyCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(true, false)
+};
+const shallowReadonlyCollectionHandlers = {
+ get: /* @__PURE__ */ createInstrumentationGetter(true, true)
+};
+function checkIdentityKeys(target, has2, key) {
+ const rawKey = toRaw(key);
+ if (rawKey !== key && has2.call(target, rawKey)) {
+ const type = toRawType(target);
+ warn$2(
+ `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
+ );
+ }
+}
+const reactiveMap = /* @__PURE__ */ new WeakMap();
+const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
+const readonlyMap = /* @__PURE__ */ new WeakMap();
+const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
+function targetTypeMap(rawType) {
+ switch (rawType) {
+ case "Object":
+ case "Array":
+ return 1;
+ case "Map":
+ case "Set":
+ case "WeakMap":
+ case "WeakSet":
+ return 2;
+ default:
+ return 0;
+ }
+}
+function getTargetType(value) {
+ return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));
+}
+function reactive(target) {
+ if (isReadonly(target)) {
+ return target;
+ }
+ return createReactiveObject(
+ target,
+ false,
+ mutableHandlers,
+ mutableCollectionHandlers,
+ reactiveMap
+ );
+}
+function shallowReactive(target) {
+ return createReactiveObject(
+ target,
+ false,
+ shallowReactiveHandlers,
+ shallowCollectionHandlers,
+ shallowReactiveMap
+ );
+}
+function readonly(target) {
+ return createReactiveObject(
+ target,
+ true,
+ readonlyHandlers,
+ readonlyCollectionHandlers,
+ readonlyMap
+ );
+}
+function shallowReadonly(target) {
+ return createReactiveObject(
+ target,
+ true,
+ shallowReadonlyHandlers,
+ shallowReadonlyCollectionHandlers,
+ shallowReadonlyMap
+ );
+}
+function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
+ if (!isObject$1(target)) {
+ {
+ warn$2(`value cannot be made reactive: ${String(target)}`);
+ }
+ return target;
+ }
+ if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
+ return target;
+ }
+ const existingProxy = proxyMap.get(target);
+ if (existingProxy) {
+ return existingProxy;
+ }
+ const targetType = getTargetType(target);
+ if (targetType === 0) {
+ return target;
+ }
+ const proxy = new Proxy(
+ target,
+ targetType === 2 ? collectionHandlers : baseHandlers
+ );
+ proxyMap.set(target, proxy);
+ return proxy;
+}
+function isReactive(value) {
+ if (isReadonly(value)) {
+ return isReactive(value["__v_raw"]);
+ }
+ return !!(value && value["__v_isReactive"]);
+}
+function isReadonly(value) {
+ return !!(value && value["__v_isReadonly"]);
+}
+function isShallow(value) {
+ return !!(value && value["__v_isShallow"]);
+}
+function isProxy(value) {
+ return isReactive(value) || isReadonly(value);
+}
+function toRaw(observed) {
+ const raw = observed && observed["__v_raw"];
+ return raw ? toRaw(raw) : observed;
+}
+function markRaw(value) {
+ if (Object.isExtensible(value)) {
+ def(value, "__v_skip", true);
+ }
+ return value;
+}
+const toReactive = (value) => isObject$1(value) ? reactive(value) : value;
+const toReadonly = (value) => isObject$1(value) ? readonly(value) : value;
+const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;
+class ComputedRefImpl {
+ constructor(getter, _setter, isReadonly2, isSSR) {
+ this.getter = getter;
+ this._setter = _setter;
+ this.dep = void 0;
+ this.__v_isRef = true;
+ this["__v_isReadonly"] = false;
+ this.effect = new ReactiveEffect(
+ () => getter(this._value),
+ () => triggerRefValue(
+ this,
+ this.effect._dirtyLevel === 2 ? 2 : 3
+ )
+ );
+ this.effect.computed = this;
+ this.effect.active = this._cacheable = !isSSR;
+ this["__v_isReadonly"] = isReadonly2;
+ }
+ get value() {
+ const self = toRaw(this);
+ if ((!self._cacheable || self.effect.dirty) && hasChanged(self._value, self._value = self.effect.run())) {
+ triggerRefValue(self, 4);
+ }
+ trackRefValue(self);
+ if (self.effect._dirtyLevel >= 2) {
+ if (this._warnRecursive) {
+ warn$2(COMPUTED_SIDE_EFFECT_WARN, `
+
+getter: `, this.getter);
+ }
+ triggerRefValue(self, 2);
+ }
+ return self._value;
+ }
+ set value(newValue) {
+ this._setter(newValue);
+ }
+ // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
+ get _dirty() {
+ return this.effect.dirty;
+ }
+ set _dirty(v) {
+ this.effect.dirty = v;
+ }
+ // #endregion
+}
+function computed$1(getterOrOptions, debugOptions, isSSR = false) {
+ let getter;
+ let setter;
+ const onlyGetter = isFunction(getterOrOptions);
+ if (onlyGetter) {
+ getter = getterOrOptions;
+ setter = () => {
+ warn$2("Write operation failed: computed value is readonly");
+ };
+ } else {
+ getter = getterOrOptions.get;
+ setter = getterOrOptions.set;
+ }
+ const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
+ if (debugOptions && !isSSR) {
+ cRef.effect.onTrack = debugOptions.onTrack;
+ cRef.effect.onTrigger = debugOptions.onTrigger;
+ }
+ return cRef;
+}
+function trackRefValue(ref2) {
+ var _a;
+ if (shouldTrack && activeEffect) {
+ ref2 = toRaw(ref2);
+ trackEffect(
+ activeEffect,
+ (_a = ref2.dep) != null ? _a : ref2.dep = createDep(
+ () => ref2.dep = void 0,
+ ref2 instanceof ComputedRefImpl ? ref2 : void 0
+ ),
+ {
+ target: ref2,
+ type: "get",
+ key: "value"
+ }
+ );
+ }
+}
+function triggerRefValue(ref2, dirtyLevel = 4, newVal) {
+ ref2 = toRaw(ref2);
+ const dep = ref2.dep;
+ if (dep) {
+ triggerEffects(
+ dep,
+ dirtyLevel,
+ {
+ target: ref2,
+ type: "set",
+ key: "value",
+ newValue: newVal
+ }
+ );
+ }
+}
+function isRef(r2) {
+ return !!(r2 && r2.__v_isRef === true);
+}
+function ref(value) {
+ return createRef(value, false);
+}
+function createRef(rawValue, shallow) {
+ if (isRef(rawValue)) {
+ return rawValue;
+ }
+ return new RefImpl(rawValue, shallow);
+}
+class RefImpl {
+ constructor(value, __v_isShallow) {
+ this.__v_isShallow = __v_isShallow;
+ this.dep = void 0;
+ this.__v_isRef = true;
+ this._rawValue = __v_isShallow ? value : toRaw(value);
+ this._value = __v_isShallow ? value : toReactive(value);
+ }
+ get value() {
+ trackRefValue(this);
+ return this._value;
+ }
+ set value(newVal) {
+ const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);
+ newVal = useDirectValue ? newVal : toRaw(newVal);
+ if (hasChanged(newVal, this._rawValue)) {
+ this._rawValue = newVal;
+ this._value = useDirectValue ? newVal : toReactive(newVal);
+ triggerRefValue(this, 4, newVal);
+ }
+ }
+}
+function unref(ref2) {
+ return isRef(ref2) ? ref2.value : ref2;
+}
+const shallowUnwrapHandlers = {
+ get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
+ set: (target, key, value, receiver) => {
+ const oldValue = target[key];
+ if (isRef(oldValue) && !isRef(value)) {
+ oldValue.value = value;
+ return true;
+ } else {
+ return Reflect.set(target, key, value, receiver);
+ }
+ }
+};
+function proxyRefs(objectWithRefs) {
+ return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
+}
+const stack = [];
+function pushWarningContext(vnode) {
+ stack.push(vnode);
+}
+function popWarningContext() {
+ stack.pop();
+}
+function warn$1(msg, ...args) {
+ pauseTracking();
+ const instance = stack.length ? stack[stack.length - 1].component : null;
+ const appWarnHandler = instance && instance.appContext.config.warnHandler;
+ const trace = getComponentTrace();
+ if (appWarnHandler) {
+ callWithErrorHandling(
+ appWarnHandler,
+ instance,
+ 11,
+ [
+ msg + args.map((a) => {
+ var _a, _b;
+ return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
+ }).join(""),
+ instance && instance.proxy,
+ trace.map(
+ ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
+ ).join("\n"),
+ trace
+ ]
+ );
+ } else {
+ const warnArgs = [`[Vue warn]: ${msg}`, ...args];
+ if (trace.length && // avoid spamming console during tests
+ true) {
+ warnArgs.push(`
+`, ...formatTrace(trace));
+ }
+ console.warn(...warnArgs);
+ }
+ resetTracking();
+}
+function getComponentTrace() {
+ let currentVNode = stack[stack.length - 1];
+ if (!currentVNode) {
+ return [];
+ }
+ const normalizedStack = [];
+ while (currentVNode) {
+ const last = normalizedStack[0];
+ if (last && last.vnode === currentVNode) {
+ last.recurseCount++;
+ } else {
+ normalizedStack.push({
+ vnode: currentVNode,
+ recurseCount: 0
+ });
+ }
+ const parentInstance = currentVNode.component && currentVNode.component.parent;
+ currentVNode = parentInstance && parentInstance.vnode;
+ }
+ return normalizedStack;
+}
+function formatTrace(trace) {
+ const logs = [];
+ trace.forEach((entry, i) => {
+ logs.push(...i === 0 ? [] : [`
+`], ...formatTraceEntry(entry));
+ });
+ return logs;
+}
+function formatTraceEntry({ vnode, recurseCount }) {
+ const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
+ const isRoot = vnode.component ? vnode.component.parent == null : false;
+ const open = ` at <${formatComponentName(
+ vnode.component,
+ vnode.type,
+ isRoot
+ )}`;
+ const close = `>` + postfix;
+ return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
+}
+function formatProps(props) {
+ const res = [];
+ const keys = Object.keys(props);
+ keys.slice(0, 3).forEach((key) => {
+ res.push(...formatProp(key, props[key]));
+ });
+ if (keys.length > 3) {
+ res.push(` ...`);
+ }
+ return res;
+}
+function formatProp(key, value, raw) {
+ if (isString(value)) {
+ value = JSON.stringify(value);
+ return raw ? value : [`${key}=${value}`];
+ } else if (typeof value === "number" || typeof value === "boolean" || value == null) {
+ return raw ? value : [`${key}=${value}`];
+ } else if (isRef(value)) {
+ value = formatProp(key, toRaw(value.value), true);
+ return raw ? value : [`${key}=Ref<`, value, `>`];
+ } else if (isFunction(value)) {
+ return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
+ } else {
+ value = toRaw(value);
+ return raw ? value : [`${key}=`, value];
+ }
+}
+const ErrorTypeStrings = {
+ ["sp"]: "serverPrefetch hook",
+ ["bc"]: "beforeCreate hook",
+ ["c"]: "created hook",
+ ["bm"]: "beforeMount hook",
+ ["m"]: "mounted hook",
+ ["bu"]: "beforeUpdate hook",
+ ["u"]: "updated",
+ ["bum"]: "beforeUnmount hook",
+ ["um"]: "unmounted hook",
+ ["a"]: "activated hook",
+ ["da"]: "deactivated hook",
+ ["ec"]: "errorCaptured hook",
+ ["rtc"]: "renderTracked hook",
+ ["rtg"]: "renderTriggered hook",
+ [0]: "setup function",
+ [1]: "render function",
+ [2]: "watcher getter",
+ [3]: "watcher callback",
+ [4]: "watcher cleanup function",
+ [5]: "native event handler",
+ [6]: "component event handler",
+ [7]: "vnode hook",
+ [8]: "directive hook",
+ [9]: "transition hook",
+ [10]: "app errorHandler",
+ [11]: "app warnHandler",
+ [12]: "ref function",
+ [13]: "async component loader",
+ [14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
+};
+function callWithErrorHandling(fn, instance, type, args) {
+ try {
+ return args ? fn(...args) : fn();
+ } catch (err) {
+ handleError(err, instance, type);
+ }
+}
+function callWithAsyncErrorHandling(fn, instance, type, args) {
+ if (isFunction(fn)) {
+ const res = callWithErrorHandling(fn, instance, type, args);
+ if (res && isPromise(res)) {
+ res.catch((err) => {
+ handleError(err, instance, type);
+ });
+ }
+ return res;
+ }
+ const values = [];
+ for (let i = 0; i < fn.length; i++) {
+ values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));
+ }
+ return values;
+}
+function handleError(err, instance, type, throwInDev = true) {
+ const contextVNode = instance ? instance.vnode : null;
+ if (instance) {
+ let cur = instance.parent;
+ const exposedInstance = instance.proxy;
+ const errorInfo = ErrorTypeStrings[type] || type;
+ while (cur) {
+ const errorCapturedHooks = cur.ec;
+ if (errorCapturedHooks) {
+ for (let i = 0; i < errorCapturedHooks.length; i++) {
+ if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
+ return;
+ }
+ }
+ }
+ cur = cur.parent;
+ }
+ const appErrorHandler = instance.appContext.config.errorHandler;
+ if (appErrorHandler) {
+ callWithErrorHandling(
+ appErrorHandler,
+ null,
+ 10,
+ [err, exposedInstance, errorInfo]
+ );
+ return;
+ }
+ }
+ logError(err, type, contextVNode, throwInDev);
+}
+function logError(err, type, contextVNode, throwInDev = true) {
+ {
+ const info = ErrorTypeStrings[type] || type;
+ if (contextVNode) {
+ pushWarningContext(contextVNode);
+ }
+ warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
+ if (contextVNode) {
+ popWarningContext();
+ }
+ if (throwInDev) {
+ console.error(err);
+ } else {
+ console.error(err);
+ }
+ }
+}
+let isFlushing = false;
+let isFlushPending = false;
+const queue$1 = [];
+let flushIndex = 0;
+const pendingPostFlushCbs = [];
+let activePostFlushCbs = null;
+let postFlushIndex = 0;
+const resolvedPromise = /* @__PURE__ */ Promise.resolve();
+let currentFlushPromise = null;
+const RECURSION_LIMIT = 100;
+function nextTick$1(fn) {
+ const p2 = currentFlushPromise || resolvedPromise;
+ return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
+}
+function findInsertionIndex(id) {
+ let start = flushIndex + 1;
+ let end = queue$1.length;
+ while (start < end) {
+ const middle = start + end >>> 1;
+ const middleJob = queue$1[middle];
+ const middleJobId = getId(middleJob);
+ if (middleJobId < id || middleJobId === id && middleJob.pre) {
+ start = middle + 1;
+ } else {
+ end = middle;
+ }
+ }
+ return start;
+}
+function queueJob(job) {
+ if (!queue$1.length || !queue$1.includes(
+ job,
+ isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex
+ )) {
+ if (job.id == null) {
+ queue$1.push(job);
+ } else {
+ queue$1.splice(findInsertionIndex(job.id), 0, job);
+ }
+ queueFlush();
+ }
+}
+function queueFlush() {
+ if (!isFlushing && !isFlushPending) {
+ isFlushPending = true;
+ currentFlushPromise = resolvedPromise.then(flushJobs);
+ }
+}
+function hasQueueJob(job) {
+ return queue$1.indexOf(job) > -1;
+}
+function invalidateJob(job) {
+ const i = queue$1.indexOf(job);
+ if (i > flushIndex) {
+ queue$1.splice(i, 1);
+ }
+}
+function queuePostFlushCb(cb) {
+ if (!isArray(cb)) {
+ if (!activePostFlushCbs || !activePostFlushCbs.includes(
+ cb,
+ cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex
+ )) {
+ pendingPostFlushCbs.push(cb);
+ }
+ } else {
+ pendingPostFlushCbs.push(...cb);
+ }
+ queueFlush();
+}
+function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ for (; i < queue$1.length; i++) {
+ const cb = queue$1[i];
+ if (cb && cb.pre) {
+ if (checkRecursiveUpdates(seen, cb)) {
+ continue;
+ }
+ queue$1.splice(i, 1);
+ i--;
+ cb();
+ }
+ }
+}
+function flushPostFlushCbs(seen) {
+ if (pendingPostFlushCbs.length) {
+ const deduped = [...new Set(pendingPostFlushCbs)].sort(
+ (a, b) => getId(a) - getId(b)
+ );
+ pendingPostFlushCbs.length = 0;
+ if (activePostFlushCbs) {
+ activePostFlushCbs.push(...deduped);
+ return;
+ }
+ activePostFlushCbs = deduped;
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
+ if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {
+ continue;
+ }
+ activePostFlushCbs[postFlushIndex]();
+ }
+ activePostFlushCbs = null;
+ postFlushIndex = 0;
+ }
+}
+const getId = (job) => job.id == null ? Infinity : job.id;
+const comparator = (a, b) => {
+ const diff2 = getId(a) - getId(b);
+ if (diff2 === 0) {
+ if (a.pre && !b.pre)
+ return -1;
+ if (b.pre && !a.pre)
+ return 1;
+ }
+ return diff2;
+};
+function flushJobs(seen) {
+ isFlushPending = false;
+ isFlushing = true;
+ {
+ seen = seen || /* @__PURE__ */ new Map();
+ }
+ queue$1.sort(comparator);
+ const check = (job) => checkRecursiveUpdates(seen, job);
+ try {
+ for (flushIndex = 0; flushIndex < queue$1.length; flushIndex++) {
+ const job = queue$1[flushIndex];
+ if (job && job.active !== false) {
+ if (check(job)) {
+ continue;
+ }
+ callWithErrorHandling(job, null, 14);
+ }
+ }
+ } finally {
+ flushIndex = 0;
+ queue$1.length = 0;
+ flushPostFlushCbs(seen);
+ isFlushing = false;
+ currentFlushPromise = null;
+ if (queue$1.length || pendingPostFlushCbs.length) {
+ flushJobs(seen);
+ }
+ }
+}
+function checkRecursiveUpdates(seen, fn) {
+ if (!seen.has(fn)) {
+ seen.set(fn, 1);
+ } else {
+ const count = seen.get(fn);
+ if (count > RECURSION_LIMIT) {
+ const instance = fn.ownerInstance;
+ const componentName = instance && getComponentName(instance.type);
+ handleError(
+ `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
+ null,
+ 10
+ );
+ return true;
+ } else {
+ seen.set(fn, count + 1);
+ }
+ }
+}
+let devtools;
+let buffer = [];
+let devtoolsNotInstalled = false;
+function emit$1(event, ...args) {
+ if (devtools) {
+ devtools.emit(event, ...args);
+ } else if (!devtoolsNotInstalled) {
+ buffer.push({ event, args });
+ }
+}
+function setDevtoolsHook(hook, target) {
+ var _a, _b;
+ devtools = hook;
+ if (devtools) {
+ devtools.enabled = true;
+ buffer.forEach(({ event, args }) => devtools.emit(event, ...args));
+ buffer = [];
+ } else if (
+ // handle late devtools injection - only do this if we are in an actual
+ // browser environment to avoid the timer handle stalling test runner exit
+ // (#4815)
+ typeof window !== "undefined" && // some envs mock window but not fully
+ window.HTMLElement && // also exclude jsdom
+ !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
+ ) {
+ const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
+ replay.push((newHook) => {
+ setDevtoolsHook(newHook, target);
+ });
+ setTimeout(() => {
+ if (!devtools) {
+ target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
+ devtoolsNotInstalled = true;
+ buffer = [];
+ }
+ }, 3e3);
+ } else {
+ devtoolsNotInstalled = true;
+ buffer = [];
+ }
+}
+function devtoolsInitApp(app, version2) {
+ emit$1("app:init", app, version2, {
+ Fragment,
+ Text,
+ Comment,
+ Static
+ });
+}
+const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:added"
+ /* COMPONENT_ADDED */
+);
+const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:updated"
+ /* COMPONENT_UPDATED */
+);
+const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
+ "component:removed"
+ /* COMPONENT_REMOVED */
+);
+const devtoolsComponentRemoved = (component) => {
+ if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered
+ !devtools.cleanupBuffer(component)) {
+ _devtoolsComponentRemoved(component);
+ }
+};
+/*! #__NO_SIDE_EFFECTS__ */
+// @__NO_SIDE_EFFECTS__
+function createDevtoolsComponentHook(hook) {
+ return (component) => {
+ emit$1(
+ hook,
+ component.appContext.app,
+ component.uid,
+ // fixed by xxxxxx
+ // 为 0 是 App,无 parent 是 Page 指向 App
+ component.uid === 0 ? void 0 : component.parent ? component.parent.uid : 0,
+ component
+ );
+ };
+}
+const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(
+ "perf:start"
+ /* PERFORMANCE_START */
+);
+const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(
+ "perf:end"
+ /* PERFORMANCE_END */
+);
+function createDevtoolsPerformanceHook(hook) {
+ return (component, type, time) => {
+ emit$1(hook, component.appContext.app, component.uid, component, type, time);
+ };
+}
+function devtoolsComponentEmit(component, event, params) {
+ emit$1(
+ "component:emit",
+ component.appContext.app,
+ component,
+ event,
+ params
+ );
+}
+function emit(instance, event, ...rawArgs) {
+ if (instance.isUnmounted)
+ return;
+ const props = instance.vnode.props || EMPTY_OBJ;
+ {
+ const {
+ emitsOptions,
+ propsOptions: [propsOptions]
+ } = instance;
+ if (emitsOptions) {
+ if (!(event in emitsOptions) && true) {
+ if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {
+ warn$1(
+ `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`
+ );
+ }
+ } else {
+ const validator = emitsOptions[event];
+ if (isFunction(validator)) {
+ const isValid = validator(...rawArgs);
+ if (!isValid) {
+ warn$1(
+ `Invalid event arguments: event validation failed for event "${event}".`
+ );
+ }
+ }
+ }
+ }
+ }
+ let args = rawArgs;
+ const isModelListener2 = event.startsWith("update:");
+ const modelArg = isModelListener2 && event.slice(7);
+ if (modelArg && modelArg in props) {
+ const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`;
+ const { number, trim } = props[modifiersKey] || EMPTY_OBJ;
+ if (trim) {
+ args = rawArgs.map((a) => isString(a) ? a.trim() : a);
+ }
+ if (number) {
+ args = rawArgs.map(looseToNumber);
+ }
+ }
+ {
+ devtoolsComponentEmit(instance, event, args);
+ }
+ {
+ const lowerCaseEvent = event.toLowerCase();
+ if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {
+ warn$1(
+ `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(
+ instance,
+ instance.type
+ )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(
+ event
+ )}" instead of "${event}".`
+ );
+ }
+ }
+ let handlerName;
+ let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)
+ props[handlerName = toHandlerKey(camelize(event))];
+ if (!handler && isModelListener2) {
+ handler = props[handlerName = toHandlerKey(hyphenate(event))];
+ }
+ if (handler) {
+ callWithAsyncErrorHandling(
+ handler,
+ instance,
+ 6,
+ args
+ );
+ }
+ const onceHandler = props[handlerName + `Once`];
+ if (onceHandler) {
+ if (!instance.emitted) {
+ instance.emitted = {};
+ } else if (instance.emitted[handlerName]) {
+ return;
+ }
+ instance.emitted[handlerName] = true;
+ callWithAsyncErrorHandling(
+ onceHandler,
+ instance,
+ 6,
+ args
+ );
+ }
+}
+function normalizeEmitsOptions(comp, appContext, asMixin = false) {
+ const cache = appContext.emitsCache;
+ const cached = cache.get(comp);
+ if (cached !== void 0) {
+ return cached;
+ }
+ const raw = comp.emits;
+ let normalized = {};
+ let hasExtends = false;
+ if (!isFunction(comp)) {
+ const extendEmits = (raw2) => {
+ const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
+ if (normalizedFromExtend) {
+ hasExtends = true;
+ extend(normalized, normalizedFromExtend);
+ }
+ };
+ if (!asMixin && appContext.mixins.length) {
+ appContext.mixins.forEach(extendEmits);
+ }
+ if (comp.extends) {
+ extendEmits(comp.extends);
+ }
+ if (comp.mixins) {
+ comp.mixins.forEach(extendEmits);
+ }
+ }
+ if (!raw && !hasExtends) {
+ if (isObject$1(comp)) {
+ cache.set(comp, null);
+ }
+ return null;
+ }
+ if (isArray(raw)) {
+ raw.forEach((key) => normalized[key] = null);
+ } else {
+ extend(normalized, raw);
+ }
+ if (isObject$1(comp)) {
+ cache.set(comp, normalized);
+ }
+ return normalized;
+}
+function isEmitListener(options, key) {
+ if (!options || !isOn(key)) {
+ return false;
+ }
+ key = key.slice(2).replace(/Once$/, "");
+ return hasOwn$1(options, key[0].toLowerCase() + key.slice(1)) || hasOwn$1(options, hyphenate(key)) || hasOwn$1(options, key);
+}
+let currentRenderingInstance = null;
+function setCurrentRenderingInstance(instance) {
+ const prev = currentRenderingInstance;
+ currentRenderingInstance = instance;
+ instance && instance.type.__scopeId || null;
+ return prev;
+}
+const COMPONENTS = "components";
+function resolveComponent(name, maybeSelfReference) {
+ return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
+}
+function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {
+ const instance = currentRenderingInstance || currentInstance;
+ if (instance) {
+ const Component2 = instance.type;
+ if (type === COMPONENTS) {
+ const selfName = getComponentName(
+ Component2,
+ false
+ );
+ if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
+ return Component2;
+ }
+ }
+ const res = (
+ // local registration
+ // check instance[type] first which is resolved for options API
+ resolve(instance[type] || Component2[type], name) || // global registration
+ resolve(instance.appContext[type], name)
+ );
+ if (!res && maybeSelfReference) {
+ return Component2;
+ }
+ if (warnMissing && !res) {
+ const extra = type === COMPONENTS ? `
+If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;
+ warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
+ }
+ return res;
+ } else {
+ warn$1(
+ `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`
+ );
+ }
+}
+function resolve(registry, name) {
+ return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
+}
+const INITIAL_WATCHER_VALUE = {};
+function watch(source, cb, options) {
+ if (!isFunction(cb)) {
+ warn$1(
+ `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`
+ );
+ }
+ return doWatch(source, cb, options);
+}
+function doWatch(source, cb, {
+ immediate,
+ deep,
+ flush,
+ once: once2,
+ onTrack,
+ onTrigger
+} = EMPTY_OBJ) {
+ if (cb && once2) {
+ const _cb = cb;
+ cb = (...args) => {
+ _cb(...args);
+ unwatch();
+ };
+ }
+ if (deep !== void 0 && typeof deep === "number") {
+ warn$1(
+ `watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`
+ );
+ }
+ if (!cb) {
+ if (immediate !== void 0) {
+ warn$1(
+ `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`
+ );
+ }
+ if (deep !== void 0) {
+ warn$1(
+ `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`
+ );
+ }
+ if (once2 !== void 0) {
+ warn$1(
+ `watch() "once" option is only respected when using the watch(source, callback, options?) signature.`
+ );
+ }
+ }
+ const warnInvalidSource = (s2) => {
+ warn$1(
+ `Invalid watch source: `,
+ s2,
+ `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
+ );
+ };
+ const instance = currentInstance;
+ const reactiveGetter = (source2) => deep === true ? source2 : (
+ // for deep: false, only traverse root-level properties
+ traverse(source2, deep === false ? 1 : void 0)
+ );
+ let getter;
+ let forceTrigger = false;
+ let isMultiSource = false;
+ if (isRef(source)) {
+ getter = () => source.value;
+ forceTrigger = isShallow(source);
+ } else if (isReactive(source)) {
+ getter = () => reactiveGetter(source);
+ forceTrigger = true;
+ } else if (isArray(source)) {
+ isMultiSource = true;
+ forceTrigger = source.some((s2) => isReactive(s2) || isShallow(s2));
+ getter = () => source.map((s2) => {
+ if (isRef(s2)) {
+ return s2.value;
+ } else if (isReactive(s2)) {
+ return reactiveGetter(s2);
+ } else if (isFunction(s2)) {
+ return callWithErrorHandling(s2, instance, 2);
+ } else {
+ warnInvalidSource(s2);
+ }
+ });
+ } else if (isFunction(source)) {
+ if (cb) {
+ getter = () => callWithErrorHandling(source, instance, 2);
+ } else {
+ getter = () => {
+ if (cleanup) {
+ cleanup();
+ }
+ return callWithAsyncErrorHandling(
+ source,
+ instance,
+ 3,
+ [onCleanup]
+ );
+ };
+ }
+ } else {
+ getter = NOOP;
+ warnInvalidSource(source);
+ }
+ if (cb && deep) {
+ const baseGetter = getter;
+ getter = () => traverse(baseGetter());
+ }
+ let cleanup;
+ let onCleanup = (fn) => {
+ cleanup = effect2.onStop = () => {
+ callWithErrorHandling(fn, instance, 4);
+ cleanup = effect2.onStop = void 0;
+ };
+ };
+ let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
+ const job = () => {
+ if (!effect2.active || !effect2.dirty) {
+ return;
+ }
+ if (cb) {
+ const newValue = effect2.run();
+ if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {
+ if (cleanup) {
+ cleanup();
+ }
+ callWithAsyncErrorHandling(cb, instance, 3, [
+ newValue,
+ // pass undefined as the old value when it's changed for the first time
+ oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
+ onCleanup
+ ]);
+ oldValue = newValue;
+ }
+ } else {
+ effect2.run();
+ }
+ };
+ job.allowRecurse = !!cb;
+ let scheduler;
+ if (flush === "sync") {
+ scheduler = job;
+ } else if (flush === "post") {
+ scheduler = () => queuePostRenderEffect$1(job, instance && instance.suspense);
+ } else {
+ job.pre = true;
+ if (instance)
+ job.id = instance.uid;
+ scheduler = () => queueJob(job);
+ }
+ const effect2 = new ReactiveEffect(getter, NOOP, scheduler);
+ const scope = getCurrentScope();
+ const unwatch = () => {
+ effect2.stop();
+ if (scope) {
+ remove(scope.effects, effect2);
+ }
+ };
+ {
+ effect2.onTrack = onTrack;
+ effect2.onTrigger = onTrigger;
+ }
+ if (cb) {
+ if (immediate) {
+ job();
+ } else {
+ oldValue = effect2.run();
+ }
+ } else if (flush === "post") {
+ queuePostRenderEffect$1(
+ effect2.run.bind(effect2),
+ instance && instance.suspense
+ );
+ } else {
+ effect2.run();
+ }
+ return unwatch;
+}
+function instanceWatch(source, value, options) {
+ const publicThis = this.proxy;
+ const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);
+ let cb;
+ if (isFunction(value)) {
+ cb = value;
+ } else {
+ cb = value.handler;
+ options = value;
+ }
+ const reset = setCurrentInstance(this);
+ const res = doWatch(getter, cb.bind(publicThis), options);
+ reset();
+ return res;
+}
+function createPathGetter(ctx, path) {
+ const segments = path.split(".");
+ return () => {
+ let cur = ctx;
+ for (let i = 0; i < segments.length && cur; i++) {
+ cur = cur[segments[i]];
+ }
+ return cur;
+ };
+}
+function traverse(value, depth, currentDepth = 0, seen) {
+ if (!isObject$1(value) || value["__v_skip"]) {
+ return value;
+ }
+ if (depth && depth > 0) {
+ if (currentDepth >= depth) {
+ return value;
+ }
+ currentDepth++;
+ }
+ seen = seen || /* @__PURE__ */ new Set();
+ if (seen.has(value)) {
+ return value;
+ }
+ seen.add(value);
+ if (isRef(value)) {
+ traverse(value.value, depth, currentDepth, seen);
+ } else if (isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ traverse(value[i], depth, currentDepth, seen);
+ }
+ } else if (isSet(value) || isMap(value)) {
+ value.forEach((v) => {
+ traverse(v, depth, currentDepth, seen);
+ });
+ } else if (isPlainObject(value)) {
+ for (const key in value) {
+ traverse(value[key], depth, currentDepth, seen);
+ }
+ }
+ return value;
+}
+function validateDirectiveName(name) {
+ if (isBuiltInDirective(name)) {
+ warn$1("Do not use built-in directive ids as custom directive id: " + name);
+ }
+}
+function createAppContext() {
+ return {
+ app: null,
+ config: {
+ isNativeTag: NO,
+ performance: false,
+ globalProperties: {},
+ optionMergeStrategies: {},
+ errorHandler: void 0,
+ warnHandler: void 0,
+ compilerOptions: {}
+ },
+ mixins: [],
+ components: {},
+ directives: {},
+ provides: /* @__PURE__ */ Object.create(null),
+ optionsCache: /* @__PURE__ */ new WeakMap(),
+ propsCache: /* @__PURE__ */ new WeakMap(),
+ emitsCache: /* @__PURE__ */ new WeakMap()
+ };
+}
+let uid$1 = 0;
+function createAppAPI(render, hydrate) {
+ return function createApp2(rootComponent, rootProps = null) {
+ if (!isFunction(rootComponent)) {
+ rootComponent = extend({}, rootComponent);
+ }
+ if (rootProps != null && !isObject$1(rootProps)) {
+ warn$1(`root props passed to app.mount() must be an object.`);
+ rootProps = null;
+ }
+ const context = createAppContext();
+ const installedPlugins = /* @__PURE__ */ new WeakSet();
+ const app = context.app = {
+ _uid: uid$1++,
+ _component: rootComponent,
+ _props: rootProps,
+ _container: null,
+ _context: context,
+ _instance: null,
+ version,
+ get config() {
+ return context.config;
+ },
+ set config(v) {
+ {
+ warn$1(
+ `app.config cannot be replaced. Modify individual options instead.`
+ );
+ }
+ },
+ use(plugin2, ...options) {
+ if (installedPlugins.has(plugin2)) {
+ warn$1(`Plugin has already been applied to target app.`);
+ } else if (plugin2 && isFunction(plugin2.install)) {
+ installedPlugins.add(plugin2);
+ plugin2.install(app, ...options);
+ } else if (isFunction(plugin2)) {
+ installedPlugins.add(plugin2);
+ plugin2(app, ...options);
+ } else {
+ warn$1(
+ `A plugin must either be a function or an object with an "install" function.`
+ );
+ }
+ return app;
+ },
+ mixin(mixin) {
+ {
+ if (!context.mixins.includes(mixin)) {
+ context.mixins.push(mixin);
+ } else {
+ warn$1(
+ "Mixin has already been applied to target app" + (mixin.name ? `: ${mixin.name}` : "")
+ );
+ }
+ }
+ return app;
+ },
+ component(name, component) {
+ {
+ validateComponentName(name, context.config);
+ }
+ if (!component) {
+ return context.components[name];
+ }
+ if (context.components[name]) {
+ warn$1(`Component "${name}" has already been registered in target app.`);
+ }
+ context.components[name] = component;
+ return app;
+ },
+ directive(name, directive) {
+ {
+ validateDirectiveName(name);
+ }
+ if (!directive) {
+ return context.directives[name];
+ }
+ if (context.directives[name]) {
+ warn$1(`Directive "${name}" has already been registered in target app.`);
+ }
+ context.directives[name] = directive;
+ return app;
+ },
+ // fixed by xxxxxx
+ mount() {
+ },
+ // fixed by xxxxxx
+ unmount() {
+ },
+ provide(key, value) {
+ if (key in context.provides) {
+ warn$1(
+ `App already provides property with key "${String(key)}". It will be overwritten with the new value.`
+ );
+ }
+ context.provides[key] = value;
+ return app;
+ },
+ runWithContext(fn) {
+ const lastApp = currentApp;
+ currentApp = app;
+ try {
+ return fn();
+ } finally {
+ currentApp = lastApp;
+ }
+ }
+ };
+ return app;
+ };
+}
+let currentApp = null;
+function provide(key, value) {
+ if (!currentInstance) {
+ {
+ warn$1(`provide() can only be used inside setup().`);
+ }
+ } else {
+ let provides = currentInstance.provides;
+ const parentProvides = currentInstance.parent && currentInstance.parent.provides;
+ if (parentProvides === provides) {
+ provides = currentInstance.provides = Object.create(parentProvides);
+ }
+ provides[key] = value;
+ if (currentInstance.type.mpType === "app") {
+ currentInstance.appContext.app.provide(key, value);
+ }
+ }
+}
+function inject(key, defaultValue, treatDefaultAsFactory = false) {
+ const instance = currentInstance || currentRenderingInstance;
+ if (instance || currentApp) {
+ const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;
+ if (provides && key in provides) {
+ return provides[key];
+ } else if (arguments.length > 1) {
+ return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
+ } else {
+ warn$1(`injection "${String(key)}" not found.`);
+ }
+ } else {
+ warn$1(`inject() can only be used inside setup() or functional components.`);
+ }
+}
+const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
+function onActivated(hook, target) {
+ registerKeepAliveHook(hook, "a", target);
+}
+function onDeactivated(hook, target) {
+ registerKeepAliveHook(hook, "da", target);
+}
+function registerKeepAliveHook(hook, type, target = currentInstance) {
+ const wrappedHook = hook.__wdc || (hook.__wdc = () => {
+ let current = target;
+ while (current) {
+ if (current.isDeactivated) {
+ return;
+ }
+ current = current.parent;
+ }
+ return hook();
+ });
+ injectHook(type, wrappedHook, target);
+ if (target) {
+ let current = target.parent;
+ while (current && current.parent) {
+ if (isKeepAlive(current.parent.vnode)) {
+ injectToKeepAliveRoot(wrappedHook, type, target, current);
+ }
+ current = current.parent;
+ }
+ }
+}
+function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {
+ const injected = injectHook(
+ type,
+ hook,
+ keepAliveRoot,
+ true
+ /* prepend */
+ );
+ onUnmounted(() => {
+ remove(keepAliveRoot[type], injected);
+ }, target);
+}
+function injectHook(type, hook, target = currentInstance, prepend = false) {
+ if (target) {
+ if (isRootHook(type)) {
+ target = target.root;
+ }
+ const hooks = target[type] || (target[type] = []);
+ const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
+ if (target.isUnmounted) {
+ return;
+ }
+ pauseTracking();
+ const reset = setCurrentInstance(target);
+ const res = callWithAsyncErrorHandling(hook, target, type, args);
+ reset();
+ resetTracking();
+ return res;
+ });
+ if (prepend) {
+ hooks.unshift(wrappedHook);
+ } else {
+ hooks.push(wrappedHook);
+ }
+ return wrappedHook;
+ } else {
+ const apiName = toHandlerKey(
+ (ErrorTypeStrings[type] || type.replace(/^on/, "")).replace(/ hook$/, "")
+ );
+ warn$1(
+ `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().`
+ );
+ }
+}
+const createHook = (lifecycle) => (hook, target = currentInstance) => (
+ // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
+ (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target)
+);
+const onBeforeMount = createHook("bm");
+const onMounted = createHook("m");
+const onBeforeUpdate = createHook("bu");
+const onUpdated = createHook("u");
+const onBeforeUnmount = createHook("bum");
+const onUnmounted = createHook("um");
+const onServerPrefetch = createHook("sp");
+const onRenderTriggered = createHook(
+ "rtg"
+);
+const onRenderTracked = createHook(
+ "rtc"
+);
+function onErrorCaptured(hook, target = currentInstance) {
+ injectHook("ec", hook, target);
+}
+const getPublicInstance = (i) => {
+ if (!i)
+ return null;
+ if (isStatefulComponent(i))
+ return getExposeProxy(i) || i.proxy;
+ return getPublicInstance(i.parent);
+};
+function getComponentInternalInstance(i) {
+ return i;
+}
+const publicPropertiesMap = (
+ // Move PURE marker to new line to workaround compiler discarding it
+ // due to type annotation
+ /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
+ // fixed by xxxxxx
+ $: getComponentInternalInstance,
+ // fixed by xxxxxx vue-i18n 在 dev 模式,访问了 $el,故模拟一个假的
+ // $el: i => i.vnode.el,
+ $el: (i) => i.__$el || (i.__$el = {}),
+ $data: (i) => i.data,
+ $props: (i) => shallowReadonly(i.props),
+ $attrs: (i) => shallowReadonly(i.attrs),
+ $slots: (i) => shallowReadonly(i.slots),
+ $refs: (i) => shallowReadonly(i.refs),
+ $parent: (i) => getPublicInstance(i.parent),
+ $root: (i) => getPublicInstance(i.root),
+ $emit: (i) => i.emit,
+ $options: (i) => resolveMergedOptions(i),
+ $forceUpdate: (i) => i.f || (i.f = () => {
+ i.effect.dirty = true;
+ queueJob(i.update);
+ }),
+ // $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy!)),// fixed by xxxxxx
+ $watch: (i) => instanceWatch.bind(i)
+ })
+);
+const isReservedPrefix = (key) => key === "_" || key === "$";
+const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn$1(state, key);
+const PublicInstanceProxyHandlers = {
+ get({ _: instance }, key) {
+ const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
+ if (key === "__isVue") {
+ return true;
+ }
+ let normalizedProps;
+ if (key[0] !== "$") {
+ const n2 = accessCache[key];
+ if (n2 !== void 0) {
+ switch (n2) {
+ case 1:
+ return setupState[key];
+ case 2:
+ return data[key];
+ case 4:
+ return ctx[key];
+ case 3:
+ return props[key];
+ }
+ } else if (hasSetupBinding(setupState, key)) {
+ accessCache[key] = 1;
+ return setupState[key];
+ } else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) {
+ accessCache[key] = 2;
+ return data[key];
+ } else if (
+ // only cache other properties when instance has declared (thus stable)
+ // props
+ (normalizedProps = instance.propsOptions[0]) && hasOwn$1(normalizedProps, key)
+ ) {
+ accessCache[key] = 3;
+ return props[key];
+ } else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) {
+ accessCache[key] = 4;
+ return ctx[key];
+ } else if (shouldCacheAccess) {
+ accessCache[key] = 0;
+ }
+ }
+ const publicGetter = publicPropertiesMap[key];
+ let cssModule, globalProperties;
+ if (publicGetter) {
+ if (key === "$attrs") {
+ track(instance, "get", key);
+ } else if (key === "$slots") {
+ track(instance, "get", key);
+ }
+ return publicGetter(instance);
+ } else if (
+ // css module (injected by vue-loader)
+ (cssModule = type.__cssModules) && (cssModule = cssModule[key])
+ ) {
+ return cssModule;
+ } else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) {
+ accessCache[key] = 4;
+ return ctx[key];
+ } else if (
+ // global properties
+ globalProperties = appContext.config.globalProperties, hasOwn$1(globalProperties, key)
+ ) {
+ {
+ return globalProperties[key];
+ }
+ } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
+ // to infinite warning loop
+ key.indexOf("__v") !== 0)) {
+ if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn$1(data, key)) {
+ warn$1(
+ `Property ${JSON.stringify(
+ key
+ )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
+ );
+ } else if (instance === currentRenderingInstance) {
+ warn$1(
+ `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
+ );
+ }
+ }
+ },
+ set({ _: instance }, key, value) {
+ const { data, setupState, ctx } = instance;
+ if (hasSetupBinding(setupState, key)) {
+ setupState[key] = value;
+ return true;
+ } else if (setupState.__isScriptSetup && hasOwn$1(setupState, key)) {
+ warn$1(`Cannot mutate