Explorar el Código

Merge branch 'master' of http://110.41.163.243:9980/kd-aiot/aiot-app

ysy hace 1 año
padre
commit
fa52667fd3
Se han modificado 62 ficheros con 3820 adiciones y 129 borrados
  1. 15 17
      .hbuilderx/launch.json
  2. 34 0
      api/mainData/index.js
  3. 34 2
      api/wt/index.js
  4. 1 0
      assets/svg-icons/出差审批 icon_1-16.svg
  5. 1 0
      assets/svg-icons/常用 icon_1-15.svg
  6. 0 0
      assets/svg-icons/平时考核 icon_1-22.svg
  7. 1 0
      assets/svg-icons/用印审批 icon_1-26.svg
  8. 1 0
      assets/svg-icons/议题管理 icon_3-10.svg
  9. 1 0
      assets/svg-icons/请休假管理 icon_1-13.svg
  10. 1 0
      assets/svg-icons/默认 icon_4-14.svg
  11. 60 0
      components/svg-icon.vue
  12. 163 0
      hybrid/html/a.html
  13. 156 0
      hybrid/html/c.html
  14. 0 0
      hybrid/html/resource/axios.min.js
  15. 37 0
      hybrid/html/resource/require.js
  16. 0 0
      hybrid/html/resource/uni.webview.js
  17. 0 0
      hybrid/html/resource/vant.min.js
  18. 0 0
      hybrid/html/resource/vantIndex.css
  19. 4 0
      hybrid/html/resource/vue.global.prod.js
  20. 10 0
      hybrid/html/resource/vue.min.js
  21. 5 0
      hybrid/html/vue-form-making/form-making-v3.umd.js
  22. 0 0
      hybrid/html/vue-form-making/index.css
  23. 0 4
      main.js
  24. 345 0
      package-lock.json
  25. 7 2
      package.json
  26. 18 0
      pages.json
  27. 5 2
      pages/home/components/navigation.vue
  28. 1 1
      pages/home/wt/components/detail.vue
  29. 35 0
      pages/home/wt/components/formParser/routerView.vue
  30. 3 3
      pages/home/wt/done/done.vue
  31. 33 14
      pages/home/wt/todo/todo.vue
  32. 23 1
      pages/index/index.vue
  33. 492 0
      pages/internalManagement/apply/index.vue
  34. 1 0
      static/icons/出差审批 icon_1-16.svg
  35. 1 0
      static/icons/常用 icon_1-15.svg
  36. 0 0
      static/icons/平时考核 icon_1-22.svg
  37. 1 0
      static/icons/用印审批 icon_1-26.svg
  38. 1 0
      static/icons/议题管理 icon_3-10.svg
  39. 1 0
      static/icons/请休假管理 icon_1-13.svg
  40. 1 0
      static/icons/默认 icon_4-14.svg
  41. 37 0
      static/require.js
  42. 86 0
      static/svg-icons-lib.js
  43. 10 0
      static/vue.min.js
  44. 24 0
      svgo.config.js
  45. 13 0
      uni_modules/uni-grid/changelog.md
  46. 127 0
      uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
  47. 142 0
      uni_modules/uni-grid/components/uni-grid/uni-grid.vue
  48. 86 0
      uni_modules/uni-grid/package.json
  49. 11 0
      uni_modules/uni-grid/readme.md
  50. 2 0
      uni_modules/uni-icons/changelog.md
  51. 81 81
      uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
  52. 3 2
      uni_modules/uni-icons/package.json
  53. 164 0
      uni_modules/zui-svg-icon/changelog.md
  54. 355 0
      uni_modules/zui-svg-icon/components/zui-svg-icon/zui-svg-icon.vue
  55. 86 0
      uni_modules/zui-svg-icon/package.json
  56. 249 0
      uni_modules/zui-svg-icon/readme.md
  57. 1 0
      uni_modules/zui-svg-icon/static/zui-svg-icon/zui-svg-icon-placeholder.svg
  58. 270 0
      uni_modules/zui-svg-icon/tools/generate-svg-icon.js
  59. 40 0
      uni_modules/zui-svg-icon/tools/svg-icons-lib.tpl.js
  60. 24 0
      uni_modules/zui-svg-icon/tools/svgo.config.js
  61. 11 0
      uni_modules/zui-svg-icon/utils/utils.js
  62. 506 0
      yarn.lock

+ 15 - 17
.hbuilderx/launch.json

@@ -4,29 +4,27 @@
     "version" : "0.0",
     "configurations" : [
         {
-        	"app-plus" : 
-        	{
-        		"launchtype" : "local"
-        	},
-        	"default" : 
-        	{
-        		"launchtype" : "local"
-        	},
-        	"h5" : 
-        	{
-        		"launchtype" : "local"
-        	},
-        	"mp-weixin" : 
-        	{
-        		"launchtype" : "local"
-        	},
-        	"type" : "uniCloud"
+            "app-plus" : {
+                "launchtype" : "local"
+            },
+            "default" : {
+                "launchtype" : "local"
+            },
+            "h5" : {
+                "launchtype" : "local"
+            },
+            "mp-weixin" : {
+                "launchtype" : "local"
+            },
+            "type" : "uniCloud"
         },
         {
+            "openVueDevtools" : true,
             "playground" : "standard",
             "type" : "uni-app:app-android"
         },
         {
+            "openVueDevtools" : true,
             "playground" : "custom",
             "type" : "uni-app:app-ios"
         },

+ 34 - 0
api/mainData/index.js

@@ -32,7 +32,41 @@ export async function getAsset(params) {
   }
   return Promise.reject(new Error(data.message));
 }
+/**
+ * 查询人员列表
+ * @param params 查询条件
+ */
+export async function getUserPage(params) {
 
+  const res = await request.get(Vue.prototype.apiUrl + `/main/user/getUserPage?`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 查询机构列表
+ * @param params 查询条件
+ */
+export async function listOrganizations (params) {
+  const res = await request.get(Vue.prototype.apiUrl + '/main/group/getGroupList', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+//h获取部门用户
+export async function getGroupUserTree(params) {
+  const res = await request.get(
+   Vue.prototype.apiUrl +  `/main/group/getGroupUserTree`,
+    params
+  );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 // // 根据工艺路线编码获取工序
 // export async function getProcessByRoute (data) {
 //   const res = await request.post(

+ 34 - 2
api/wt/index.js

@@ -369,5 +369,37 @@ export async function getList(params) {
 //
 //
 //
-
-
+//动态表单 工作流自定义权限过滤表单集合
+export async function getBpmCustomFormList(params) {
+  const res = await get(Vue.prototype.apiUrl + '/flowable/bpmcustomform/list', params );
+  if (res.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+  };
+//动态表单 我发起的申请
+export async function getProcessInstancePage(params) {
+	const res = await get(Vue.prototype.apiUrl + '/bpm/process-instance/my-page', params );
+	if (res.code == 0) {
+	  return res.data;
+	}
+	return Promise.reject(new Error(res.data.message));
+	};
+//动态表单 部门发起的申请
+export async function getProcessInstanceDeptPage(query) {
+	
+	const res = await get(Vue.prototype.apiUrl + '/bpm/process-instance/my-dept-page', params );
+	if (res.code == 0) {
+	  return res.data;
+	}
+	return Promise.reject(new Error(res.data.message));
+	};
+//动态表单 通知我的申请
+export async function getProcessInstanceNoticePage(data) {
+	
+	const res = await postJ(Vue.prototype.apiUrl + '/bpm/process-instance/my-notice-page', data );
+	if (res.code == 0) {
+	  return res.data;
+	}
+	return Promise.reject(new Error(res.data.message));
+	};

+ 1 - 0
assets/svg-icons/出差审批 icon_1-16.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579369801" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5192" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#7AD6A6" p-id="5193"></path><path d="M775.7312 387.703467l-200.4992 92.757333-78.7456 133.341867a15.940267 15.940267 0 0 1-7.253333 6.826666l-39.611734 18.773334a16.896 16.896 0 0 1-7.253333 0 16.418133 16.418133 0 0 1-10.632533-3.857067 16.913067 16.913067 0 0 1-5.307734-17.8688l24.644267-81.646933-48.315733 23.1936h-3.857067a92.279467 92.279467 0 0 1-96.631467-21.265067l-74.888533-69.563733a16.913067 16.913067 0 0 1-5.307733-14.984534 16.4352 16.4352 0 0 1 9.659733-12.561066l34.304-15.940267a16.913067 16.913067 0 0 1 13.038933 0l75.3664 35.754667 109.226667-60.398934-98.986667-48.315733a17.390933 17.390933 0 0 1-9.659733-15.4624 16.913067 16.913067 0 0 1 9.659733-15.4624l44.373334-20.770133a17.390933 17.390933 0 0 1 11.1104 0l166.1952 42.0352 90.8288-42.0352a91.306667 91.306667 0 0 1 83.626666 0 45.4144 45.4144 0 0 1 14.984534 86.4768z m-43.008 339.2h-459.451733a24.1664 24.1664 0 0 1 0-48.315734h459.451733a24.1664 24.1664 0 0 1 0 48.315734z" fill="#FFFFFF" p-id="5194"></path></svg>

+ 1 - 0
assets/svg-icons/常用 icon_1-15.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579499763" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5354" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#FFC667" p-id="5355"></path><path d="M591.496533 785.066667l69.2224-34.133334 39.0144-67.669333V768a17.066667 17.066667 0 0 1-17.066666 17.066667z m-42.427733 0H273.066667a17.066667 17.066667 0 0 1-17.066667-17.066667v-512a17.066667 17.066667 0 0 1 17.066667-17.066667h409.6a17.066667 17.066667 0 0 1 17.066666 17.066667v155.067733a53.1456 53.1456 0 0 0-3.652266 5.4784l-153.6 266.0352 6.6048 102.4zM375.466667 563.2a17.066667 17.066667 0 0 0 17.066666 17.066667h68.266667a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066667h-68.266667a17.066667 17.066667 0 0 0-17.066666 17.066667z m0-85.333333a17.066667 17.066667 0 0 0 17.066666 17.066666h170.666667a17.066667 17.066667 0 0 0 17.066667-17.066666 17.066667 17.066667 0 0 0-17.066667-17.066667h-170.666667a17.066667 17.066667 0 0 0-17.066666 17.066667z m0-85.333334a17.066667 17.066667 0 0 0 17.066666 17.066667h170.666667a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066666h-170.666667a17.066667 17.066667 0 0 0-17.066666 17.066666z m192.3072 305.9712l59.101866 34.133334-55.1424 27.306666z m17.066666-29.559466l102.4-177.3568 59.118934 34.133333-102.4 177.3568z m119.466667-206.933334l17.066667-29.559466a17.066667 17.066667 0 0 1 23.313066-6.2464l29.559467 17.066666a17.066667 17.066667 0 0 1 6.229333 23.313067l-17.066666 29.559467z" fill="#FFFFFF" p-id="5356"></path></svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/svg-icons/平时考核 icon_1-22.svg


+ 1 - 0
assets/svg-icons/用印审批 icon_1-26.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579038383" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5030" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#F2984E" p-id="5031"></path><path d="M273.066667 802.133333a17.066667 17.066667 0 0 1-17.066667-17.066666v-34.133334a17.066667 17.066667 0 0 1 17.066667-17.066666h477.866666a17.066667 17.066667 0 0 1 17.066667 17.066666v34.133334a17.066667 17.066667 0 0 1-17.066667 17.066666z m-4.949334-102.4a12.151467 12.151467 0 0 1-12.117333-12.202666v-64.375467a37.973333 37.973333 0 0 1 37.8368-38.144h95.914667a49.186133 49.186133 0 0 0 48.827733-45.346133c5.3248-69.307733-68.7616-102.4-68.7616-187.460267 0-72.106667 54.459733-130.338133 142.1824-130.338133s142.250667 58.146133 142.250667 130.338133c0 85.009067-74.103467 118.152533-68.744534 187.460267a49.1008 49.1008 0 0 0 48.810667 45.346133h95.8464a38.024533 38.024533 0 0 1 37.8368 38.126933v64.375467a12.1344 12.1344 0 0 1-12.100267 12.202667z" fill="#FFFFFF" p-id="5032"></path></svg>

+ 1 - 0
assets/svg-icons/议题管理 icon_3-10.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579518892" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5678" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#7AD6A6" p-id="5679"></path><path d="M733.866667 819.2h-392.533334V204.8h290.133334v134.4l34.133333-22.408533 34.133333 22.408533V204.8h34.133334a34.133333 34.133333 0 0 1 34.133333 34.133333v546.133334a34.133333 34.133333 0 0 1-34.133333 34.133333z m-443.733334 0a34.133333 34.133333 0 0 1-34.133333-34.133333V238.933333a34.133333 34.133333 0 0 1 34.133333-34.133333h17.066667v614.4h-17.066667z" fill="#FFFFFF" p-id="5680"></path></svg>

+ 1 - 0
assets/svg-icons/请休假管理 icon_1-13.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579593427" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6002" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#F96491" p-id="6003"></path><path d="M682.666667 768a136.533333 136.533333 0 1 1 136.533333-136.533333 136.686933 136.686933 0 0 1-136.533333 136.533333z m-156.4672-68.266667H273.066667a34.133333 34.133333 0 0 1-34.133334-34.133333v-341.333333a34.133333 34.133333 0 0 1 34.133334-34.133334h68.266666v34.133334a51.2 51.2 0 1 0 102.4 0v-34.133334h85.333334v34.133334a51.2 51.2 0 1 0 102.4 0v-34.133334h85.333333a34.133333 34.133333 0 0 1 34.133333 34.133334v150.749866A170.666667 170.666667 0 0 0 526.199467 699.733333zM358.4 529.066667a17.066667 17.066667 0 1 0 0 34.133333h34.133333a17.066667 17.066667 0 1 0 0-34.133333z m119.466667-85.333334a17.066667 17.066667 0 1 0 0 34.133334h34.133333a17.066667 17.066667 0 1 0 0-34.133334z m-119.466667 0a17.066667 17.066667 0 1 0 0 34.133334h34.133333a17.066667 17.066667 0 0 0 0-34.133334z m221.866667-102.4a17.066667 17.066667 0 0 1-17.066667-17.066666v-68.266667a17.066667 17.066667 0 1 1 34.133333 0v68.266667a17.066667 17.066667 0 0 1-17.066666 17.066666z m-187.733334 0a17.066667 17.066667 0 0 1-17.066666-17.066666v-68.266667a17.066667 17.066667 0 1 1 34.133333 0v68.266667a17.066667 17.066667 0 0 1-17.066667 17.066666z" fill="#FFFFFF" p-id="6004"></path><path d="M750.933333 665.6h-68.266666a17.066667 17.066667 0 0 1-17.066667-17.066667v-68.266666a17.066667 17.066667 0 0 1 34.133333 0v51.2h51.2a17.066667 17.066667 0 0 1 0 34.133333z" fill="#F96491" p-id="6005"></path></svg>

+ 1 - 0
assets/svg-icons/默认 icon_4-14.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579537692" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5840" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#F2984E" p-id="5841"></path><path d="M733.866667 750.933333h-443.733334a34.133333 34.133333 0 0 1-34.133333-34.133333V375.466667a34.133333 34.133333 0 0 1 34.133333-34.133334h68.266667v34.133334a51.2 51.2 0 0 0 51.2 51.2 51.2 51.2 0 0 0 51.2-51.2v-34.133334h85.333333v34.133334a51.2 51.2 0 0 0 51.2 51.2 51.2 51.2 0 0 0 51.2-51.2v-34.133334h85.333334a34.133333 34.133333 0 0 1 34.133333 34.133334v341.333333a34.133333 34.133333 0 0 1-34.133333 34.133333z m-273.066667-153.6a17.066667 17.066667 0 0 0-17.066667 17.066667 17.066667 17.066667 0 0 0 17.066667 17.066667h102.4a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066667z m-34.133333-68.266666a17.066667 17.066667 0 0 0-17.066667 17.066666 17.066667 17.066667 0 0 0 17.066667 17.066667h170.666666a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066666z m170.666666-136.533334a17.066667 17.066667 0 0 1-17.066666-17.066666v-68.266667a17.066667 17.066667 0 0 1 17.066666-17.066667 17.066667 17.066667 0 0 1 17.066667 17.066667v68.266667a17.066667 17.066667 0 0 1-17.066667 17.066666z m-187.733333 0a17.066667 17.066667 0 0 1-17.066667-17.066666v-68.266667a17.066667 17.066667 0 0 1 17.066667-17.066667 17.066667 17.066667 0 0 1 17.066667 17.066667v68.266667a17.066667 17.066667 0 0 1-17.066667 17.066666z" fill="#FFFFFF" p-id="5842"></path></svg>

+ 60 - 0
components/svg-icon.vue

@@ -0,0 +1,60 @@
+<template>
+ <svg  :class="svgClass" aria-hidden="true" v-on="$listeners">
+   <use :xlink:href="iconName" />
+ </svg>
+  
+</template>
+
+<script>
+  // doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
+  function isExternal(path) {
+    return /^(https?:|mailto:|tel:)/.test(path);
+  }
+
+  export default {
+    name: 'SvgIcon',
+    props: {
+      iconClass: {
+        type: String,
+        required: true
+      },
+      className: {
+        type: String,
+        default: ''
+      }
+    },
+    computed: {
+      iconName() {
+        return `#icon-${this.iconClass}`;
+      },
+      svgClass() {
+        if (this.className) {
+          return `svg-icon ${this.className}`;
+        }
+        return 'svg-icon';
+      },
+    }
+  };
+</script>
+
+<style scoped>
+  .svg-icon {
+    width: 1em;
+    height: 1em;
+    vertical-align: -0.15em;
+    fill: currentColor;
+    overflow: hidden;
+  }
+  .svg-icon-set {
+    width: 2em;
+    height: 2em;
+    vertical-align: -0.15em;
+    fill: currentColor;
+    overflow: hidden;
+  }
+  .svg-external-icon {
+    background-color: currentColor;
+    mask-size: cover !important;
+    display: inline-block;
+  }
+</style>

+ 163 - 0
hybrid/html/a.html

@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<meta name="viewport"
+			content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
+		<link rel="stylesheet" href="./resource/vantIndex.css" />
+		<link rel="stylesheet" href="./vue-form-making/index.css">
+	</head>
+	<body>
+		<style>
+			:root:root {
+				--van-nav-bar-background: rgb(21, 122, 44);
+				--van-nav-bar-title-text-color: rgb(255, 255, 255);
+				--van-nav-bar-icon-color: rgb(255, 255, 255);
+			}
+		</style>
+		<div id="app">
+			<van-nav-bar @click-left="onClickLeft" style="background-color: rgb(21, 122, 44);color: rgb(255, 255, 255);"
+				:title="title" left-arrow :safe-area-inset-top='true' :placeholder='true' :fixed='true'></van-nav-bar>
+			<fm-generate-vant-form v-if='isFlag' :data="jsonData" :value="form.valueJson" ref="generateForm"
+				:edit='isEdit'>
+			</fm-generate-vant-form>
+			<div>
+				<!-- <van-form>
+					<van-cell-group inset>
+						<van-field type="textarea" v-model="form.reason" label="意见" placeholder="" rows="2" autosize
+							show-word-limit />
+					</van-cell-group>
+				</van-form> -->
+				<div
+					style="display: flex;justify-content: space-between; padding: 30px 30px; position: fixed; bottom: 0; width: 100%; height: 80px;">
+					<van-button style="width:48%" type="primary" @click="handleAudit(1)">提交
+					</van-button>
+					<van-button style="width:48%" type="danger" @click="onClickLeft">取消
+					</van-button>
+				</div>
+
+
+			</div>
+		</div>
+		<script src="./resource/vue.global.prod.js"></script>
+		<script src="./resource/vant.min.js"></script>
+		<script src="./resource/axios.min.js"></script>
+		<script src="./resource/uni.webview.js"></script>
+		<script src="./vue-form-making/form-making-v3.umd.js"></script>
+		<script>
+			const APIUrl = 'http://192.168.1.251:51001'
+			let EnvObj = {}
+			uni.getEnv(function(res) {
+				EnvObj = res;
+				console.log('当前环境:' + JSON.stringify(res));
+			});
+			Vue.createApp({
+				data() {
+					return {
+						isFlag: false,
+						isEdit: true,
+						title: '',
+						jsonData: {},
+						editData: {},
+						form: {},
+						headers: {},
+					}
+				},
+				created() {
+					this.headers = this.getQueryParams('headers');
+					let params = this.getQueryParams('params');
+					axios({
+						method: 'get',
+						url: APIUrl + `/flowable/bpmcustomform/getById/${params.id}`,
+						headers: this.headers,
+					}).then((res) => {
+						if (res.data.code != '-1') {
+							this.form = res.data.data
+							this.title = this.form.name
+							this.jsonData = JSON.parse(res.data.data.formJson.makingJson);
+							this.jsonData.list.forEach(item => {
+								item.options.headers = [{
+									key: 'Authorization',
+									value: this.headers.Authorization
+								}]
+								item.options.action = item.options.action && item.options.action.replace(
+									'/api', APIUrl)
+								if (item.type == "deptAndUserCascader") {
+									item.type = 'cascader'
+								}
+								if (item.type == "deptCascader") {
+									item.type = 'cascader'
+								}
+								if (item.type == "userSelect") {
+									item.type = 'select'
+								}
+							})
+							this.jsonData.config.dataSource && this.jsonData.config.dataSource.forEach(item => {
+								item.headers = {
+									Authorization: this.headers.Authorization
+								}
+								item.url = item.url && item.url.replace('/api', APIUrl)
+							})
+							this.isFlag = true
+						}
+					});
+					// axios({
+					// 	method: 'get',
+					// 	url: APIUrl + `/bpm/task/list-by-process-instance-id?processInstanceId=${params.id}`,
+					// 	headers: this.headers,
+					// }).then((res) => {
+					// 	console.log(res)
+					// 	if (res.data.code != '-1') {
+						
+					// 	}
+					// });
+				
+				
+				},
+				methods: {
+					getQueryParams(queryName) {
+						const urlSearchParams = new URLSearchParams(window.location.search);
+						const query = urlSearchParams.get(queryName);
+						return JSON.parse(query);
+					},
+					generateFormValid(validate = true) {
+						return this.$refs.generateForm.getData(validate).then((data) => {
+							return data;
+						});
+					},
+					async handleAudit(status) {
+						this.form.valueJson = await this.generateFormValid();
+						console.log(this.form.valueJson)
+						this.form.processType = '1';
+						let API = APIUrl + '/bpm/process-instance/create'
+						axios({
+							method: 'post',
+							url: API,
+							headers: this.headers,
+							data: {
+								...this.form,
+							}
+						}).then((res) => {
+							if (res.data.code != '-1') {
+								vant.showNotify({
+									type: 'success',
+									message: `提交成功!`,
+									duration: 1000,
+								});
+								setTimeout(() => {
+									this.onClickLeft()
+								}, 1000)
+							}
+						});
+					},
+					onClickLeft() {
+						uni.navigateBack({
+							delta: 1
+						});
+					}
+				}
+
+			}).use(vant).use(FormMakingV3).mount('#app')
+		</script>
+	</body>
+</html>

+ 156 - 0
hybrid/html/c.html

@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<meta name="viewport"
+			content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
+		<link rel="stylesheet" href="./resource/vantIndex.css" />
+		<link rel="stylesheet" href="./vue-form-making/index.css">
+	</head>
+	<body>
+		<style>
+			:root:root {
+				--van-nav-bar-background: rgb(21, 122, 44);
+				--van-nav-bar-title-text-color: rgb(255, 255, 255);
+				--van-nav-bar-icon-color: rgb(255, 255, 255);
+			}
+		</style>
+		<div id="app">
+			<van-nav-bar @click-left="onClickLeft" style="background-color: rgb(21, 122, 44);color: rgb(255, 255, 255);"
+				title="审核" left-arrow :safe-area-inset-top='true' :placeholder='true' :fixed='true'></van-nav-bar>
+			<fm-generate-vant-form v-if='isFlag' :data="jsonData" :value="form.formVariables" ref="generateForm" :edit='false'>
+			</fm-generate-vant-form>
+			<div>
+				<van-form>
+					<van-cell-group inset>
+						<van-field type="textarea" v-model="form.reason" label="意见" placeholder="" rows="2" autosize
+							show-word-limit />
+					</van-cell-group>
+				</van-form>
+				<div
+					style="display: flex;justify-content: space-between; padding: 30px 30px; position: fixed; bottom: 0; width: 100%; height: 80px;">
+					<van-button style="width:48%" type="primary" @click="handleAudit(1)">通过
+					</van-button>
+					<van-button style="width:48%" type="danger" @click="handleAudit(0)">驳回
+					</van-button>
+				</div>
+
+
+			</div>
+		</div>
+		<script src="./resource/vue.global.prod.js"></script>
+		<script src="./resource/vant.min.js"></script>
+		<script src="./resource/axios.min.js"></script>
+		<script src="./resource/uni.webview.js"></script>
+		<script src="./vue-form-making/form-making-v3.umd.js"></script>
+		<script>
+			const APIUrl = 'http://192.168.1.105:18086'
+			let EnvObj = {}
+			uni.getEnv(function(res) {
+				EnvObj = res;
+				console.log('当前环境:' + JSON.stringify(res));
+			});
+			Vue.createApp({
+				data() {
+					return {
+						isFlag:false,
+						isEdit:true,
+						jsonData: {},
+						editData: {},
+						form: {},
+						headers: {},
+					}
+				},
+				created() {
+					this.headers = this.getQueryParams('headers');
+					let params = this.getQueryParams('params');
+					console.log(params)
+					axios({
+						method: 'get',
+						url: APIUrl + `/bpm/process-instance/get?id=${params.processInstanceId}`,
+						headers: this.headers,
+					}).then((res) => {
+						console.log(res)
+						if (res.data.code != '-1') {
+							this.form = res.data.data
+							this.form.submitId = params.id
+							this.jsonData = JSON.parse(res.data.data.formJson.makingJson);
+							this.jsonData.list.forEach(item=>{
+								item.options.headers = [{key:'Authorization',value:this.headers.Authorization}]
+								if(item.type=="deptAndUserCascader"){
+									item.type = 'cascader'
+								}
+								if(item.type=="deptCascader"){
+									item.type = 'cascader'
+								}
+								if(item.type=="userSelect"){
+									item.type = 'select'
+								}
+							})
+							this.jsonData.config.dataSource && this.jsonData.config.dataSource.forEach(item => {
+								item.headers = {
+									Authorization: this.headers.Authorization
+								}
+								item.url = item.url && item.url.replace('/api', APIUrl)
+							})
+							this.isFlag = true
+							console.log(this.jsonData)
+							
+						}
+					});
+				},
+				methods: {
+					getQueryParams(queryName) {
+						const urlSearchParams = new URLSearchParams(window.location.search);
+						const query = urlSearchParams.get(queryName);
+						return JSON.parse(query);
+					},
+					async handleAudit(status) {
+						await this._approveTaskWithVariables(status);
+					},
+					async _approveTaskWithVariables(status) {
+						let variables = {
+							pass: !!status,
+							...this.form.formVariables
+						};
+						if (!this.form.reason) this.form.reason = !!status ? '通过' : '驳回'
+						let API = !!status ? APIUrl + '/bpm/task/approveTaskWithVariables' :
+							APIUrl + '/bpm/task/reject'
+						axios({
+							method: 'put',
+							url: API,
+							headers: this.headers,
+							data: {
+								id: this.form.submitId,
+								reason: this.form.reason,
+								variables
+							}
+						}).then((res) => {
+							if (res.data.code != '-1') {
+								let params = {
+									status,
+									title: status === 0 ? '驳回' : ''
+								}
+								vant.showNotify({
+									type: 'success',
+									message: `审批${params.title}成功!`,
+									duration: 1000,
+								});
+								setTimeout(() => {
+									this.onClickLeft()
+								}, 1000)
+							}
+						});
+
+					},
+					onClickLeft() {
+						uni.navigateBack({
+							delta: 1
+						});
+					}
+				}
+
+			}).use(vant).use(FormMakingV3).mount('#app')
+		</script>
+	</body>
+</html>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
hybrid/html/resource/axios.min.js


+ 37 - 0
hybrid/html/resource/require.js

@@ -0,0 +1,37 @@
+/*
+ RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
+ Available via the MIT or new BSD license.
+ see: http://github.com/jrburke/requirejs for details
+*/
+var requirejs,require,define;
+(function(ca){function G(b){return"[object Function]"===M.call(b)}function H(b){return"[object Array]"===M.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function U(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function j(b,c){return s(b,c)&&b[c]}function B(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function V(b,c,d,g){c&&B(c,function(c,h){if(d||!s(b,h))g&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
+RegExp)?(b[h]||(b[h]={}),V(b[h],c,d,g)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function da(b){throw b;}function ea(b){if(!b)return b;var c=ca;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ha(b){function c(a,e,b){var f,n,c,d,g,h,i,I=e&&e.split("/");n=I;var m=l.map,k=m&&m["*"];if(a&&"."===a.charAt(0))if(e){n=
+I.slice(0,I.length-1);a=a.split("/");e=a.length-1;l.nodeIdCompat&&R.test(a[e])&&(a[e]=a[e].replace(R,""));n=a=n.concat(a);d=n.length;for(e=0;e<d;e++)if(c=n[e],"."===c)n.splice(e,1),e-=1;else if(".."===c)if(1===e&&(".."===n[2]||".."===n[0]))break;else 0<e&&(n.splice(e-1,2),e-=2);a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if(b&&m&&(I||k)){n=a.split("/");e=n.length;a:for(;0<e;e-=1){d=n.slice(0,e).join("/");if(I)for(c=I.length;0<c;c-=1)if(b=j(m,I.slice(0,c).join("/")))if(b=j(b,d)){f=b;
+g=e;break a}!h&&(k&&j(k,d))&&(h=j(k,d),i=e)}!f&&h&&(f=h,g=i);f&&(n.splice(0,g,f),a=n.join("/"))}return(f=j(l.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(e){if(e.getAttribute("data-requiremodule")===a&&e.getAttribute("data-requirecontext")===i.contextName)return e.parentNode.removeChild(e),!0})}function g(a){var e=j(l.paths,a);if(e&&H(e)&&1<e.length)return e.shift(),i.require.undef(a),i.require([a]),!0}function u(a){var e,b=a?a.indexOf("!"):-1;-1<b&&(e=a.substring(0,
+b),a=a.substring(b+1,a.length));return[e,a]}function m(a,e,b,f){var n,d,g=null,h=e?e.name:null,l=a,m=!0,k="";a||(m=!1,a="_@r"+(M+=1));a=u(a);g=a[0];a=a[1];g&&(g=c(g,h,f),d=j(p,g));a&&(g?k=d&&d.normalize?d.normalize(a,function(a){return c(a,h,f)}):c(a,h,f):(k=c(a,h,f),a=u(k),g=a[0],k=a[1],b=!0,n=i.nameToUrl(k)));b=g&&!d&&!b?"_unnormalized"+(Q+=1):"";return{prefix:g,name:k,parentMap:e,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(g?g+"!"+k:k)+b}}function q(a){var e=a.id,b=j(k,e);b||(b=k[e]=new i.Module(a));
+return b}function r(a,e,b){var f=a.id,n=j(k,f);if(s(p,f)&&(!n||n.defineEmitComplete))"defined"===e&&b(p[f]);else if(n=q(a),n.error&&"error"===e)b(n.error);else n.on(e,b)}function w(a,e){var b=a.requireModules,f=!1;if(e)e(a);else if(v(b,function(e){if(e=j(k,e))e.error=a,e.events.error&&(f=!0,e.emit("error",a))}),!f)h.onError(a)}function x(){S.length&&(ia.apply(A,[A.length,0].concat(S)),S=[])}function y(a){delete k[a];delete W[a]}function F(a,e,b){var f=a.map.id;a.error?a.emit("error",a.error):(e[f]=
+!0,v(a.depMaps,function(f,c){var d=f.id,g=j(k,d);g&&(!a.depMatched[c]&&!b[d])&&(j(e,d)?(a.defineDep(c,p[d]),a.check()):F(g,e,b))}),b[f]=!0)}function D(){var a,e,b=(a=1E3*l.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],c=[],h=!1,k=!0;if(!X){X=!0;B(W,function(a){var i=a.map,m=i.id;if(a.enabled&&(i.isDefine||c.push(a),!a.error))if(!a.inited&&b)g(m)?h=e=!0:(f.push(m),d(m));else if(!a.inited&&(a.fetched&&i.isDefine)&&(h=!0,!i.prefix))return k=!1});if(b&&f.length)return a=C("timeout","Load timeout for modules: "+
+f,null,f),a.contextName=i.contextName,w(a);k&&v(c,function(a){F(a,{},{})});if((!b||e)&&h)if((z||fa)&&!Y)Y=setTimeout(function(){Y=0;D()},50);X=!1}}function E(a){s(p,a[0])||q(m(a[0],null,!0)).init(a[1],a[2])}function K(a){var a=a.currentTarget||a.srcElement,e=i.onScriptLoad;a.detachEvent&&!Z?a.detachEvent("onreadystatechange",e):a.removeEventListener("load",e,!1);e=i.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener("error",e,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function L(){var a;
+for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var X,$,i,N,Y,l={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},k={},W={},aa={},A=[],p={},T={},ba={},M=1,Q=1;N={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?p[a.map.id]=a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?
+a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return j(l.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};$=function(a){this.events=j(aa,a.id)||{};this.map=a;this.shim=j(l.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,e,b,f){f=f||{};if(!this.inited){this.factory=e;if(b)this.on("error",b);else this.events.error&&(b=t(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
+b;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,e){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=e)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
+this.map.url;T[a]||(T[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,e,b=this.map.id;e=this.depExports;var f=this.exports,c=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&
+(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
+this.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,"defined",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||""),f=m(a.prefix+"!"+J,this.map.parentMap),r(f,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);
+if(this.events.error)g.on("error",t(this,function(a){this.emit("error",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C("fromtexteval",
+"fromText eval for "+b+" failed: "+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if("string"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,"defined",t(this,function(a){this.defineDep(b,
+a);this.check()}));this.errback&&r(a,"error",t(this,this.errback))}c=a.id;f=k[c];!s(N,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,
+nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,
+a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+"/"+(a.main||"main").replace(ja,"").replace(R,"")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=
+!0);if("string"===typeof f){if(G(c))return w(C("requireargs","Invalid require call"),d);if(a&&s(N,f))return N[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C("notloaded",'Module name "'+j+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[j]}L();i.nextTick(function(){L();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==
+d&&(!("."===g||".."===g)||1<d))e=b.substring(d,b.length),b=b.substring(0,d);return i.nameToUrl(c(b,a&&a.id,!0),e,!0)},defined:function(b){return s(p,m(b,a,!1,!0).id)},specified:function(b){b=m(b,a,!1,!0).id;return s(p,b)||s(k,b)}});a||(g.undef=function(b){x();var c=m(b,a,!0),e=j(k,b);d(b);delete p[b];delete T[c.url];delete aa[b];U(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&(aa[b]=e.events),y(b))});return g},enable:function(a){j(k,a.id)&&q(a).enable()},completeLoad:function(a){var b,
+c,f=j(l.shim,a)||{},d=f.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=j(k,a);if(!b&&!s(p,a)&&c&&!c.inited){if(l.enforceDefine&&(!d||!ea(d)))return g(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,f.deps||[],f.exportsFn])}D()},nameToUrl:function(a,b,c){var f,d,g;(f=j(l.pkgs,a))&&(a=f);if(f=j(ba,a))return i.nameToUrl(f,b,c);if(h.jsExtRegExp.test(a))f=a+(b||"");else{f=l.paths;a=a.split("/");for(d=a.length;0<d;d-=1)if(g=a.slice(0,
+d).join("/"),g=j(f,g)){H(g)&&(g=g[0]);a.splice(0,d,g);break}f=a.join("/");f+=b||(/^data\:|\?/.test(f)||c?"":".js");f=("/"===f.charAt(0)||f.match(/^[\w\+\.\-]+:/)?"":l.baseUrl)+f}return l.urlArgs?f+((-1===f.indexOf("?")?"?":"&")+l.urlArgs):f},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=K(a),i.completeLoad(a.id)},onScriptError:function(a){var b=K(a);if(!g(b.id))return w(C("scripterror",
+"Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var h,x,y,D,K,E,P,L,q,Q,la=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ma=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,R=/\.js$/,ja=/^\.\//;x=Object.prototype;var M=x.toString,ga=x.hasOwnProperty,ia=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),fa=!z&&"undefined"!==typeof importScripts,ka=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,
+Z="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},r={},S=[],O=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;r=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(r=require,require=void 0);h=requirejs=function(b,c,d,g){var u,m="_";!H(b)&&"string"!==typeof b&&(u=b,H(c)?(b=c,c=d,d=g):b=[]);u&&u.context&&(m=u.context);(g=j(F,m))||(g=F[m]=h.s.newContext(m));u&&g.configure(u);return g.require(b,c,d)};h.config=function(b){return h(b)};
+h.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version="2.1.11";h.jsExtRegExp=/^\/|:|\?|\.js$/;h.isBrowser=z;x=h.s={contexts:F,newContext:ha};h({});v(["toUrl","undef","defined","specified"],function(b){h[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;h.onError=da;h.createNode=function(b){var c=
+b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};h.load=function(b,c,d){var g=b&&b.config||{};if(z)return g=h.createNode(g,c,d),g.setAttribute("data-requirecontext",b.contextName),g.setAttribute("data-requiremodule",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf("[native code"))&&!Z?(O=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):
+(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,L=g,D?y.insertBefore(g,D):y.appendChild(g),L=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(K=b.getAttribute("data-main"))return q=K,r.baseUrl||(E=q.split("/"),q=E.pop(),Q=E.length?E.join("/")+"/":"./",r.baseUrl=
+Q),q=q.replace(R,""),h.jsExtRegExp.test(q)&&(q=K),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(g=L))P&&"interactive"===P.readyState||U(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),g=P;g&&(b||
+(b=g.getAttribute("data-requiremodule")),h=F[g.getAttribute("data-requirecontext")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);
+

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
hybrid/html/resource/uni.webview.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
hybrid/html/resource/vant.min.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
hybrid/html/resource/vantIndex.css


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 4 - 0
hybrid/html/resource/vue.global.prod.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 10 - 0
hybrid/html/resource/vue.min.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 5 - 0
hybrid/html/vue-form-making/form-making-v3.umd.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
hybrid/html/vue-form-making/index.css


+ 0 - 4
main.js

@@ -3,9 +3,6 @@ import App from "./App";
 import store from "./store";
 Vue.prototype.$store = store;
 
-
-
-
 // uView配置
 import uView from "@/uni_modules/uview-ui";
 Vue.use(uView);
@@ -73,4 +70,3 @@ export function createApp() {
   };
 }
 // #endif
-  

+ 345 - 0
package-lock.json

@@ -14,6 +14,7 @@
 				"lodash": "^4.17.21",
 				"mpvue-echarts": "^0.3.2",
 				"mqtt": "^4.3.7",
+				"svgo": "^3.3.2",
 				"vconsole": "^3.15.1"
 			}
 		},
@@ -28,6 +29,14 @@
 				"node": ">=6.9.0"
 			}
 		},
+		"node_modules/@trysound/sax": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",
+			"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
 		"node_modules/balanced-match": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -48,6 +57,11 @@
 				"readable-stream": "^3.4.0"
 			}
 		},
+		"node_modules/boolbase": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
+			"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+		},
 		"node_modules/brace-expansion": {
 			"version": "1.1.11",
 			"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -71,6 +85,14 @@
 			"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
 			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
 		},
+		"node_modules/commander": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz",
+			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+			"engines": {
+				"node": ">= 10"
+			}
+		},
 		"node_modules/commist": {
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/commist/-/commist-1.1.0.tgz",
@@ -113,6 +135,74 @@
 			"integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==",
 			"hasInstallScript": true
 		},
+		"node_modules/css-select": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz",
+			"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+			"dependencies": {
+				"boolbase": "^1.0.0",
+				"css-what": "^6.1.0",
+				"domhandler": "^5.0.2",
+				"domutils": "^3.0.1",
+				"nth-check": "^2.0.1"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/fb55"
+			}
+		},
+		"node_modules/css-tree": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-2.3.1.tgz",
+			"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+			"dependencies": {
+				"mdn-data": "2.0.30",
+				"source-map-js": "^1.0.1"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+			}
+		},
+		"node_modules/css-what": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz",
+			"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+			"engines": {
+				"node": ">= 6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/fb55"
+			}
+		},
+		"node_modules/csso": {
+			"version": "5.0.5",
+			"resolved": "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz",
+			"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+			"dependencies": {
+				"css-tree": "~2.2.0"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+				"npm": ">=7.0.0"
+			}
+		},
+		"node_modules/csso/node_modules/css-tree": {
+			"version": "2.2.1",
+			"resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz",
+			"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+			"dependencies": {
+				"mdn-data": "2.0.28",
+				"source-map-js": "^1.0.1"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+				"npm": ">=7.0.0"
+			}
+		},
+		"node_modules/csso/node_modules/mdn-data": {
+			"version": "2.0.28",
+			"resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz",
+			"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
+		},
 		"node_modules/dayjs": {
 			"version": "1.11.11",
 			"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz",
@@ -134,6 +224,57 @@
 				}
 			}
 		},
+		"node_modules/dom-serializer": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz",
+			"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+			"dependencies": {
+				"domelementtype": "^2.3.0",
+				"domhandler": "^5.0.2",
+				"entities": "^4.2.0"
+			},
+			"funding": {
+				"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+			}
+		},
+		"node_modules/domelementtype": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz",
+			"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/fb55"
+				}
+			]
+		},
+		"node_modules/domhandler": {
+			"version": "5.0.3",
+			"resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz",
+			"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+			"dependencies": {
+				"domelementtype": "^2.3.0"
+			},
+			"engines": {
+				"node": ">= 4"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/domhandler?sponsor=1"
+			}
+		},
+		"node_modules/domutils": {
+			"version": "3.2.2",
+			"resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz",
+			"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+			"dependencies": {
+				"dom-serializer": "^2.0.0",
+				"domelementtype": "^2.3.0",
+				"domhandler": "^5.0.3"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/domutils?sponsor=1"
+			}
+		},
 		"node_modules/duplexify": {
 			"version": "4.1.3",
 			"resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.3.tgz",
@@ -162,6 +303,17 @@
 				"once": "^1.4.0"
 			}
 		},
+		"node_modules/entities": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+			"engines": {
+				"node": ">=0.12"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/entities?sponsor=1"
+			}
+		},
 		"node_modules/fs.realpath": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -240,6 +392,11 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/mdn-data": {
+			"version": "2.0.30",
+			"resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.30.tgz",
+			"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
+		},
 		"node_modules/minimatch": {
 			"version": "3.1.2",
 			"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
@@ -313,6 +470,17 @@
 			"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
 			"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
 		},
+		"node_modules/nth-check": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
+			"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+			"dependencies": {
+				"boolbase": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/fb55/nth-check?sponsor=1"
+			}
+		},
 		"node_modules/number-allocator": {
 			"version": "1.0.14",
 			"resolved": "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz",
@@ -338,6 +506,11 @@
 				"node": ">=0.10.0"
 			}
 		},
+		"node_modules/picocolors": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+		},
 		"node_modules/process-nextick-args": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -385,6 +558,14 @@
 			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
 			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
 		},
+		"node_modules/source-map-js": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
 		"node_modules/split2": {
 			"version": "3.2.2",
 			"resolved": "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz",
@@ -406,6 +587,30 @@
 				"safe-buffer": "~5.2.0"
 			}
 		},
+		"node_modules/svgo": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmmirror.com/svgo/-/svgo-3.3.2.tgz",
+			"integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+			"dependencies": {
+				"@trysound/sax": "0.2.0",
+				"commander": "^7.2.0",
+				"css-select": "^5.1.0",
+				"css-tree": "^2.3.1",
+				"css-what": "^6.1.0",
+				"csso": "^5.0.5",
+				"picocolors": "^1.0.0"
+			},
+			"bin": {
+				"svgo": "bin/svgo"
+			},
+			"engines": {
+				"node": ">=14.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/svgo"
+			}
+		},
 		"node_modules/tslib": {
 			"version": "2.3.0",
 			"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
@@ -488,6 +693,11 @@
 				"regenerator-runtime": "^0.14.0"
 			}
 		},
+		"@trysound/sax": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",
+			"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
+		},
 		"balanced-match": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -508,6 +718,11 @@
 				"readable-stream": "^3.4.0"
 			}
 		},
+		"boolbase": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
+			"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+		},
 		"brace-expansion": {
 			"version": "1.1.11",
 			"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -531,6 +746,11 @@
 			"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
 			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
 		},
+		"commander": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz",
+			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+		},
 		"commist": {
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/commist/-/commist-1.1.0.tgz",
@@ -566,6 +786,56 @@
 			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.37.0.tgz",
 			"integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug=="
 		},
+		"css-select": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz",
+			"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+			"requires": {
+				"boolbase": "^1.0.0",
+				"css-what": "^6.1.0",
+				"domhandler": "^5.0.2",
+				"domutils": "^3.0.1",
+				"nth-check": "^2.0.1"
+			}
+		},
+		"css-tree": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-2.3.1.tgz",
+			"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+			"requires": {
+				"mdn-data": "2.0.30",
+				"source-map-js": "^1.0.1"
+			}
+		},
+		"css-what": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz",
+			"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
+		},
+		"csso": {
+			"version": "5.0.5",
+			"resolved": "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz",
+			"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+			"requires": {
+				"css-tree": "~2.2.0"
+			},
+			"dependencies": {
+				"css-tree": {
+					"version": "2.2.1",
+					"resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz",
+					"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+					"requires": {
+						"mdn-data": "2.0.28",
+						"source-map-js": "^1.0.1"
+					}
+				},
+				"mdn-data": {
+					"version": "2.0.28",
+					"resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz",
+					"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
+				}
+			}
+		},
 		"dayjs": {
 			"version": "1.11.11",
 			"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz",
@@ -579,6 +849,39 @@
 				"ms": "2.1.2"
 			}
 		},
+		"dom-serializer": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz",
+			"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+			"requires": {
+				"domelementtype": "^2.3.0",
+				"domhandler": "^5.0.2",
+				"entities": "^4.2.0"
+			}
+		},
+		"domelementtype": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz",
+			"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+		},
+		"domhandler": {
+			"version": "5.0.3",
+			"resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz",
+			"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+			"requires": {
+				"domelementtype": "^2.3.0"
+			}
+		},
+		"domutils": {
+			"version": "3.2.2",
+			"resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz",
+			"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+			"requires": {
+				"dom-serializer": "^2.0.0",
+				"domelementtype": "^2.3.0",
+				"domhandler": "^5.0.3"
+			}
+		},
 		"duplexify": {
 			"version": "4.1.3",
 			"resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.3.tgz",
@@ -607,6 +910,11 @@
 				"once": "^1.4.0"
 			}
 		},
+		"entities": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+		},
 		"fs.realpath": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -676,6 +984,11 @@
 				"yallist": "^4.0.0"
 			}
 		},
+		"mdn-data": {
+			"version": "2.0.30",
+			"resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.30.tgz",
+			"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
+		},
 		"minimatch": {
 			"version": "3.1.2",
 			"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
@@ -738,6 +1051,14 @@
 			"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
 			"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
 		},
+		"nth-check": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
+			"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+			"requires": {
+				"boolbase": "^1.0.0"
+			}
+		},
 		"number-allocator": {
 			"version": "1.0.14",
 			"resolved": "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz",
@@ -760,6 +1081,11 @@
 			"resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
 			"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
 		},
+		"picocolors": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+		},
 		"process-nextick-args": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -804,6 +1130,11 @@
 			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
 			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
 		},
+		"source-map-js": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+		},
 		"split2": {
 			"version": "3.2.2",
 			"resolved": "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz",
@@ -825,6 +1156,20 @@
 				"safe-buffer": "~5.2.0"
 			}
 		},
+		"svgo": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmmirror.com/svgo/-/svgo-3.3.2.tgz",
+			"integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+			"requires": {
+				"@trysound/sax": "0.2.0",
+				"commander": "^7.2.0",
+				"css-select": "^5.1.0",
+				"css-tree": "^2.3.1",
+				"css-what": "^6.1.0",
+				"csso": "^5.0.5",
+				"picocolors": "^1.0.0"
+			}
+		},
 		"tslib": {
 			"version": "2.3.0",
 			"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",

+ 7 - 2
package.json

@@ -4,17 +4,22 @@
 	"description": "",
 	"main": "main.js",
 	"scripts": {
-		"test": "echo \"Error: no test specified\" && exit 1"
+		"test": "echo \"Error: no test specified\" && exit 1",
+		"svgicon": "node ./uni_modules/zui-svg-icon/tools/generate-svg-icon.js"
 	},
 	"keywords": [],
 	"author": "",
 	"license": "ISC",
+	"babel": {
+		"sourceType": "unambiguous"
+	},
 	"dependencies": {
 		"dayjs": "^1.11.7",
 		"echarts": "^5.4.2",
 		"lodash": "^4.17.21",
 		"mpvue-echarts": "^0.3.2",
 		"mqtt": "^4.3.7",
+		"svgo": "^3.3.2",
 		"vconsole": "^3.15.1"
 	}
-}
+}

+ 18 - 0
pages.json

@@ -218,6 +218,16 @@
 				"navigationBarTextStyle": "white"
 			}
 		},
+		{
+			"path": "pages/home/wt/components/formParser/routerView",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+	    
+	
 		// {
 		// 	"path": "pages/home/wt/components/feeApplication/taskForm",
 		// 	"style": {
@@ -1845,6 +1855,14 @@
 				"navigationStyle": "custom",
 				"navigationBarTextStyle": "white"
 			}
+		},
+		{
+			"path": "pages/internalManagement/apply/index",
+			"style": {
+				"navigationBarTitleText": "申请",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
 		}
 	],
 	"tabBar": {

+ 5 - 2
pages/home/components/navigation.vue

@@ -39,14 +39,14 @@
 						// "num": 1
 					},
 					{
-						class: 'iconfont icon-kuneipandian ',
+						class: 'iconfont icon-kuneipandian',
 						title: '流程待办',
 						link_url: '/pages/home/wt/todo/todo',
 						badge: 0
 						// "num": 1
 					},
 					{
-						class: 'iconfont icon-yizhihang_1',
+						class: 'iconfont icon-kuneipandian',
 						title: '流程已办',
 						link_url: '/pages/home/wt/done/done'
 						// badge: 0
@@ -164,5 +164,8 @@
 		.nav-item:nth-child(4) span {
 			background-color: $uni-color-error;
 		}
+		.nav-item:nth-child(5) span {
+			background-color: $uni-color-success;
+		}
 	}
 </style>

+ 1 - 1
pages/home/wt/components/detail.vue

@@ -5,7 +5,7 @@
 			<rxl-timeline>
 				<rxl-timeline-item v-for="(item, index) in tasks" :key="index" :color="getTimelineItemIcon(item)" :timestamp="item.createTime">
 					<template #body>
-						<p style="font-weight: 700">任务:{{ item.name }}</p>
+						<p style="font-weight: 700;display: block;">{{item.taskDefinitionKey?'流程节点':'发起人'}}:{{ item.name }}</p>
 						<view style="{ padding: '10px';display: flex;flex-direction: column; }">
 							<span>
 								<label v-if="item.assigneeUser"

+ 35 - 0
pages/home/wt/components/formParser/routerView.vue

@@ -0,0 +1,35 @@
+<template>
+	<view class="blacklog-container">
+			<web-view v-if="isShow" :src="webViewUrl"></web-view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				isShow:false,
+				webViewUrl:''
+			}
+		},
+		onLoad(option = {}) {
+			let headers = {};
+			const value = uni.getStorageSync("token"); //取存本地的token
+			  headers = {
+			    "content-type": "application/json",
+			    "zoomwin-token": value,
+			    Authorization: value,
+			    "zoomwin-sid": uni.getStorageSync("userInfo").sessionId,
+			  };
+		  setTimeout(()=>{
+			  const params =  JSON.parse(option.params)
+			  let html = params.type =='add'? 'a.html':'c.html'
+			  this.webViewUrl = `/hybrid/html/${html}?params=${JSON.stringify(params)}&headers=${JSON.stringify(headers)}`
+			  this.isShow = true
+		  })
+		},
+	}
+</script>
+
+<style>
+</style>

+ 3 - 3
pages/home/wt/done/done.vue

@@ -22,7 +22,7 @@
 							<view class="card-body">
 								
 								<view class="card-col">
-									<text class="label">任务名称</text>
+									<text class="label">流程节点</text>
 									<text class="content">{{ item.name }}</text>
 								</view>
 								<view class="card-col">
@@ -189,9 +189,9 @@
 		font-size: 34rpx;
 		color: #333;
 		background-color: #fff;
-		border-radius: 25rpx;
+		border-radius: 10rpx;
 		word-break: break-all;
-		margin-bottom: 30rpx;
+		margin-bottom: 2rpx;
 
 		.status {
 			font-weight: normal;

+ 33 - 14
pages/home/wt/todo/todo.vue

@@ -1,6 +1,7 @@
 <template>
 	<view class="blacklog-container">
-		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="我的待办" @clickLeft="back" background-color="#157A2C" color="#fff"></uni-nav-bar>
+		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="我的待办" @clickLeft="back"
+			background-color="#157A2C" color="#fff"></uni-nav-bar>
 
 		<view class="list-container">
 			<u-list @scrolltolower="scrolltolower">
@@ -18,7 +19,8 @@
 								</view>
 							</view>
 							<view class="card-footer">
-								<u-button v-if="['0', '2'].includes(item.extensionProperty.taskHandlePlatform)" type="success" @click="handleDetail(item, 'handle')">处理</u-button>
+								<u-button v-if="['0', '2'].includes(item.extensionProperty.taskHandlePlatform)"
+									type="success" @click="handleDetail(item, 'handle')">处理</u-button>
 								<u-button v-else type="error">请在PC端处理</u-button>
 								<u-button type="info" @click="handleDetail(item, 'detail')">流程详情</u-button>
 							</view>
@@ -34,15 +36,16 @@
 </template>
 
 <script>
-	import { getTodoTaskPage } from '@/api/wt/index.js'
+	import {
+		getTodoTaskPage
+	} from '@/api/wt/index.js'
 	let [page, size, isEnd] = [1, 10, true]
 
 	export default {
 		computed: {
 			colOptions() {
-				return [
-					{
-						label: '任务名称',
+				return [{
+						label: '流程节点',
 						key: 'name'
 					},
 					{
@@ -78,12 +81,28 @@
 				//'pages/home' + this.listData.miniHandleRouter
 				///wt/components/feeApplication/taskSubmit
 				if (type == 'handle') {
-					let queryParams = `id=${item.processInstance.id}&businessId=${item.businessId}&taskId=${item.id}&taskDefinitionKey=${item.taskDefinitionKey}&miniHandleRouter=${item.miniHandleRouter}&miniViewRouter=${item.miniViewRouter}`
-					let url =  '/pages/home' + item.miniHandleRouter.replace('taskForm','processTask')
-					console.log(url)
-					uni.navigateTo({
-						url: `${url}?${queryParams}`
-					})
+					console.log(Object.keys(item.formJson).length)
+					if (Object.keys(item.formJson).length) {
+						
+						let params = JSON.stringify({
+							id: item.id,
+							processInstanceId: item.processInstance.id|| '',
+							type: type
+						})
+						let queryParams = `params=${params}`
+						let url = '/pages/home/wt/components/formParser/routerView'
+            uni.navigateTo({
+							url: `${url}?${queryParams}`
+						})
+					} else {
+						let queryParams =
+							`id=${item.processInstance.id}&businessId=${item.businessId}&taskId=${item.id}&taskDefinitionKey=${item.taskDefinitionKey}&miniHandleRouter=${item.miniHandleRouter}&miniViewRouter=${item.miniViewRouter}`
+						let url = '/pages/home' + item.miniHandleRouter.replace('taskForm', 'processTask')
+						uni.navigateTo({
+							url: `${url}?${queryParams}`
+						})
+					}			
+
 					//
 				} else {
 					uni.navigateTo({
@@ -146,9 +165,9 @@
 		font-size: 34rpx;
 		color: #333;
 		background-color: #fff;
-		border-radius: 25rpx;
+		border-radius: 10rpx;
 		word-break: break-all;
-		margin-bottom: 30rpx;
+		margin-bottom: 24rpx;
 
 		.status {
 			font-weight: normal;

+ 23 - 1
pages/index/index.vue

@@ -1,6 +1,18 @@
 <template>
 	<view>
 		<uni-nav-bar fixed="true" statusBar="true" title="工作中心" right-icon="scan" @clickRight="HandlScanCode"></uni-nav-bar>
+		<view>
+			<CellTip title="协同办公" v-if="internalManagementList.length > 0"></CellTip>
+			<view class="nav">
+				<view class="nav-content">
+					<view class="nav-item" v-for="(item, index) in internalManagementList" @click="toNav(item.url)">
+						<span :class="'iconfont ' + item.icon"></span>
+						<i class="badge" v-if="item.badge">{{ item.badge }}</i>
+						<label>{{ item.name }}</label>
+					</view>
+				</view>
+			</view>
+		</view>
 		<view>
 			<CellTip title="生产管理" v-if="productionList.length > 0"></CellTip>
 			<view class="nav">
@@ -55,7 +67,7 @@
 			</view>
 		</view>
 		<view>
-			<CellTip title="派车管理" v-if="dispatchList.length > 0"></CellTip>
+			<CellTip title="运输管理" v-if="dispatchList.length > 0"></CellTip>
 			<view class="nav">
 				<view class="nav-content">
 					<view class="nav-item" v-for="(item, index) in dispatchList" @click="toNav(item.url)">
@@ -66,6 +78,7 @@
 				</view>
 			</view>
 		</view>
+		
 		<!--    <view>
       <CellTip title="生产类"></CellTip>
 
@@ -357,6 +370,15 @@
 						//"num": 34
 					}
 				],
+				internalManagementList: [
+					{
+						name: '申请',
+						url: `/pages/internalManagement/apply/index`,
+						icon: 'icon-gongdanguanli',
+						badge: 0
+						//"num": 34
+					}
+				],
 				treeList: []
 			}
 		},

+ 492 - 0
pages/internalManagement/apply/index.vue

@@ -0,0 +1,492 @@
+<template>
+	<view class="blacklog-container">
+		<uni-nav-bar class="navBarBox" fixed="true" statusBar="true" left-icon="back" :title="title" @clickLeft="back"
+			background-color="#157A2C" color="#fff"></uni-nav-bar>
+		<!-- <div>
+			<u-search placeholder="搜索模板名称" shape="square" v-model="keyword"></u-search>
+		</div> -->
+		<view class="list-container">
+			<u-list v-show='value1==0'>
+				<u-list-item v-for="(item, index) in baseList" :key="index">
+					<view class="kd-card">
+						<view class="card-title">
+							<text>{{ Object.values(item)[0] }}</text>
+						</view>
+						<view>
+
+							<u-grid :border="true">
+								<u-grid-item v-if='listItem.dictType== Object.keys(item)[0]' class='grid-item'
+									:customStyle="{width:33+'%',height:220+'rpx'}"
+									v-for="(listItem,listIndex) in defaultList" :key="listIndex"
+									@click="handleDetail(listItem,'add')">
+									<zui-svg-icon style="position: relative;bottom: -14px" :icon="listItem.icon"
+										width="2rem" />
+									<text class="grid-text">{{listItem.name}}</text>
+								</u-grid-item>
+							</u-grid>
+						</view>
+					</view>
+				</u-list-item>
+			</u-list>
+			<u-list v-show='value1==1' @scrolltolower="scrolltolower">
+				<view v-show="list.length === 0" class="no_data">
+						  	<u-empty mode="data" textSize="30"></u-empty>
+				</view>
+				<u-list-item v-for="(item, index) in list" :key="index">
+					<view class="kd-card-1">
+						<view class="card-title-1">
+							<text>{{ item.processInstance.name }}</text>
+							<text class="card-time-1">{{ item.createTime }}</text>
+						</view>
+						<view>
+							<view class="card-body-1">
+								<view class="card-col-1" v-for="itm in colOptions">
+									<text class="label-1">{{ itm.label }}</text>
+									<text class="content-1">{{ item[itm.key] }}</text>
+								</view>
+							</view>
+							<view class="card-footer-1">
+								<u-button type="success" @click="handleDetail(item, 'view')">处理</u-button>
+
+								<u-button type="info" @click="handleDetailView(item, 'detail')">流程详情</u-button>
+							</view>
+						</view>
+					</view>
+				</u-list-item>
+			</u-list>
+			<u-list v-show='value1==2' @scrolltolower="scrolltolowerDone">
+				<view v-show="doneList.length === 0" class="no_data">
+						  	<u-empty mode="data" textSize="30"></u-empty>
+				</view>
+				<u-list-item v-for="(item, index) in doneList" :key="index" @click.native="handleDetailView(item)">
+					<view class="kd-card-2">
+						<view class="card-title-1">
+							<text>{{ item.name }}</text>
+							<text :class="resultClass[item.result]">{{ handleResult[item.result] }}</text>
+						</view>
+						<view>
+							<view class="card-body-1">
+								<view class="card-col-1">
+									<text class="label-1">审批意见</text>
+									<text class="content-1">{{ item.reason }}</text>
+								</view>
+								<view class="card-col-1">
+									<text class="label-1">处理时间</text>
+									<text class="content-1">{{ item.endTime }}</text>
+								</view>
+                                <view class="card-col-1">
+									<text class="label-1">处理时间</text>
+									<text class="content-1">{{ item.endTime }}</text>
+								</view>
+							</view>
+						</view>
+					</view>
+				</u-list-item>
+			</u-list>
+		   
+		</view>
+		<u-tabbar class="tabbarBox" :value="value1" @change="change1" :fixed="true" :placeholder='false'
+			:safeAreaInsetBottom="true">
+			<u-tabbar-item class='tabbarItem' v-for="item in tabbarItems" :text="item.text" :icon="item.icon"
+				@click="click1"></u-tabbar-item>
+		</u-tabbar>
+
+	</view>
+</template>
+
+<script>
+	import {
+		getTodoTaskPage,
+		getProcessInstancePage
+	} from '@/api/wt/index.js'
+	let [page, size, isEnd] = [1, 10, true]
+	let [donePage, doneSize, doneIsEnd] = [1, 10, true]
+	import {
+		getBpmCustomFormList
+	} from '@/api/wt/index.js'
+	import {
+		getByCode
+	} from '@/api/pda/common.js'
+	import svgIcon from '@/components/svg-icon.vue'
+	export default {
+		components: {
+			svgIcon
+		},
+		data() {
+			return {
+				value1: 0,
+				title: '申请',
+				handleResult: {
+					1: '处理中',
+					2: '通过',
+					3: '不通过',
+					4: '已取消',
+				},
+				resultClass: {
+					1: 'text-warning',
+					2: 'text-primary',
+					3: 'text-danger',
+					4: 'text-normal',
+				},
+				tabbarItems: [{
+						text: '申请',
+						icon: 'file-text',
+					},
+					{
+						text: '我审批的',
+						icon: 'edit-pen',
+					},
+					{
+						text: '我提交的',
+						icon: 'arrow-upward',
+					}
+				],
+				keyword: '',
+				baseList: [],
+				defaultList: [],
+				list: [],
+				doneList: [],
+			}
+		},
+		computed: {
+			colOptions() {
+				return [{
+						label: '流程节点',
+						key: 'name'
+					},
+					{
+						label: '流程发起人',
+						key: `startUserNickname`
+					}
+				]
+			}
+		},
+		onShow() {
+			this.getBaseList()
+			page = 1
+			this.list = []
+			this.getList()
+			donePage = 1
+			this.doneList = []
+			this.getDoneList()
+		},
+		methods: {
+			scrolltolower() {
+				if (isEnd) return
+				page++
+				this.getList()
+			},
+			scrolltolowerDone() {
+				if (doneIsEnd) return
+				donePage++
+				this.getDoneList()
+			},
+			async getBaseList() {
+				this.defaultList = await getBpmCustomFormList()
+				this.baseList = await getByCode('collaborative_type')
+			},
+			handleDetail(item, type) {
+				//'pages/home' + this.listData.miniHandleRouter
+				///wt/components/feeApplication/taskSubmit
+				let params = JSON.stringify({
+					id: item.id,
+					processInstanceId: item.processInstance?.id|| '',
+					type: type
+				})
+				let queryParams = `params=${params}`
+				let url = '/pages/home/wt/components/formParser/routerView'
+				uni.navigateTo({
+					url: `${url}?${queryParams}`
+				})
+			},
+			handleDetailView(item) {
+				console.log(item)
+				uni.navigateTo({
+					url: `/pages/home/wt/components/detail?processInstanceId=${item.processInstance?.id||item.id}`
+				})
+
+			},
+			async getList() {
+				let paging = {
+					pageNo: page,
+					pageSize: size,
+					processType: 1
+				}
+				let par = Object.assign(paging, this.params)
+				isEnd = false
+				const data = await getTodoTaskPage(par)
+				this.list.push(...data.list)
+				this.list.forEach(item => {
+					item.startUserNickname = item.processInstance.startUserNickname
+				})
+				isEnd = this.list.length >= data.count
+			},
+			async getDoneList() {
+				const params = {
+					pageNo: page,
+					pageSize: 8,
+					...this.searchData,
+					processType: 1
+				}
+				doneIsEnd = false
+				const data = await getProcessInstancePage(params)
+				this.doneList.push(...data.list)
+				doneIsEnd = this.doneList.length >= data.count
+			},
+			change1(index) {
+				console.log(index)
+				this.value1 = index
+				this.title = this.tabbarItems[index].text
+			},
+			click1(index) {
+				this.value1 = index
+				this.title = this.tabbarItems[index].text
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.blacklog-container {
+		height: 100vh;
+		display: flex;
+		flex-direction: column;
+	}
+
+	.grid-text {
+		font-size: 14px;
+		color: #909399;
+		padding: 10rpx 0 20rpx 0rpx;
+		/* #ifndef APP-PLUS */
+		box-sizing: border-box;
+		/* #endif */
+	}
+
+	.grid-item {
+		display: flex;
+		justify-content: space-evenly;
+		border-right: 1px solid #f3f3f3;
+		border-bottom: 1px solid #f3f3f3;
+	}
+
+	.list-container {
+		height: 80%;
+		padding: 24rpx;
+		background: $page-bg;
+		overflow: hidden;
+		// position: absolute;
+		// top: 88rpx;
+		// bottom: 0;
+		// left: 0;
+		// right: 0;
+
+		/deep/ .u-list {
+			height: 100% !important;
+		}
+
+	}
+
+	.no_data {
+		position: fixed;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+		color: #999;
+		font-size: 50rpx;
+	}
+
+	.kd-card {
+		font-size: 34rpx;
+		color: #333;
+		background-color: #fff;
+		border-radius: 10rpx;
+		word-break: break-all;
+		margin-bottom: 24rpx;
+		min-height: 220rpx;
+
+		.status {
+			font-weight: normal;
+		}
+
+		.card-title {
+			font-size: 0.9rem;
+			font-weight: bold;
+			border-bottom: 1px solid #f1f1f1;
+			padding: 10rpx 30rpx;
+			color: #353535;
+		}
+
+	}
+
+	.tabbarBox {
+		height: 30rpx;
+	}
+
+	::v-deep .tabbarItem {
+
+		.uicon-file-text,
+		.uicon-edit-pen,
+		.uicon-arrow-upward {
+			font-size: 20px !important;
+			top: 2px !important;
+			line-height: 14px !important;
+		}
+	}
+
+	.navBarBox {
+		height: 140rpx;
+	}
+
+	.blacklog-container {
+		height: 100vh;
+		display: flex;
+		flex-direction: column;
+	}
+
+	.kd-card-1 {
+		font-size: 34rpx;
+		color: #333;
+		background-color: #fff;
+		border-radius: 10rpx;
+		word-break: break-all;
+		margin-bottom: 24rpx;
+
+		.status-1 {
+			font-weight: normal;
+		}
+
+		.card-title-1 {
+			font-size: 0.9rem;
+			font-weight: bold;
+
+			.card-time-1 {
+				font-weight: normal;
+				color: #bfbfbf;
+				font-size: 0.9rem;
+				align-self: center;
+			}
+		}
+
+		.card-footer-1,
+		.card-title-1 {
+			display: flex;
+			justify-content: space-between;
+			padding: 30rpx 30rpx;
+		}
+
+		.card-footer-1 {
+			padding: 10rpx 30rpx 18rpx 30rpx;
+			font-size: 0.8rem;
+
+			/deep/ .u-button {
+				width: 48%;
+			}
+		}
+
+		.card-body-1 {
+			padding: 0 28rpx;
+			position: relative;
+			min-height: 150rpx;
+		}
+
+		.card-body-1:after {
+			content: '';
+			position: absolute;
+			left: auto;
+			top: auto;
+			bottom: 10rpx;
+			right: auto;
+			height: 1rpx;
+			width: 91%;
+			background-color: #f1f1f1;
+		}
+
+		.card-col-1 {
+			padding: 8rpx 0;
+			display: flex;
+
+			// line-height: ;
+
+			.content-1 {
+				flex: 1;
+				overflow: hidden;
+				font-size: 0.9rem;
+			}
+
+			.label-1 {
+				font-size: 0.9rem;
+				color: #999;
+				width: 25%;
+			}
+		}
+	}
+
+	.kd-card-2 {
+		font-size: 34rpx;
+		color: #333;
+		background-color: #fff;
+		border-radius: 10rpx;
+		word-break: break-all;
+		margin-bottom: 24rpx;
+		padding-bottom: 24rpx;
+
+		.status-1 {
+			font-weight: normal;
+		}
+
+		.card-title-1 {
+			font-size: 0.9rem;
+			font-weight: bold;
+
+			.card-time-1 {
+				font-weight: normal;
+				color: #bfbfbf;
+				font-size: 0.9rem;
+				align-self: center;
+			}
+		}
+
+		.card-footer-1,
+		.card-title-1 {
+			display: flex;
+			justify-content: space-between;
+			padding: 30rpx 30rpx;
+		}
+
+		.card-footer-1 {
+			padding: 10rpx 30rpx 18rpx 30rpx;
+			font-size: 0.8rem;
+
+			/deep/ .u-button {
+				width: 48%;
+			}
+		}
+
+		.card-body-1 {
+			padding: 0 28rpx;
+			position: relative;
+			min-height: 150rpx;
+		}
+
+
+
+		.card-col-1 {
+			padding: 8rpx 0;
+			display: flex;
+
+			// line-height: ;
+
+			.content-1 {
+				flex: 1;
+				overflow: hidden;
+				font-size: 0.9rem;
+			}
+
+			.label-1 {
+				font-size: 0.9rem;
+				color: #999;
+				width: 25%;
+			}
+		}
+	}
+</style>

+ 1 - 0
static/icons/出差审批 icon_1-16.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579369801" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5192" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#7AD6A6" p-id="5193"></path><path d="M775.7312 387.703467l-200.4992 92.757333-78.7456 133.341867a15.940267 15.940267 0 0 1-7.253333 6.826666l-39.611734 18.773334a16.896 16.896 0 0 1-7.253333 0 16.418133 16.418133 0 0 1-10.632533-3.857067 16.913067 16.913067 0 0 1-5.307734-17.8688l24.644267-81.646933-48.315733 23.1936h-3.857067a92.279467 92.279467 0 0 1-96.631467-21.265067l-74.888533-69.563733a16.913067 16.913067 0 0 1-5.307733-14.984534 16.4352 16.4352 0 0 1 9.659733-12.561066l34.304-15.940267a16.913067 16.913067 0 0 1 13.038933 0l75.3664 35.754667 109.226667-60.398934-98.986667-48.315733a17.390933 17.390933 0 0 1-9.659733-15.4624 16.913067 16.913067 0 0 1 9.659733-15.4624l44.373334-20.770133a17.390933 17.390933 0 0 1 11.1104 0l166.1952 42.0352 90.8288-42.0352a91.306667 91.306667 0 0 1 83.626666 0 45.4144 45.4144 0 0 1 14.984534 86.4768z m-43.008 339.2h-459.451733a24.1664 24.1664 0 0 1 0-48.315734h459.451733a24.1664 24.1664 0 0 1 0 48.315734z" fill="#FFFFFF" p-id="5194"></path></svg>

+ 1 - 0
static/icons/常用 icon_1-15.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579499763" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5354" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#FFC667" p-id="5355"></path><path d="M591.496533 785.066667l69.2224-34.133334 39.0144-67.669333V768a17.066667 17.066667 0 0 1-17.066666 17.066667z m-42.427733 0H273.066667a17.066667 17.066667 0 0 1-17.066667-17.066667v-512a17.066667 17.066667 0 0 1 17.066667-17.066667h409.6a17.066667 17.066667 0 0 1 17.066666 17.066667v155.067733a53.1456 53.1456 0 0 0-3.652266 5.4784l-153.6 266.0352 6.6048 102.4zM375.466667 563.2a17.066667 17.066667 0 0 0 17.066666 17.066667h68.266667a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066667h-68.266667a17.066667 17.066667 0 0 0-17.066666 17.066667z m0-85.333333a17.066667 17.066667 0 0 0 17.066666 17.066666h170.666667a17.066667 17.066667 0 0 0 17.066667-17.066666 17.066667 17.066667 0 0 0-17.066667-17.066667h-170.666667a17.066667 17.066667 0 0 0-17.066666 17.066667z m0-85.333334a17.066667 17.066667 0 0 0 17.066666 17.066667h170.666667a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066666h-170.666667a17.066667 17.066667 0 0 0-17.066666 17.066666z m192.3072 305.9712l59.101866 34.133334-55.1424 27.306666z m17.066666-29.559466l102.4-177.3568 59.118934 34.133333-102.4 177.3568z m119.466667-206.933334l17.066667-29.559466a17.066667 17.066667 0 0 1 23.313066-6.2464l29.559467 17.066666a17.066667 17.066667 0 0 1 6.229333 23.313067l-17.066666 29.559467z" fill="#FFFFFF" p-id="5356"></path></svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
static/icons/平时考核 icon_1-22.svg


+ 1 - 0
static/icons/用印审批 icon_1-26.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579038383" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5030" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#F2984E" p-id="5031"></path><path d="M273.066667 802.133333a17.066667 17.066667 0 0 1-17.066667-17.066666v-34.133334a17.066667 17.066667 0 0 1 17.066667-17.066666h477.866666a17.066667 17.066667 0 0 1 17.066667 17.066666v34.133334a17.066667 17.066667 0 0 1-17.066667 17.066666z m-4.949334-102.4a12.151467 12.151467 0 0 1-12.117333-12.202666v-64.375467a37.973333 37.973333 0 0 1 37.8368-38.144h95.914667a49.186133 49.186133 0 0 0 48.827733-45.346133c5.3248-69.307733-68.7616-102.4-68.7616-187.460267 0-72.106667 54.459733-130.338133 142.1824-130.338133s142.250667 58.146133 142.250667 130.338133c0 85.009067-74.103467 118.152533-68.744534 187.460267a49.1008 49.1008 0 0 0 48.810667 45.346133h95.8464a38.024533 38.024533 0 0 1 37.8368 38.126933v64.375467a12.1344 12.1344 0 0 1-12.100267 12.202667z" fill="#FFFFFF" p-id="5032"></path></svg>

+ 1 - 0
static/icons/议题管理 icon_3-10.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579518892" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5678" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#7AD6A6" p-id="5679"></path><path d="M733.866667 819.2h-392.533334V204.8h290.133334v134.4l34.133333-22.408533 34.133333 22.408533V204.8h34.133334a34.133333 34.133333 0 0 1 34.133333 34.133333v546.133334a34.133333 34.133333 0 0 1-34.133333 34.133333z m-443.733334 0a34.133333 34.133333 0 0 1-34.133333-34.133333V238.933333a34.133333 34.133333 0 0 1 34.133333-34.133333h17.066667v614.4h-17.066667z" fill="#FFFFFF" p-id="5680"></path></svg>

+ 1 - 0
static/icons/请休假管理 icon_1-13.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579593427" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6002" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#F96491" p-id="6003"></path><path d="M682.666667 768a136.533333 136.533333 0 1 1 136.533333-136.533333 136.686933 136.686933 0 0 1-136.533333 136.533333z m-156.4672-68.266667H273.066667a34.133333 34.133333 0 0 1-34.133334-34.133333v-341.333333a34.133333 34.133333 0 0 1 34.133334-34.133334h68.266666v34.133334a51.2 51.2 0 1 0 102.4 0v-34.133334h85.333334v34.133334a51.2 51.2 0 1 0 102.4 0v-34.133334h85.333333a34.133333 34.133333 0 0 1 34.133333 34.133334v150.749866A170.666667 170.666667 0 0 0 526.199467 699.733333zM358.4 529.066667a17.066667 17.066667 0 1 0 0 34.133333h34.133333a17.066667 17.066667 0 1 0 0-34.133333z m119.466667-85.333334a17.066667 17.066667 0 1 0 0 34.133334h34.133333a17.066667 17.066667 0 1 0 0-34.133334z m-119.466667 0a17.066667 17.066667 0 1 0 0 34.133334h34.133333a17.066667 17.066667 0 0 0 0-34.133334z m221.866667-102.4a17.066667 17.066667 0 0 1-17.066667-17.066666v-68.266667a17.066667 17.066667 0 1 1 34.133333 0v68.266667a17.066667 17.066667 0 0 1-17.066666 17.066666z m-187.733334 0a17.066667 17.066667 0 0 1-17.066666-17.066666v-68.266667a17.066667 17.066667 0 1 1 34.133333 0v68.266667a17.066667 17.066667 0 0 1-17.066667 17.066666z" fill="#FFFFFF" p-id="6004"></path><path d="M750.933333 665.6h-68.266666a17.066667 17.066667 0 0 1-17.066667-17.066667v-68.266666a17.066667 17.066667 0 0 1 34.133333 0v51.2h51.2a17.066667 17.066667 0 0 1 0 34.133333z" fill="#F96491" p-id="6005"></path></svg>

+ 1 - 0
static/icons/默认 icon_4-14.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736579537692" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5840" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M0 0m273.066667 0l477.866666 0q273.066667 0 273.066667 273.066667l0 477.866666q0 273.066667-273.066667 273.066667l-477.866666 0q-273.066667 0-273.066667-273.066667l0-477.866666q0-273.066667 273.066667-273.066667Z" fill="#F2984E" p-id="5841"></path><path d="M733.866667 750.933333h-443.733334a34.133333 34.133333 0 0 1-34.133333-34.133333V375.466667a34.133333 34.133333 0 0 1 34.133333-34.133334h68.266667v34.133334a51.2 51.2 0 0 0 51.2 51.2 51.2 51.2 0 0 0 51.2-51.2v-34.133334h85.333333v34.133334a51.2 51.2 0 0 0 51.2 51.2 51.2 51.2 0 0 0 51.2-51.2v-34.133334h85.333334a34.133333 34.133333 0 0 1 34.133333 34.133334v341.333333a34.133333 34.133333 0 0 1-34.133333 34.133333z m-273.066667-153.6a17.066667 17.066667 0 0 0-17.066667 17.066667 17.066667 17.066667 0 0 0 17.066667 17.066667h102.4a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066667z m-34.133333-68.266666a17.066667 17.066667 0 0 0-17.066667 17.066666 17.066667 17.066667 0 0 0 17.066667 17.066667h170.666666a17.066667 17.066667 0 0 0 17.066667-17.066667 17.066667 17.066667 0 0 0-17.066667-17.066666z m170.666666-136.533334a17.066667 17.066667 0 0 1-17.066666-17.066666v-68.266667a17.066667 17.066667 0 0 1 17.066666-17.066667 17.066667 17.066667 0 0 1 17.066667 17.066667v68.266667a17.066667 17.066667 0 0 1-17.066667 17.066666z m-187.733333 0a17.066667 17.066667 0 0 1-17.066667-17.066666v-68.266667a17.066667 17.066667 0 0 1 17.066667-17.066667 17.066667 17.066667 0 0 1 17.066667 17.066667v68.266667a17.066667 17.066667 0 0 1-17.066667 17.066666z" fill="#FFFFFF" p-id="5842"></path></svg>

+ 37 - 0
static/require.js

@@ -0,0 +1,37 @@
+/*
+ RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
+ Available via the MIT or new BSD license.
+ see: http://github.com/jrburke/requirejs for details
+*/
+var requirejs,require,define;
+(function(ca){function G(b){return"[object Function]"===M.call(b)}function H(b){return"[object Array]"===M.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function U(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function j(b,c){return s(b,c)&&b[c]}function B(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function V(b,c,d,g){c&&B(c,function(c,h){if(d||!s(b,h))g&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
+RegExp)?(b[h]||(b[h]={}),V(b[h],c,d,g)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function da(b){throw b;}function ea(b){if(!b)return b;var c=ca;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ha(b){function c(a,e,b){var f,n,c,d,g,h,i,I=e&&e.split("/");n=I;var m=l.map,k=m&&m["*"];if(a&&"."===a.charAt(0))if(e){n=
+I.slice(0,I.length-1);a=a.split("/");e=a.length-1;l.nodeIdCompat&&R.test(a[e])&&(a[e]=a[e].replace(R,""));n=a=n.concat(a);d=n.length;for(e=0;e<d;e++)if(c=n[e],"."===c)n.splice(e,1),e-=1;else if(".."===c)if(1===e&&(".."===n[2]||".."===n[0]))break;else 0<e&&(n.splice(e-1,2),e-=2);a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if(b&&m&&(I||k)){n=a.split("/");e=n.length;a:for(;0<e;e-=1){d=n.slice(0,e).join("/");if(I)for(c=I.length;0<c;c-=1)if(b=j(m,I.slice(0,c).join("/")))if(b=j(b,d)){f=b;
+g=e;break a}!h&&(k&&j(k,d))&&(h=j(k,d),i=e)}!f&&h&&(f=h,g=i);f&&(n.splice(0,g,f),a=n.join("/"))}return(f=j(l.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(e){if(e.getAttribute("data-requiremodule")===a&&e.getAttribute("data-requirecontext")===i.contextName)return e.parentNode.removeChild(e),!0})}function g(a){var e=j(l.paths,a);if(e&&H(e)&&1<e.length)return e.shift(),i.require.undef(a),i.require([a]),!0}function u(a){var e,b=a?a.indexOf("!"):-1;-1<b&&(e=a.substring(0,
+b),a=a.substring(b+1,a.length));return[e,a]}function m(a,e,b,f){var n,d,g=null,h=e?e.name:null,l=a,m=!0,k="";a||(m=!1,a="_@r"+(M+=1));a=u(a);g=a[0];a=a[1];g&&(g=c(g,h,f),d=j(p,g));a&&(g?k=d&&d.normalize?d.normalize(a,function(a){return c(a,h,f)}):c(a,h,f):(k=c(a,h,f),a=u(k),g=a[0],k=a[1],b=!0,n=i.nameToUrl(k)));b=g&&!d&&!b?"_unnormalized"+(Q+=1):"";return{prefix:g,name:k,parentMap:e,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(g?g+"!"+k:k)+b}}function q(a){var e=a.id,b=j(k,e);b||(b=k[e]=new i.Module(a));
+return b}function r(a,e,b){var f=a.id,n=j(k,f);if(s(p,f)&&(!n||n.defineEmitComplete))"defined"===e&&b(p[f]);else if(n=q(a),n.error&&"error"===e)b(n.error);else n.on(e,b)}function w(a,e){var b=a.requireModules,f=!1;if(e)e(a);else if(v(b,function(e){if(e=j(k,e))e.error=a,e.events.error&&(f=!0,e.emit("error",a))}),!f)h.onError(a)}function x(){S.length&&(ia.apply(A,[A.length,0].concat(S)),S=[])}function y(a){delete k[a];delete W[a]}function F(a,e,b){var f=a.map.id;a.error?a.emit("error",a.error):(e[f]=
+!0,v(a.depMaps,function(f,c){var d=f.id,g=j(k,d);g&&(!a.depMatched[c]&&!b[d])&&(j(e,d)?(a.defineDep(c,p[d]),a.check()):F(g,e,b))}),b[f]=!0)}function D(){var a,e,b=(a=1E3*l.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],c=[],h=!1,k=!0;if(!X){X=!0;B(W,function(a){var i=a.map,m=i.id;if(a.enabled&&(i.isDefine||c.push(a),!a.error))if(!a.inited&&b)g(m)?h=e=!0:(f.push(m),d(m));else if(!a.inited&&(a.fetched&&i.isDefine)&&(h=!0,!i.prefix))return k=!1});if(b&&f.length)return a=C("timeout","Load timeout for modules: "+
+f,null,f),a.contextName=i.contextName,w(a);k&&v(c,function(a){F(a,{},{})});if((!b||e)&&h)if((z||fa)&&!Y)Y=setTimeout(function(){Y=0;D()},50);X=!1}}function E(a){s(p,a[0])||q(m(a[0],null,!0)).init(a[1],a[2])}function K(a){var a=a.currentTarget||a.srcElement,e=i.onScriptLoad;a.detachEvent&&!Z?a.detachEvent("onreadystatechange",e):a.removeEventListener("load",e,!1);e=i.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener("error",e,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function L(){var a;
+for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var X,$,i,N,Y,l={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},k={},W={},aa={},A=[],p={},T={},ba={},M=1,Q=1;N={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?p[a.map.id]=a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?
+a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return j(l.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};$=function(a){this.events=j(aa,a.id)||{};this.map=a;this.shim=j(l.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,e,b,f){f=f||{};if(!this.inited){this.factory=e;if(b)this.on("error",b);else this.events.error&&(b=t(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
+b;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,e){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=e)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
+this.map.url;T[a]||(T[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,e,b=this.map.id;e=this.depExports;var f=this.exports,c=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&
+(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
+this.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,"defined",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||""),f=m(a.prefix+"!"+J,this.map.parentMap),r(f,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);
+if(this.events.error)g.on("error",t(this,function(a){this.emit("error",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C("fromtexteval",
+"fromText eval for "+b+" failed: "+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if("string"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,"defined",t(this,function(a){this.defineDep(b,
+a);this.check()}));this.errback&&r(a,"error",t(this,this.errback))}c=a.id;f=k[c];!s(N,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,
+nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,
+a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+"/"+(a.main||"main").replace(ja,"").replace(R,"")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=
+!0);if("string"===typeof f){if(G(c))return w(C("requireargs","Invalid require call"),d);if(a&&s(N,f))return N[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C("notloaded",'Module name "'+j+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[j]}L();i.nextTick(function(){L();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==
+d&&(!("."===g||".."===g)||1<d))e=b.substring(d,b.length),b=b.substring(0,d);return i.nameToUrl(c(b,a&&a.id,!0),e,!0)},defined:function(b){return s(p,m(b,a,!1,!0).id)},specified:function(b){b=m(b,a,!1,!0).id;return s(p,b)||s(k,b)}});a||(g.undef=function(b){x();var c=m(b,a,!0),e=j(k,b);d(b);delete p[b];delete T[c.url];delete aa[b];U(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&(aa[b]=e.events),y(b))});return g},enable:function(a){j(k,a.id)&&q(a).enable()},completeLoad:function(a){var b,
+c,f=j(l.shim,a)||{},d=f.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=j(k,a);if(!b&&!s(p,a)&&c&&!c.inited){if(l.enforceDefine&&(!d||!ea(d)))return g(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,f.deps||[],f.exportsFn])}D()},nameToUrl:function(a,b,c){var f,d,g;(f=j(l.pkgs,a))&&(a=f);if(f=j(ba,a))return i.nameToUrl(f,b,c);if(h.jsExtRegExp.test(a))f=a+(b||"");else{f=l.paths;a=a.split("/");for(d=a.length;0<d;d-=1)if(g=a.slice(0,
+d).join("/"),g=j(f,g)){H(g)&&(g=g[0]);a.splice(0,d,g);break}f=a.join("/");f+=b||(/^data\:|\?/.test(f)||c?"":".js");f=("/"===f.charAt(0)||f.match(/^[\w\+\.\-]+:/)?"":l.baseUrl)+f}return l.urlArgs?f+((-1===f.indexOf("?")?"?":"&")+l.urlArgs):f},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=K(a),i.completeLoad(a.id)},onScriptError:function(a){var b=K(a);if(!g(b.id))return w(C("scripterror",
+"Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var h,x,y,D,K,E,P,L,q,Q,la=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ma=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,R=/\.js$/,ja=/^\.\//;x=Object.prototype;var M=x.toString,ga=x.hasOwnProperty,ia=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),fa=!z&&"undefined"!==typeof importScripts,ka=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,
+Z="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},r={},S=[],O=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;r=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(r=require,require=void 0);h=requirejs=function(b,c,d,g){var u,m="_";!H(b)&&"string"!==typeof b&&(u=b,H(c)?(b=c,c=d,d=g):b=[]);u&&u.context&&(m=u.context);(g=j(F,m))||(g=F[m]=h.s.newContext(m));u&&g.configure(u);return g.require(b,c,d)};h.config=function(b){return h(b)};
+h.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version="2.1.11";h.jsExtRegExp=/^\/|:|\?|\.js$/;h.isBrowser=z;x=h.s={contexts:F,newContext:ha};h({});v(["toUrl","undef","defined","specified"],function(b){h[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;h.onError=da;h.createNode=function(b){var c=
+b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};h.load=function(b,c,d){var g=b&&b.config||{};if(z)return g=h.createNode(g,c,d),g.setAttribute("data-requirecontext",b.contextName),g.setAttribute("data-requiremodule",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf("[native code"))&&!Z?(O=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):
+(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,L=g,D?y.insertBefore(g,D):y.appendChild(g),L=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(K=b.getAttribute("data-main"))return q=K,r.baseUrl||(E=q.split("/"),q=E.pop(),Q=E.length?E.join("/")+"/":"./",r.baseUrl=
+Q),q=q.replace(R,""),h.jsExtRegExp.test(q)&&(q=K),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(g=L))P&&"interactive"===P.readyState||U(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),g=P;g&&(b||
+(b=g.getAttribute("data-requiremodule")),h=F[g.getAttribute("data-requirecontext")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);
+

+ 86 - 0
static/svg-icons-lib.js

@@ -0,0 +1,86 @@
+/**
+ *
+ * Icon Library for <zui-svg-icon> usage
+ *
+ * Auto generated by /tools/generate-svg-icon.js
+ *
+ * !!! DO NOT MODIFY MANUALLY !!!
+ *
+ * @datetime 2025/1/11 17:05:24
+ *
+ */
+
+// == collection start
+const collections = {
+  default: {
+    "icons": {
+      "出差审批 icon_1-16": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#7AD6A6\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"m775.731 387.703-200.499 92.758-78.746 133.342a15.94 15.94 0 0 1-7.253 6.826l-39.612 18.774a16.9 16.9 0 0 1-7.253 0 16.42 16.42 0 0 1-10.633-3.857 16.91 16.91 0 0 1-5.307-17.87l24.644-81.646-48.316 23.193H398.9a92.28 92.28 0 0 1-96.631-21.265l-74.889-69.563a16.91 16.91 0 0 1-5.308-14.985 16.43 16.43 0 0 1 9.66-12.56l34.304-15.941a16.9 16.9 0 0 1 13.04 0l75.366 35.754 109.226-60.398-98.986-48.316a17.39 17.39 0 0 1-9.66-15.463 16.91 16.91 0 0 1 9.66-15.462l44.373-20.77a17.4 17.4 0 0 1 11.11 0l166.195 42.035 90.83-42.035a91.3 91.3 0 0 1 83.626 0 45.414 45.414 0 0 1 14.984 86.477zm-43.008 339.2H273.271a24.166 24.166 0 0 1 0-48.315h459.452a24.166 24.166 0 0 1 0 48.315\"/></svg>",
+        0,
+        1
+      ],
+      "常用 icon_1-15": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#FFC667\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"m591.497 785.067 69.222-34.134 39.014-67.669V768a17.067 17.067 0 0 1-17.066 17.067zm-42.428 0H273.067A17.067 17.067 0 0 1 256 768V256a17.067 17.067 0 0 1 17.067-17.067h409.6A17.067 17.067 0 0 1 699.733 256v155.068a53 53 0 0 0-3.652 5.478l-153.6 266.035 6.605 102.4zM375.467 563.2a17.067 17.067 0 0 0 17.066 17.067H460.8a17.067 17.067 0 0 0 17.067-17.067 17.067 17.067 0 0 0-17.067-17.067h-68.267a17.067 17.067 0 0 0-17.066 17.067m0-85.333a17.067 17.067 0 0 0 17.066 17.066H563.2a17.067 17.067 0 0 0 17.067-17.066A17.067 17.067 0 0 0 563.2 460.8H392.533a17.067 17.067 0 0 0-17.066 17.067m0-85.334a17.067 17.067 0 0 0 17.066 17.067H563.2a17.067 17.067 0 0 0 17.067-17.067 17.067 17.067 0 0 0-17.067-17.066H392.533a17.067 17.067 0 0 0-17.066 17.066m192.307 305.972 59.102 34.133-55.143 27.307zm17.067-29.56 102.4-177.357 59.118 34.134-102.4 177.356zm119.466-206.933 17.067-29.56a17.067 17.067 0 0 1 23.313-6.246l29.56 17.067a17.067 17.067 0 0 1 6.229 23.313l-17.067 29.56z\"/></svg>",
+        2,
+        1
+      ],
+      "平时考核 icon_1-22": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#7AD6A6\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"M273.067 802.133A17.067 17.067 0 0 1 256 785.067v-512A17.067 17.067 0 0 1 273.067 256h102.4a67.9 67.9 0 0 0 20.019 48.265 67.8 67.8 0 0 0 48.247 20.002h136.534A68.267 68.267 0 0 0 648.533 256h102.4A17.067 17.067 0 0 1 768 273.067v512a17.067 17.067 0 0 1-17.067 17.066zM430.08 617.08a16.95 16.95 0 0 0-5 12.05 16.95 16.95 0 0 0 5 12.066l72.414 72.414 108.493-108.596a16.95 16.95 0 0 0 4.983-12.066 16.9 16.9 0 0 0-4.983-12.066 17.07 17.07 0 0 0-12.066-5 17.07 17.07 0 0 0-12.067 5l-84.463 84.48-48.298-48.282a16.95 16.95 0 0 0-12.066-5 16.96 16.96 0 0 0-11.947 5M409.6 494.933A17.067 17.067 0 0 0 426.667 512h170.666a17.067 17.067 0 0 0 17.067-17.067 17.067 17.067 0 0 0-17.067-17.066H426.667a17.067 17.067 0 0 0-17.067 17.066m0-85.333a17.067 17.067 0 0 0 17.067 17.067h170.666A17.067 17.067 0 0 0 614.4 409.6a17.067 17.067 0 0 0-17.067-17.067H426.667A17.067 17.067 0 0 0 409.6 409.6m34.133-119.467A34.133 34.133 0 0 1 409.6 256a34.133 34.133 0 0 1 34.133-34.133h136.534A34.133 34.133 0 0 1 614.4 256a34.133 34.133 0 0 1-34.133 34.133z\"/></svg>",
+        0,
+        1
+      ],
+      "用印审批 icon_1-26": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#F2984E\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"M273.067 802.133A17.067 17.067 0 0 1 256 785.067v-34.134a17.067 17.067 0 0 1 17.067-17.066h477.866A17.067 17.067 0 0 1 768 750.933v34.134a17.067 17.067 0 0 1-17.067 17.066zm-4.95-102.4A12.15 12.15 0 0 1 256 687.531v-64.376a37.973 37.973 0 0 1 37.837-38.144h95.914a49.186 49.186 0 0 0 48.828-45.346c5.325-69.308-68.761-102.4-68.761-187.46 0-72.107 54.46-130.338 142.182-130.338s142.25 58.146 142.25 130.338c0 85.009-74.103 118.152-68.744 187.46a49.1 49.1 0 0 0 48.81 45.346h95.847A38.025 38.025 0 0 1 768 623.138v64.376a12.134 12.134 0 0 1-12.1 12.202z\"/></svg>",
+        3,
+        1
+      ],
+      "议题管理 icon_3-10": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#7AD6A6\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"M733.867 819.2H341.333V204.8h290.134v134.4l34.133-22.409 34.133 22.409V204.8h34.134A34.133 34.133 0 0 1 768 238.933v546.134a34.133 34.133 0 0 1-34.133 34.133m-443.734 0A34.133 34.133 0 0 1 256 785.067V238.933a34.133 34.133 0 0 1 34.133-34.133H307.2v614.4z\"/></svg>",
+        0,
+        1
+      ],
+      "请休假管理 icon_1-13": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#F96491\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"M682.667 768A136.533 136.533 0 1 1 819.2 631.467 136.687 136.687 0 0 1 682.667 768m-156.468-68.267H273.067a34.133 34.133 0 0 1-34.134-34.133V324.267a34.133 34.133 0 0 1 34.134-34.134h68.266v34.134a51.2 51.2 0 1 0 102.4 0v-34.134h85.334v34.134a51.2 51.2 0 1 0 102.4 0v-34.134H716.8a34.133 34.133 0 0 1 34.133 34.134v150.75A170.667 170.667 0 0 0 526.2 699.733M358.4 529.067a17.067 17.067 0 1 0 0 34.133h34.133a17.067 17.067 0 1 0 0-34.133zm119.467-85.334a17.067 17.067 0 1 0 0 34.134H512a17.067 17.067 0 1 0 0-34.134zm-119.467 0a17.067 17.067 0 1 0 0 34.134h34.133a17.067 17.067 0 0 0 0-34.134zm221.867-102.4a17.067 17.067 0 0 1-17.067-17.066V256a17.067 17.067 0 1 1 34.133 0v68.267a17.067 17.067 0 0 1-17.066 17.066m-187.734 0a17.067 17.067 0 0 1-17.066-17.066V256a17.067 17.067 0 1 1 34.133 0v68.267a17.067 17.067 0 0 1-17.067 17.066\"/><path fill=\"#F96491\" d=\"M750.933 665.6h-68.266a17.067 17.067 0 0 1-17.067-17.067v-68.266a17.067 17.067 0 0 1 34.133 0v51.2h51.2a17.067 17.067 0 0 1 0 34.133\"/></svg>",
+        4,
+        1
+      ],
+      "默认 icon_4-14": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"256\" height=\"256\" class=\"icon\" viewBox=\"0 0 1024 1024\"><path fill=\"#F2984E\" d=\"M273.067 0h477.866Q1024 0 1024 273.067v477.866Q1024 1024 750.933 1024H273.067Q0 1024 0 750.933V273.067Q0 0 273.067 0\"/><path fill=\"#FFF\" d=\"M733.867 750.933H290.133A34.133 34.133 0 0 1 256 716.8V375.467a34.133 34.133 0 0 1 34.133-34.134H358.4v34.134a51.2 51.2 0 0 0 51.2 51.2 51.2 51.2 0 0 0 51.2-51.2v-34.134h85.333v34.134a51.2 51.2 0 0 0 51.2 51.2 51.2 51.2 0 0 0 51.2-51.2v-34.134h85.334A34.133 34.133 0 0 1 768 375.467V716.8a34.133 34.133 0 0 1-34.133 34.133M460.8 597.333a17.067 17.067 0 0 0-17.067 17.067 17.067 17.067 0 0 0 17.067 17.067h102.4a17.067 17.067 0 0 0 17.067-17.067 17.067 17.067 0 0 0-17.067-17.067zm-34.133-68.266a17.067 17.067 0 0 0-17.067 17.066 17.067 17.067 0 0 0 17.067 17.067h170.666a17.067 17.067 0 0 0 17.067-17.067 17.067 17.067 0 0 0-17.067-17.066zm170.666-136.534a17.067 17.067 0 0 1-17.066-17.066V307.2a17.067 17.067 0 0 1 17.066-17.067A17.067 17.067 0 0 1 614.4 307.2v68.267a17.067 17.067 0 0 1-17.067 17.066m-187.733 0a17.067 17.067 0 0 1-17.067-17.066V307.2a17.067 17.067 0 0 1 17.067-17.067 17.067 17.067 0 0 1 17.067 17.067v68.267a17.067 17.067 0 0 1-17.067 17.066\"/></svg>",
+        3,
+        1
+      ]
+    },
+    "currentColor": "",
+    "$_colorPalette": [
+      "#7AD6A6",
+      "#FFF",
+      "#FFC667",
+      "#F2984E",
+      "#F96491"
+    ]
+  },
+}
+// == collection end
+
+const svglib = {}
+
+svglib.registerCollection = (key, lib) => {
+  if (collections[key]) {
+    return
+  }
+
+  if (typeof lib.registerCollection === 'function') {
+    collections[key] = lib.getCollection('default')
+  } else {
+    collections[key] = lib
+  }
+}
+
+svglib.getCollection = (key = 'default') => {
+  if (!collections[key]) throw new Error(`没有找到名为 ${key} 的图标库。`)
+
+  return collections[key]
+}
+
+export const SvgIconLib = svglib
+export default SvgIconLib

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 10 - 0
static/vue.min.js


+ 24 - 0
svgo.config.js

@@ -0,0 +1,24 @@
+// svgo.config.js
+module.exports = {
+  multipass: true, // boolean. false by default
+  datauri: 'enc', // 'base64' (default), 'enc' or 'unenc'.
+  js2svg: {
+    indent: 2, // string with spaces or number of spaces. 4 by default
+    pretty: true, // boolean, false by default
+  },
+  plugins: [
+    // set of built-in plugins enabled by default
+    'preset-default',
+
+    // enable built-in plugins by name
+    'prefixIds',
+
+    // or by expanded notation which allows to configure plugin
+    {
+      name: 'sortAttrs',
+      params: {
+        xmlnsOrder: 'alphabetical',
+      },
+    },
+  ],
+}

+ 13 - 0
uni_modules/uni-grid/changelog.md

@@ -0,0 +1,13 @@
+## 1.4.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-grid](https://uniapp.dcloud.io/component/uniui/uni-grid)
+## 1.3.2(2021-11-09) 
+- 新增 提供组件设计资源,组件样式调整
+## 1.3.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.3.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.2.4(2021-05-12)
+- 新增 组件示例地址
+## 1.2.3(2021-02-05)
+- 调整为uni_modules目录规范

+ 127 - 0
uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue

@@ -0,0 +1,127 @@
+<template>
+	<view v-if="width" :style="'width:'+width+';'+(square?'height:'+width:'')" class="uni-grid-item">
+		<view :class="{ 'uni-grid-item--border': showBorder,  'uni-grid-item--border-top': showBorder && index < column, 'uni-highlight': highlight }"
+		 :style="{'border-right-color': borderColor ,'border-bottom-color': borderColor ,'border-top-color': borderColor }"
+		 class="uni-grid-item__box" @click="_onClick">
+			<slot />
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * GridItem 宫格
+	 * @description 宫格组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=27
+	 * @property {Number} index 子组件的唯一标识 ,点击gird会返回当前的标识
+	 */
+	export default {
+		name: 'UniGridItem',
+		inject: ['grid'],
+		props: {
+			index: {
+				type: Number,
+				default: 0
+			}
+		},
+		data() {
+			return {
+				column: 0,
+				showBorder: true,
+				square: true,
+				highlight: true,
+				left: 0,
+				top: 0,
+				openNum: 2,
+				width: 0,
+				borderColor: '#e5e5e5'
+			}
+		},
+		created() {
+			this.column = this.grid.column
+			this.showBorder = this.grid.showBorder
+			this.square = this.grid.square
+			this.highlight = this.grid.highlight
+			this.top = this.hor === 0 ? this.grid.hor : this.hor
+			this.left = this.ver === 0 ? this.grid.ver : this.ver
+			this.borderColor = this.grid.borderColor
+			this.grid.children.push(this)
+			// this.grid.init()
+			this.width = this.grid.width
+		},
+		beforeDestroy() {
+			this.grid.children.forEach((item, index) => {
+				if (item === this) {
+					this.grid.children.splice(index, 1)
+				}
+			})
+		},
+		methods: {
+			_onClick() {
+				this.grid.change({
+					detail: {
+						index: this.index
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-grid-item {
+		/* #ifndef APP-NVUE */
+		height: 100%;
+		display: flex;
+		/* #endif */
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.uni-grid-item__box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		width: 100%;
+		/* #endif */
+		position: relative;
+		flex: 1;
+		flex-direction: column;
+		// justify-content: center;
+		// align-items: center;
+	}
+
+	.uni-grid-item--border {
+		position: relative;
+		/* #ifdef APP-NVUE */
+		border-bottom-color: #D2D2D2;
+		border-bottom-style: solid;
+		border-bottom-width: 0.5px;
+		border-right-color: #D2D2D2;
+		border-right-style: solid;
+		border-right-width: 0.5px;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		z-index: 0;
+		border-bottom: 1px #D2D2D2 solid;
+		border-right: 1px #D2D2D2 solid;
+		/* #endif */
+	}
+	.uni-grid-item--border-top {
+		position: relative;
+		/* #ifdef APP-NVUE */
+		border-top-color: #D2D2D2;
+		border-top-style: solid;
+		border-top-width: 0.5px;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		border-top: 1px #D2D2D2 solid;
+		z-index: 0;
+		/* #endif */
+	}
+
+
+	.uni-highlight:active {
+		background-color: #f1f1f1;
+	}
+</style>

+ 142 - 0
uni_modules/uni-grid/components/uni-grid/uni-grid.vue

@@ -0,0 +1,142 @@
+<template>
+	<view class="uni-grid-wrap">
+		<view :id="elId" ref="uni-grid" class="uni-grid" :class="{ 'uni-grid--border': showBorder }" :style="{ 'border-left-color':borderColor}">
+			<slot />
+		</view>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	const dom = uni.requireNativePlugin('dom');
+	// #endif
+
+	/**
+	 * Grid 宫格
+	 * @description 宫格组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=27
+	 * @property {Number} column 每列显示个数
+	 * @property {String} borderColor 边框颜色
+	 * @property {Boolean} showBorder 是否显示边框
+	 * @property {Boolean} square 是否方形显示
+	 * @property {Boolean} Boolean 点击背景是否高亮
+	 * @event {Function} change 点击 grid 触发,e={detail:{index:0}},index 为当前点击 gird 下标
+	 */
+	export default {
+		name: 'UniGrid',
+		emits:['change'],
+		props: {
+			// 每列显示个数
+			column: {
+				type: Number,
+				default: 3
+			},
+			// 是否显示边框
+			showBorder: {
+				type: Boolean,
+				default: true
+			},
+			// 边框颜色
+			borderColor: {
+				type: String,
+				default: '#D2D2D2'
+			},
+			// 是否正方形显示,默认为 true
+			square: {
+				type: Boolean,
+				default: true
+			},
+			highlight: {
+				type: Boolean,
+				default: true
+			}
+		},
+		provide() {
+			return {
+				grid: this
+			}
+		},
+		data() {
+			const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
+			return {
+				elId,
+				width: 0
+			}
+		},
+		created() {
+			this.children = []
+		},
+		mounted() {
+			this.$nextTick(()=>{
+				this.init()
+			})
+		},
+		methods: {
+			init() {
+				setTimeout(() => {
+					this._getSize((width) => {
+						this.children.forEach((item, index) => {
+							item.width = width
+						})
+					})
+				}, 50)
+			},
+			change(e) {
+				this.$emit('change', e)
+			},
+			_getSize(fn) {
+				// #ifndef APP-NVUE
+				uni.createSelectorQuery()
+					.in(this)
+					.select(`#${this.elId}`)
+					.boundingClientRect()
+					.exec(ret => {
+						this.width = parseInt((ret[0].width - 1) / this.column) + 'px'
+						fn(this.width)
+					})
+				// #endif
+				// #ifdef APP-NVUE
+				dom.getComponentRect(this.$refs['uni-grid'], (ret) => {
+					this.width = parseInt((ret.size.width - 1) / this.column) + 'px'
+					fn(this.width)
+				})
+				// #endif
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-grid-wrap {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: column;
+		/* #ifdef H5 */
+		width: 100%;
+		/* #endif */
+	}
+
+	.uni-grid {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		// flex: 1;
+		flex-direction: row;
+		flex-wrap: wrap;
+	}
+
+	.uni-grid--border {
+		position: relative;
+		/* #ifdef APP-NVUE */
+		border-left-color: #D2D2D2;
+		border-left-style: solid;
+		border-left-width: 0.5px;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		z-index: 1;
+		border-left: 1px #D2D2D2 solid;
+		/* #endif */
+	}
+</style>

+ 86 - 0
uni_modules/uni-grid/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "uni-grid",
+  "displayName": "uni-grid 宫格",
+  "version": "1.4.0",
+  "description": "Grid 宫格组件,提供移动端常见的宫格布局,如九宫格。",
+  "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"
+        }
+      }
+    }
+  }
+}

+ 11 - 0
uni_modules/uni-grid/readme.md

@@ -0,0 +1,11 @@
+
+
+## Grid 宫格
+> **组件名:uni-grid**
+> 代码块: `uGrid`
+
+
+宫格组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-grid)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 2 - 0
uni_modules/uni-icons/changelog.md

@@ -1,3 +1,5 @@
+## 2.0.10(2024-06-07)
+- 优化 uni-app x 中,size 属性的类型
 ## 2.0.9(2024-01-12)
 fix: 修复图标大小默认值错误的问题
 ## 2.0.8(2023-12-14)

+ 81 - 81
uni_modules/uni-icons/components/uni-icons/uni-icons.uvue

@@ -1,91 +1,91 @@
 <template>
-	<text class="uni-icons" :style="styleObj">
-		<slot>{{unicode}}</slot>
-	</text>
+  <text class="uni-icons" :style="styleObj">
+    <slot>{{unicode}}</slot>
+  </text>
 </template>
 
 <script>
-	import { fontData, IconsDataItem } from './uniicons_file'
+  import { fontData, IconsDataItem } from './uniicons_file'
 
-	/**
-	 * Icons 图标
-	 * @description 用于展示 icon 图标
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=28
-	 * @property {Number} size 图标大小
-	 * @property {String} type 图标图案,参考示例
-	 * @property {String} color 图标颜色
-	 * @property {String} customPrefix 自定义图标
-	 * @event {Function} click 点击 Icon 触发事件
-	 */
-	export default {
-		name: "uni-icons",
-		props: {
-			type: {
-				type: String,
-				default: ''
-			},
-			color: {
-				type: String,
-				default: '#333333'
-			},
-			size: {
-				type: Object,
-				default: 16
-			},
-			fontFamily: {
-				type: String,
-				default: ''
-			}
-		},
-		data() {
-			return {};
-		},
-		computed: {
-			unicode() : string {
-				let codes = fontData.find((item : IconsDataItem) : boolean => { return item.font_class == this.type })
-				if (codes !== null) {
-					return codes.unicode
-				}
-				return ''
-			},
-			iconSize() : string {
-				const size = this.size
-				if (typeof size == 'string') {
-					const reg = /^[0-9]*$/g
-					return reg.test(size as string) ? '' + size + 'px' : '' + size;
-					// return '' + this.size
-				}
-				return this.getFontSize(size as number)
-			},
-			styleObj() : UTSJSONObject {
-				if (this.fontFamily !== '') {
-					return { color: this.color, fontSize: this.iconSize, fontFamily: this.fontFamily }
-				}
-				return { color: this.color, fontSize: this.iconSize }
-			}
-		},
-		created() { },
-		methods: {
-			/**
-			 * 字体大小
-			 */
-			getFontSize(size : number) : string {
-				return size + 'px';
-			},
-		},
-	}
+  /**
+   * Icons 图标
+   * @description 用于展示 icon 图标
+   * @tutorial https://ext.dcloud.net.cn/plugin?id=28
+   * @property {Number,String} size 图标大小
+   * @property {String} type 图标图案,参考示例
+   * @property {String} color 图标颜色
+   * @property {String} customPrefix 自定义图标
+   * @event {Function} click 点击 Icon 触发事件
+   */
+  export default {
+    name: "uni-icons",
+    props: {
+      type: {
+        type: String,
+        default: ''
+      },
+      color: {
+        type: String,
+        default: '#333333'
+      },
+      size: {
+        type: [Number, String],
+        default: 16
+      },
+      fontFamily: {
+        type: String,
+        default: ''
+      }
+    },
+    data() {
+      return {};
+    },
+    computed: {
+      unicode() : string {
+        let codes = fontData.find((item : IconsDataItem) : boolean => { return item.font_class == this.type })
+        if (codes !== null) {
+          return codes.unicode
+        }
+        return ''
+      },
+      iconSize() : string {
+        const size = this.size
+        if (typeof size == 'string') {
+          const reg = /^[0-9]*$/g
+          return reg.test(size as string) ? '' + size + 'px' : '' + size;
+          // return '' + this.size
+        }
+        return this.getFontSize(size as number)
+      },
+      styleObj() : UTSJSONObject {
+        if (this.fontFamily !== '') {
+          return { color: this.color, fontSize: this.iconSize, fontFamily: this.fontFamily }
+        }
+        return { color: this.color, fontSize: this.iconSize }
+      }
+    },
+    created() { },
+    methods: {
+      /**
+       * 字体大小
+       */
+      getFontSize(size : number) : string {
+        return size + 'px';
+      },
+    },
+  }
 </script>
 
 <style scoped>
-	@font-face {
-		font-family: UniIconsFontFamily;
-		src: url('./uniicons.ttf');
-	}
+  @font-face {
+    font-family: UniIconsFontFamily;
+    src: url('./uniicons.ttf');
+  }
 
-	.uni-icons {
-		font-family: UniIconsFontFamily;
-		font-size: 18px;
-		font-style: normal;
-		color: #333;
-	}
+  .uni-icons {
+    font-family: UniIconsFontFamily;
+    font-size: 18px;
+    font-style: normal;
+    color: #333;
+  }
 </style>

+ 3 - 2
uni_modules/uni-icons/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uni-icons",
   "displayName": "uni-icons 图标",
-  "version": "2.0.9",
+  "version": "2.0.10",
   "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
   "keywords": [
     "uni-ui",
@@ -42,7 +42,8 @@
     "platforms": {
       "cloud": {
         "tcb": "y",
-        "aliyun": "y"
+        "aliyun": "y",
+        "alipay": "n"
       },
       "client": {
         "App": {

+ 164 - 0
uni_modules/zui-svg-icon/changelog.md

@@ -0,0 +1,164 @@
+## 0.1.61(2024-09-25)
+1. 修复当 svg 中包含 use 节点导致递归超限制的问题
+## 0.1.60(2024-06-05)
+1. 更新说明文档
+## 0.1.59(2024-06-05)
+1. 更新示例
+## 0.1.58(2024-06-05)
+1. 修改svg图标保存位置, 避免在进行微信小程序开发时将 svg 图标文件也打包在内, 以减小整体包体积
+## 0.1.57(2024-05-10)
+1. 更新图标大小设置说明
+## 0.1.56(2024-04-14)
+1. 更新示例, 增加图标大小调整示例
+## 0.1.55(2024-01-22)
+1. 回滚版本至: 0.1.51, 在未明确bug原因时盲目修改导致了新问题.
+## 0.1.51(2023-12-06)
+1. 重新编写使用文档
+## 0.1.50(2023-12-06)
+1. 当图标不支持换色, 却设置了颜色值时给出警告提示
+## 0.1.49(2023-11-28)
+1. 修复分组图标无法显示的 bug
+## 0.1.48(2023-11-23)
+1. 新增高度属性  height, 设置图标尺寸更直观
+2. 新增 rpx 单位支持
+## 0.1.46(2023-11-19)
+1. 修复宽高比计算错误的问题
+## 0.1.45(2023-11-15)
+1. 优化图标名称定义,除正反斜线(/ 和 \)会被替换为短横线(-)以外,其余字符保持和图标文件名称一致。
+## 0.1.44(2023-11-13)
+1. 修复上一版测试代码导致插件不工作的问题
+## 0.1.43(2023-11-13)
+1. 修复windows平台无法加载分组图标的 bug
+2. 增加图标无限级分组功能
+## 0.1.41(2023-11-04)
+1. 修复在 SVG 预处理时可能导致程序异常中止的 bug
+## 0.1.40(2023-11-03)
+1. 增加图标库功能,支持导入外部图标库
+## 0.1.39(2023-10-20)
+1. 修复示例文件静态图标路径不正确的问题
+## 0.1.38(2023-10-19)
+1. 修复启动微信小程序开发第一次运行时报错的问题
+## 0.1.37(2023-10-08)
+1. 增加图标分组功能。基于文件夹对图标进行分组管理
+## 0.1.36(2023-10-08)
+1. 补充 cli 项目使用说明
+## 0.1.35(2023-09-26)
+1. icon 参数增加对 svg 源码字符串的支持
+## 0.1.34(2023-09-11)
+1. 增加颜色锁定功能
+## 0.1.33(2023-09-10)
+1. 修复了当 svg 图片中没有颜色定义,但在使用中又指定了颜色时导致图片无法显示的问题
+## 0.1.32(2023-09-04)
+1.  增强组件的点击事件兼容处理,同时支持 @click 和 @tap 事件
+## 0.1.31(2023-09-01)
+1. 修复当 svg 文件使用 currentColor 时导致无法替换颜色的问题
+## 0.1.30(2023-08-30)
+1. 修复提取颜色时会漏掉一些颜色的问题
+2. 优化对纯黑色的处理
+3. 修复渲染时可能导致渲染失败的问题
+4. 优化示例
+## 0.1.26(2023-08-26)
+小更新
+## 0.1.25(2023-08-26)
+1. 优化组件结构
+2. 修复支付宝小程序无法点击的 bug
+3. 优化使用说明
+
+##### 示例页面
+
+1. 修复示例页面文案错误
+2. 修复圆角滑块抖动的 bug
+## 0.1.23(2023-08-22)
+1. 增加图标圆角设置
+2. 修复示例项目中点击 slider 不更新的问题
+
+## 0.1.22(2023-08-21)
+
+1. 优化未定义的图标处理方式。未定义的图标不会再阻断程序运行。
+
+## 0.1.21(2023-08-18)
+
+1. 修复了由于 svgo 将纯黑色优化掉后导致图标无法改色的 bug
+2. 优化对 svg 文件 class 定义识别处理
+3. 修复了 vue3 点击事件处理
+4. 其它修改
+
+## 0.1.18(2023-08-17)
+
+1. 修复微信小程序、飞书小程序和 QQ 小程序 click/tap 事件会重复触发的 bug
+2. 修复颜色识别 bug
+3. 增加 spin 效果
+4. 增加 rgba/hsl 颜色格式支持
+5. 更新演示图标
+
+## 0.1.15(2023-08-15)
+
+1. 优化事件处理
+2. 增加普通图片文件图标支持, 但不支持此类图标修改颜色
+3. 增加灰度参数设置
+
+## 0.1.14(2023-08-12)
+
+1. 更新示例
+
+## 0.1.13(2023-08-12)
+
+1. 添加渐变色图标示例
+
+## 0.1.12(2023-08-12)
+
+1. 修复生成工具不更新的bug;
+2. 增加点击事件响应;
+3. 更新示例;
+PS: 升级插件后需要重新生成图标库;
+
+## 0.1.10(2023-08-11)
+
+1. 更新小程序兼容性列表
+
+## 0.1.9(2023-08-11)
+
+1. 添加支付宝小程序支持
+
+## 0.1.8(2023-08-10)
+
+1. 添加使用 class 定义颜色的支持
+2. 添加渐变颜色支持
+3. 优化颜色替换机制
+4. 清理不必要的文件
+
+## 0.1.7(2023-08-10)
+
+1. 修复demo地址错误
+
+## 0.1.6(2023-08-10)
+
+1. 添加小程序兼容性说明
+2. 增加demo页面
+
+## 0.1.5(2023-08-09)
+
+1. 修复在APP和小程序端图标高度显示不正确的bug
+2. 添加参数说明文档
+3. 其它修改
+
+## 0.1.4(2023-08-08)
+
+1. 添加小程序支持
+2. 修复多色填充bug
+3. 图标库生成工具只有在数据变化后才重新写入
+
+## 0.1.2(2023-08-07)
+
+1. 添加svgo配置
+2. 修复生成图标库时路径不正确的问题
+3. VUE3 支持
+
+## 0.1.1(2023-08-07)
+
+1. 更新 readme.md
+
+## 0.1.0(2023-08-07)
+
+1. 单色SVG图标显示与换色
+2. 多色SVG图标显示与换色

+ 355 - 0
uni_modules/zui-svg-icon/components/zui-svg-icon/zui-svg-icon.vue

@@ -0,0 +1,355 @@
+<template>
+  <view class="zui-svg-icon">
+    <view :class="clazz" :style="style">
+      <!-- #ifndef H5 -->
+      <view class="click-helper" @click="doClick" @tap="doTap"></view>
+      <!-- #endif -->
+
+      <image class="zui-svg-icon-image" :src="svgDataurl" mode="aspectFit"></image>
+    </view>
+  </view>
+</template>
+
+<script>
+import SvgIconLib from '@/static/svg-icons-lib.js'
+import { rpx2px } from '../../utils/utils'
+
+export default {
+  name: 'zui-svg-icon',
+
+  components: {},
+
+  props: {
+    icon: {
+      type: String,
+      required: true,
+    },
+
+    /**
+     * 图标颜色
+     *
+     * 单色图标: '#FFF'
+     *
+     * 多色图标: ['#FFF', '#FFF', '#FFF'], 颜色数量需要匹配
+     */
+    color: [String, Array],
+
+    width: {
+      type: [Number, String],
+      default: '1.2em',
+    },
+
+    height: {
+      type: [Number, String],
+      default: undefined,
+    },
+
+    /**
+     * 图标灰度系数
+     * boolean true =>  1
+     * number => [0, 1]
+     */
+    gray: {
+      type: [Boolean, Number],
+      default: false,
+    },
+
+    /**
+     * 图标旋转
+     *
+     * Boolean, true 旋转, 旋转一周时间 1s; false 不旋转, 默认值
+     * Number, 旋转一周所需要时间. > 0 顺时针旋转; < 0 逆时针旋转;
+     */
+    spin: {
+      type: [Number, Boolean],
+      default: false,
+    },
+
+    /**
+     * 圆角设置
+     */
+    borderRadius: [Number, String],
+
+    /**
+     * 图标集合
+     */
+    collection: {
+      type: String,
+      default: 'default',
+    },
+
+    /**
+     * 宽高比
+     * aspectRatio = width / height
+     *
+     * @deprecated  直接使用宽高设置尺寸
+     *
+     */
+    aspectRatio: {
+      type: Number,
+      default: undefined,
+    },
+  },
+
+  data() {
+    return {
+      isFilled: false,
+      colorMap: {},
+      colorPlaceholder: null,
+      isColorCountMatch: true,
+    }
+  },
+
+  computed: {
+    cWidth() {
+      const wid = /rpx$/i.test(this.width) ? rpx2px(this.width, true) : this.width
+      return typeof wid === 'number' ? `${wid}px` : wid
+    },
+
+    cHeight() {
+      if (!this.height) {
+        if (this.aspectRatio) {
+          const unit = `${this.cWidth}`.replace(/[\d.]+/g, '')
+          const hei = parseFloat(this.cWidth) / this.aspectRatio
+
+          return `${hei}${unit}`
+        } else {
+          return this.cWidth
+        }
+      }
+
+      const hei = /rpx$/i.test(this.height) ? rpx2px(this.height, true) : this.height
+      return typeof hei === 'number' ? `${hei}px` : hei
+    },
+
+    svgIconLib() {
+      return SvgIconLib.getCollection(this.collection || 'default')
+    },
+
+    /**
+     * 是否文件来源
+     *
+     * 包含 url, svg原始字符串, 未进行 base64 编码的 data:image/svg+xml uri
+     */
+    isFileSource() {
+      if (/^https?\:\/\//i.test(this.icon)) return true
+      if (/^data:image\//i.test(this.icon)) return true
+      if (/\.svg([?#].*)?$/i.test(this.icon)) return true
+      if (this.icon.indexOf('/') > -1) return true
+
+      return false
+    },
+
+    svgRaw() {
+      if (this.isFileSource) return this.icon
+
+      const iconId = this.icon.toLowerCase()
+      const iconPreset = this.svgIconLib.icons[iconId]
+      if (!iconPreset) {
+        console.warn(`Svg icon [${iconId}] not defined and no fallback icon set.`)
+        return
+      }
+      let svg = iconPreset[0]
+
+      if (this.color && this.isColorCountMatch) {
+        svg = svg.replace(this.colorPlaceholder, (_, a, b) => {
+          return this.colorMap[a.toLowerCase()] + b
+        })
+      }
+
+      return svg
+    },
+
+    svgDataurl() {
+      if (!this.isFileSource) {
+        return `data:image/svg+xml,${encodeURIComponent(this.svgRaw)}`
+      }
+
+      if (/^data:image\/svg\+xml,<svg/i.test(this.icon)) {
+        return `data:image/svg+xml,${encodeURIComponent(this.icon.substring(19))}`
+      }
+
+      if (/^<svg/i.test(this.icon)) {
+        return `data:image/svg+xml,${encodeURIComponent(this.icon)}`
+      }
+
+      return this.icon
+    },
+
+    clazz() {
+      const clazz = ['zui-svg-icon-wrapper']
+      if (this.spin && this.spin > 0) clazz.push('rotate-clockwise')
+      if (this.spin && this.spin < 0) clazz.push('rotate-counterclockwise')
+      // 必须转换成字符串, 不然 支付宝小程序 会以逗号连接类名导致错误
+      return clazz.join(' ')
+    },
+
+    style() {
+      const style = {
+        '--zui-svg-icon-width': this.cWidth,
+        '--zui-svg-icon-height': this.cHeight,
+      }
+
+      if (this.borderRadius) {
+        let br = this.borderRadius
+        if (typeof this.borderRadius === 'string') {
+          if (!/[^a-z%]/i.test(this.borderRadius)) {
+            const v = parseFloat(this.borderRadius)
+            if (v < 1) {
+              br = `${v * 100}%`
+            } else {
+              br = `${v}px`
+            }
+          }
+        } else {
+          if (this.borderRadius < 1) {
+            br = `${this.borderRadius * 100}%`
+          } else {
+            br = `${this.borderRadius}px`
+          }
+        }
+        style['--zui-svg-icon-border-radius'] = br
+      }
+
+      if (this.gray) {
+        if (typeof this.gray === 'number') {
+          style['filter'] = `grayscale(${this.gray})`
+        } else {
+          style['filter'] = 'grayscale(1)'
+        }
+      }
+
+      if (this.spin) {
+        const rotateDur = this.spin === true ? 5 : Math.abs(this.spin)
+        style['--zui-svg-icon-rotate-duration'] = `${rotateDur}s`
+      }
+
+      return Object.keys(style)
+        .map(key => `${key}:${style[key]}`)
+        .join('; ')
+    },
+  },
+
+  watch: {
+    icon() {
+      this.initialIcon()
+    },
+    color() {
+      this.initialIconColor()
+    },
+  },
+
+  mounted() {
+    this.initialIcon()
+  },
+
+  methods: {
+    doClick(evt) {
+      // #ifdef MP-ALIPAY || MP-DINTTALK || MP-DINGDING
+      this.$emit('tap', evt)
+      // #endif
+      setTimeout(() => {
+        this.$emit('click', evt)
+      }, 1)
+    },
+
+    doTap(evt) {
+      setTimeout(() => {
+        this.$emit('click', evt)
+      }, 1)
+    },
+
+    initialIconColor() {
+      // if (this.isFileSource && !!this.color) {
+      //   console.warn(`<zui-svg-icon /> 使用了未经过预处理的图标格式, 将不支持更换颜色. 未经过预处理的图标格式包括: URI, base64 图片, 原始SVG代码`)
+      // }
+      // Initial color map
+      const oriColors = this.getOriginalColors()
+      if (this.color && oriColors.length) {
+        const newColors = typeof this.color === 'string' ? this.color.split(',') : this.color
+        this.colorPlaceholder = new RegExp(`(${oriColors.map(item => item.replace(/([\(\)])/g, '\\$1')).join('|')})([^\\w])`, 'gi')
+        this.colorMap = oriColors.reduce((a, b, idx) => {
+          return {
+            ...a,
+            [b.toLowerCase()]: newColors[idx] || oriColors[idx],
+          }
+        }, {})
+        this.isColorCountMatch = oriColors.length === newColors.length
+      } else {
+        this.colorPlaceholder = null
+        this.colorMap = null
+        this.isColorCountMatch = true
+      }
+    },
+
+    initialIcon() {
+      this.initialIconColor()
+    },
+
+    getOriginalColors() {
+      const iconPreset = this.svgIconLib.icons[this.icon]
+      return iconPreset ? iconPreset.slice(1).map(idx => this.svgIconLib.$_colorPalette[idx]) : []
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+@keyframes rotateClockwise {
+  0% {
+    transform: rotate(0);
+  }
+
+  100% {
+    transform: rotate(360deg);
+  }
+}
+@keyframes rotateCounterclockwise {
+  0% {
+    transform: rotate(360deg);
+  }
+
+  100% {
+    transform: rotate(0);
+  }
+}
+.zui-svg-icon {
+  position: relative;
+  display: inline-flex;
+}
+.zui-svg-icon-wrapper {
+  position: relative;
+  display: inline-flex;
+  justify-content: center;
+  align-items: center;
+  width: var(--zui-svg-icon-width);
+  height: var(--zui-svg-icon-height);
+  line-height: 1;
+  vertical-align: middle;
+  border-radius: var(--zui-svg-icon-border-radius, 0);
+  overflow: hidden;
+
+  .zui-svg-icon-image {
+    width: 100%;
+    height: 100%;
+    vertical-align: middle;
+  }
+
+  &.rotate-clockwise {
+    animation: rotateClockwise var(--zui-svg-icon-rotate-duration, 5s) linear infinite;
+  }
+  &.rotate-counterclockwise {
+    animation: rotateCounterclockwise var(--zui-svg-icon-rotate-duration, 5s) linear infinite;
+  }
+}
+
+.click-helper {
+  position: absolute;
+  z-index: 10;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  opacity: 0;
+}
+</style>

+ 86 - 0
uni_modules/zui-svg-icon/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "zui-svg-icon",
+  "displayName": "多彩SVG图标,自由换色,全端适配",
+  "version": "0.1.61",
+  "description": "一款适用于 uni-app 的 SVG 图标组件。全端适配:APP-Plus、小程序、H5。支持多色SVG图标;支持换色;支持URI和Base64格式;支持spin动画;SVG优化",
+  "keywords": [
+    "svg",
+    "svg-icon",
+    "svg图标",
+    "彩色图标",
+    "换色"
+],
+  "repository": "https://github.com/zivyuan/zui-svg-icon.git",
+  "engines": {
+    "HBuilderX": "^3.4.15"
+  },
+  "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",
+        "alipay": "n"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "y",
+          "vue3": "y"
+        },
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "n",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "u",
+          "字节跳动": "u",
+          "QQ": "y",
+          "钉钉": "y",
+          "快手": "u",
+          "飞书": "y",
+          "京东": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 249 - 0
uni_modules/zui-svg-icon/readme.md

@@ -0,0 +1,249 @@
+# &lt;zui-svg-icon /&gt;
+
+一款适用于 uni-app 的 SVG 图标组件。
+
+**解决了 uni-app 在 APP 端中无法使用 SVG标签的问题**
+
+- 支持单色、多色 SVG 图标换色;
+- 支持图片 URI 地址
+- 支持 Base64 图片格式
+- 支持 spin 动画,可自定义旋转方向与速度
+- SVG 图片优化。
+- 图标库支持
+
+
+
+## 在线演示
+
+**[💻 点我在浏览器里预览 https://uni.imgozi.cn/zui-svg-icon/](https://uni.imgozi.cn/zui-svg-icon/?utm_source=uni-plugin-market&utm_medium=readme&utm_campaign=zui-svg-icon&utm_id=uni-plugin)**
+
+PS: 启动浏览器预览需要打开手机模器
+
+**[📱 扫码体验](https://uni.imgozi.cn/zui-svg-icon/?utm_source=uni-plugin-market&utm_medium=readme&utm_campaign=zui-svg-icon&utm_id=uni-plugin)**
+
+<img src="https://uni.imgozi.cn/zui-svg-icon/static/preview-qr.png" width="128" />
+
+
+
+## 快速上手:
+
+### 〇、生成图标库
+
+```shell
+npm run svgicon
+```
+
+> 第一次使用请先参考下方 **图标库管理** 章节
+
+### 一、使用
+
+```vue
+<!-- 单色图标 -->
+<zui-svg-icon icon="doc" color="#FF0000" />
+<!-- 多色图标 -->
+<zui-svg-icon icon="doc" :color="['#FF0000', '#00FF00', '#0000FF']" />
+```
+
+#### 项目启动时出现错误
+
+当项目启动时出现如下错误时, 先随便编辑一个文件并保存,让编译器进行一次编译后即可正常运行。
+
+出现错误的原因是项目在启动时没有对图标库文件进行正确的转译造成的。
+
+```
+<!--  -->
+SyntaxError: Unexpected token 'export'
+<!--  -->
+Error: module 'static/svg-icons-lib.js' is not defined, require args is '../../../../static/svg-icons-lib.js'
+```
+
+
+## 图标库管理
+
+图标库依赖 [svgo](https://www.npmjs.com/package/svgo) 插件对 svg 图标进行优化压缩,所以在所有工作开始前应该先安装 svgo 依赖。
+
+> HBuilderX 项目和 cli 项目在路径上有所区别,请根据自己项目类型合理使用。
+
+
+
+### 〇、安装必要依赖
+
+```
+npm i svgo@latest
+```
+
+如果最新版本在使用中出现异常,可以将 svgo 回退到插件开发环境使用的版本 `svgo@^3.0.5`。
+
+
+
+### 一、配置 npm 脚本
+
+在项目 `package.json` 中添加脚本。
+
+HBuilderX 项目
+
+```json
+"svgicon": "node ./uni_modules/zui-svg-icon/tools/generate-svg-icon.js"
+```
+
+cli 项目
+
+```json
+"svgicon": "node ./src/uni_modules/zui-svg-icon/tools/generate-svg-icon.js"
+```
+
+
+
+### 二、准备图片
+
+将 svg 图片复制到指定的目录
+
+HBuilderX 项目
+
+```shell
+./assets/svg-icons/
+```
+
+cli 项目
+
+```shell
+./src/assets/svg-icons/
+```
+
+> 在 svg 目录中可以对图标按文件夹进行分组管理
+
+
+
+### 三、生成图标库
+
+运行图标库生成脚本
+
+```shell
+npm run svgicon
+```
+
+生成图标库时,图标名称会与svg 文件名保持一致。如果对图标库进行了分组管理,则图标名称前面会添加目录名称作为前缀。
+
+例如:`browser/chrome-muti-color.svg` 生成后的图标名称为:`browser-chrome-muti-color`
+
+建议图标名称只使用 **英文、数字和连接线** 的组合。
+
+对于多色图标,生成工具会在生成报告中输出颜色序列,便于在项目中动态替换以实现图标换色功能。
+
+生成报告示例:
+
+```shell
+Add    ppt
+       [ '#f2733d', '#f3b2a6', '#fff' ]
+Update xls
+       [ '#47b347', '#e0efdc' ]
+Total 2 svg icon(s) generated, 1 added, 0 deleted.
+```
+
+> **除了自定义图标,现在还可以使用现成的图标库,比如这个:** <span class="banner">
+> <span class="surport">
+> <a href="https://ext.dcloud.net.cn/plugin?id=15226" target="_blank" class="btn btn-support" style="border: 1px solid #ec4d4d;letter-spacing: 1px;">
+>   Material图标集合 图标组件 SVG 图标库
+> </a>
+> </span>
+> </span>
+
+### 四、使用
+
+```vue
+<zui-svg-icon icon="my-icon" />
+```
+
+> 在新增 svg 图标或更新svg 图标后都需要按步骤三重新生成图标库
+
+<span class="banner">
+<span class="surport">
+<a class="btn btn-support " data-toggle="modal" data-target="#support_modal" style="border: 1px solid #ec4d4d;letter-spacing: 1px;">
+  🍓🍇🍉 好用就打赏一下  🍒🍑🥭
+</a>
+</span>
+</span>
+
+
+
+## 参数说明
+
+| 参数 | 类型 | 说明 |
+|---|---|---|
+| icon | string | 图标 id, 同图标文件名 |
+|  | string | svg 源码字符串 *(不支持改色)* |
+|  | string | 图片 URI *(不支持改色)* |
+|  | string | Data URI *(不支持改色)* |
+| color | string  | 单色图标颜色 |
+|  | string[] | 多色图标颜色, 颜色种类必须与图标中的种类一致<br/>[了解多色图标👇🏻](#❤️‍🔥-多色图标) |
+| width | string \| number | 图标宽度. 默认 1.2em. |
+| height | undefined \| string \| number | 图标调试. 默认 undefined, 即表示图标宽高相同, 是正方形. |
+| gray | number | 灰度显示系数, [0, 1]. 默认为 0, 不开启 |
+|  | boolean | 灰度显示系数. true => 1, false => 0 |
+| spin | boolean | 是否启用 spin 动画。默认 false |
+| | number | 动画时间。默认 5s,顺时针旋转;指定为负数时逆时针旋转;为 0 时禁用旋转效果,即 spin=false。 |
+| borderRadius | number | 圆角数值,单位:像素。当输入值小于1当,作百分比处理 |
+| | string | CSS 允许的值 |
+
+> 说明:
+>   当 icon 配置为 svg 源码字符串,图片URI,Data URI 时,图标不支持修改颜色
+
+
+
+## 事件
+
+#### @click=(evt: Event) => void
+
+#### @tap=(evt: Event) => void
+
+组件针对小程序运行环境做了兼容处理,下表中列表已经做过兼容的小程序及映射的事件类型。
+
+| 小程序 | @click | @tap  | @click & @tap |
+| ------ | ------ | ----- | ------------- |
+| H5     | Click  | Click | Click, Click  |
+| 飞书   | Tap    | Tap   | Tap, Click    |
+| QQ     | Tap    | Tap   | Tap, Click    |
+| 钉钉   | Tap    | Tap   | Tap, Click    |
+| 支付宝 | Tap    | Tap   | Tap, Click    |
+| 微信   | Tap    | Tap   | Tap, Click    |
+
+在 H5 环境下,如果同时指定 @click 和 @tap 事件,两个事件的触发顺序由书写顺序确定。
+
+比如:`<zui-svg-icon @click @tap />` 是先触发 @click,再触发 @tap。
+
+**PPPS:由于事件是兼容性处理,@click 和 @tap 事件里的 target 对象可能不一致,使用 target 时需要特别注意这个情况**
+
+
+<span class="banner">
+<span class="surport">
+<a class="btn btn-support " data-toggle="modal" data-target="#support_modal" style="border: 1px solid #ec4d4d;letter-spacing: 1px;">
+  🍓🍇🍉 好用就打赏一下  🍒🍑🥭
+</a>
+</span>
+</span>
+
+
+
+## 特色功能
+
+### 颜色锁定
+
+在配置 color 时,将对应位置的颜色设置为空时,将保留原来的颜色。
+
+『空值』是以下值中的任意一种:
+
+`空字符串, null, undefined, false, 0`
+
+
+
+## 🍓 支持
+
+如果组件对您有帮助,请不吝打赏。肥宅快乐水🥤是创作动力!🥤🥤🥤
+
+<span class="banner">
+<span class="surport">
+<a class="btn btn-support " data-toggle="modal" data-target="#support_modal" style="border: 1px solid #ec4d4d;letter-spacing: 1px;">
+  🍓🍇🍉 好用就打赏一下  🍒🍑🥭
+</a>
+</span>
+</span>

+ 1 - 0
uni_modules/zui-svg-icon/static/zui-svg-icon/zui-svg-icon-placeholder.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50"/>

+ 270 - 0
uni_modules/zui-svg-icon/tools/generate-svg-icon.js

@@ -0,0 +1,270 @@
+#!/usr/bin/env node
+
+/**
+ * SVG 图标组件生成器
+ *
+ * 转换 SVG 图标为 inline 数据
+ *
+ */
+
+const fs = require('fs')
+const path = require('path')
+const readline = require('readline')
+const cliInput = prompt => {
+  return new Promise((resolve, reject) => {
+    const rl = readline.createInterface({
+      input: process.stdin,
+      output: process.stdout,
+    })
+    rl.question(prompt, ipt => {
+      resolve(ipt)
+      rl.close()
+    })
+  })
+}
+const { optimize } = require('svgo')
+
+const parseOptions = () => {
+  const argv = process.argv.slice(2)
+  const opts = {}
+  argv.forEach(arg => {
+    if (arg.indexOf('=') > -1) {
+      const o = arg.split('=')
+      opts[o[0]] = o[1]
+    } else {
+      opts[arg] = true
+    }
+  })
+  return opts
+}
+
+const options = parseOptions()
+
+const regColorFormat = /#([0-9A-F]{3}|[0-9A-F]{6}|[0-9A-F]{8})|(?:rgb|hsl|hwb|lab|lch|oklab|oklch)a?\([\d.,\/%]+\)/i
+const regCurrentColor = /([:"'] *)currentColor/g
+
+const root = path.resolve(__dirname + '/../../..')
+if (fs.existsSync(root + '/src')) {
+  root = root + '/src'
+}
+const svgo = root + '/svgo.config.js'
+if (!fs.existsSync(svgo)) {
+  fs.copyFileSync(__dirname + '/svgo.config.js', svgo)
+}
+
+// 需要处理的颜色属性
+let svgBase = root + '/assets'
+const svgFolder = options.source || svgBase + '/svg-icons'
+
+if (!fs.existsSync(svgFolder)) {
+  fs.mkdirSync(svgFolder, { recursive: true })
+}
+const svgLibFile = root + `/static/${options.lib || 'svg-icons-lib'}.js`
+
+const svgLibCurrent = (() => {
+  try {
+    let raw = fs.readFileSync(svgLibFile, { encoding: 'utf-8' })
+    const start = raw.indexOf('const collections = {') + 20
+    const end = raw.indexOf('// == collection end')
+    raw = raw.substring(start, end).trim().replace(/;$/, '')
+    return JSON.parse(raw).default
+  } catch (err) {}
+  return {}
+})()
+const svgPath = path.resolve(svgFolder)
+const svgLib = {}
+const svgList = (() => {
+  const regFile = /\.svg$/i
+  const fileList = []
+  const loadSvgList = searchPath => {
+    const files = fs.readdirSync(searchPath, { recursive: false })
+    for (const file of files) {
+      const filePath = path.posix.join(searchPath, file)
+      const stat = fs.statSync(filePath)
+      if (stat.isFile()) {
+        if (!regFile.test(filePath)) continue
+
+        const item = filePath.slice(filePath.lastIndexOf('svg-icons/') + 10)
+        // const name = item.slice(0, -4).replace(/[/!@#$%^&*()+=\[\]{};:'",.<>\?`]/g, '-').toLowerCase()
+        const name = item.slice(0, -4).replace(/[\/\\]/g, '-').toLowerCase()
+        const content = fs.readFileSync(filePath, {
+          encoding: 'utf-8',
+        })
+        fileList.push({
+          name,
+          content,
+          hasCurrentColor: regCurrentColor.test(content),
+          file: filePath,
+        })
+      }
+      //
+      else if (stat.isDirectory()) {
+        loadSvgList(filePath)
+      }
+    }
+    return fileList
+  }
+
+  return loadSvgList(svgPath).filter(item => !!item)
+})(svgPath)
+
+//
+const defaultColor = '#22ac38'
+let currentColor = svgLibCurrent.currentColor || ''
+let palette = []
+
+const generateIcon = svgRaw => {
+  // svgo 会过滤纯黑, 此处对纯黑做简单处理
+  svgRaw = svgRaw.replace(regCurrentColor, `$1${currentColor}`).replace(/#0{3,8}/g, '#ZZZZZZ')
+  const result = optimize(svgRaw, {
+    multipass: true,
+  })
+  result.data = result.data.replace(/#Z{3,8}/gi, '#000')
+
+  const regColor = /(fill|stroke|stop-color):([^;}]+)/g
+  const parseColor = colorStr => {
+    if (!regRef.test(colorStr)) {
+      return colorStr
+    }
+    // 从 Gradient 引用里获取颜色
+    const match = colorStr.match(regRef)
+    const ref = gradients.find(item => {
+      return item.id === match[1]
+    })
+    return ref ? ref.colors : []
+  }
+
+  // Step 1, find all Gradient define and make KV map
+  const regGradient = /<(\w+Gradient) id="([^"]+)" [^>]+>(.+?)<\/\1>/g
+  const regStopColors = /stop-color="([^"]+)"/g
+  const gradients = [...result.data.matchAll(regGradient)].map(item => {
+    const colors = [...item[3].matchAll(regStopColors)].map(item => item[1])
+    return {
+      id: item[2],
+      content: item[3],
+      colors,
+    }
+  })
+
+  // Step 2, find all class define and make KV map
+  const regClass = /\.(cls-\d+)\{([^}]+)\}/g
+  const regRef = /url\(#(.+)\)/
+  const classes = [...result.data.matchAll(regClass)].map(item => {
+    // Search colors from item[2]
+    // find fill, stroke, stop-color
+    const colors = [...item[2].matchAll(regColor)].map(item => parseColor(item[2]))
+
+    return {
+      id: item[1],
+      content: item[2],
+      colors: colors,
+    }
+  })
+
+  // Step 3, find all style, class, stroke property and search color in value
+  const regProps = /(fill|stroke|class|style)="([^"]+)"/g
+  const props = [...result.data.matchAll(regProps)].map(content => {
+    let colors = []
+    if (content[1] === 'class') {
+      const item = classes.find(item => item.id === content[2])
+      colors = item ? item.colors : []
+    } else if (content[1] === 'style') {
+      colors = [...content[2].matchAll(regColor)].map(item => parseColor(item[2]))
+    } else if (content[1] === 'fill') {
+      colors = parseColor(content[2])
+    } else {
+      colors = content[2]
+    }
+    return {
+      prop: content[1],
+      content: content[2],
+      // 定义里的颜色
+      colors: colors,
+    }
+  })
+
+  // Step 4, filter
+  let colors = props
+    .map(item => item.colors)
+    .flat(2)
+    .filter(item => item !== 'none' && !/^url/.test(item))
+    .map(item => (item === 'currentColor' ? currentColor : item))
+  colors = Array.from(new Set(colors))
+
+  // Append new colors to palette
+  palette = Array.from(new Set([...palette, ...colors]))
+
+  // Build color index
+  let colorMap = colors.map(c => palette.indexOf(c))
+  const colorTotal = colors.length
+
+  if (colorTotal === 0) {
+    const fixable = /<(path|circle|ellipse|polygon|polyline|rect|use) /g
+    if (fixable.test(result.data)) {
+      return generateIcon(result.data.replace(fixable, `<$1 fill="${currentColor || defaultColor}" `))
+    } else {
+      console.log('  SVG 图片没有配置颜色, 并且无法进行预处理。请联系作者修复此问题。https://ext.dcloud.net.cn/plugin?id=13964')
+    }
+  } else if (colorTotal > 0) {
+    console.log('    ', JSON.stringify(colors))
+  }
+
+  return [result.data, ...colorMap]
+}
+
+;(async () => {
+  // 检测是否存在 currentColor
+  const hasCurrentColor = svgList.find(item => item.hasCurrentColor)
+  if (!currentColor && hasCurrentColor) {
+    console.log('\n')
+    console.log('::>> 检测到 svg 文件中使用了 currentColor 变量,该变量在组件中不被支持。\n')
+    currentColor = defaultColor
+    console.log(`::>> 需要指定一个颜色替代,默认黑色为(${currentColor})。\n`)
+
+    do {
+      const color = await cliInput(`请输入颜色,直接回车(enter)使用默认值:`)
+      if (color && color.length && !regColorFormat.test(color)) {
+        console.log('\n::>> 颜色格式不正确,请输入以下格式的颜色值:\n')
+        console.log('::>>', ['#000', '#000000', 'rgb(0, 0, 0)', 'rgba(0, 0, 0, 1)'].join('   '), '\n')
+      } else {
+        currentColor = color && color.length ? color.replace(/ /g, '') : defaultColor
+      }
+    } while (!currentColor)
+  }
+
+  svgList.forEach(item => {
+    console.log(item.name)
+    svgLib[item.name] = generateIcon(item.content)
+  })
+
+  const data = {
+    icons: JSON.parse(JSON.stringify(svgLib)),
+    currentColor,
+    $_colorPalette: palette,
+  }
+
+  const hasChange = JSON.stringify(svgLibCurrent) !== JSON.stringify(data)
+  if (hasChange) {
+    const scriptTpl = fs.readFileSync(__dirname + '/svg-icons-lib.tpl.js', {
+      encoding: 'utf-8',
+    })
+    const params = {
+      datetime: `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`,
+      default: JSON.stringify(data, null, 2).split('\n').join('\n  '),
+    }
+    const script = scriptTpl.replace(/__(\w+)__/g, (_, key) => {
+      return params[key] || _
+    })
+
+    fs.writeFileSync(svgLibFile, script)
+    console.log(`\nTotal ${Object.keys(svgLib).length} svg icon(s) generated.`)
+  } else {
+    console.log(`\nTotal ${Object.keys(svgLib).length} svg icon(s) generated, nochange.`)
+  }
+
+  if (hasCurrentColor) {
+    console.log('\n')
+    console.log('  当前有使用到 currentColor 变量,可通过文件 static/svg-icons-lib.js 里的 currentColor 属性进行修改。')
+    console.log('\n')
+  }
+})()

+ 40 - 0
uni_modules/zui-svg-icon/tools/svg-icons-lib.tpl.js

@@ -0,0 +1,40 @@
+/**
+ *
+ * Icon Library for <zui-svg-icon> usage
+ *
+ * Auto generated by /tools/generate-svg-icon.js
+ *
+ * !!! DO NOT MODIFY MANUALLY !!!
+ *
+ * @datetime __datetime__
+ *
+ */
+
+// == collection start
+const collections = {
+  default: __default__,
+}
+// == collection end
+
+const svglib = {}
+
+svglib.registerCollection = (key, lib) => {
+  if (collections[key]) {
+    return
+  }
+
+  if (typeof lib.registerCollection === 'function') {
+    collections[key] = lib.getCollection('default')
+  } else {
+    collections[key] = lib
+  }
+}
+
+svglib.getCollection = (key = 'default') => {
+  if (!collections[key]) throw new Error(`没有找到名为 ${key} 的图标库。`)
+
+  return collections[key]
+}
+
+export const SvgIconLib = svglib
+export default SvgIconLib

+ 24 - 0
uni_modules/zui-svg-icon/tools/svgo.config.js

@@ -0,0 +1,24 @@
+// svgo.config.js
+module.exports = {
+  multipass: true, // boolean. false by default
+  datauri: 'enc', // 'base64' (default), 'enc' or 'unenc'.
+  js2svg: {
+    indent: 2, // string with spaces or number of spaces. 4 by default
+    pretty: true, // boolean, false by default
+  },
+  plugins: [
+    // set of built-in plugins enabled by default
+    'preset-default',
+
+    // enable built-in plugins by name
+    'prefixIds',
+
+    // or by expanded notation which allows to configure plugin
+    {
+      name: 'sortAttrs',
+      params: {
+        xmlnsOrder: 'alphabetical',
+      },
+    },
+  ],
+}

+ 11 - 0
uni_modules/zui-svg-icon/utils/utils.js

@@ -0,0 +1,11 @@
+const _screenWidth = uni.getSystemInfoSync().screenWidth;
+/**
+ * rpx 单位转换为 px
+ *
+ * @param {number | string} rpx 待转换的数值
+ * @returns number
+ */
+export const rpx2px = (rpx, unit = false) => {
+  const px = (_screenWidth * Number.parseFloat(rpx)) / 750;
+  return unit ? `${px}px` : px;
+}

+ 506 - 0
yarn.lock

@@ -0,0 +1,506 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/runtime@^7.17.2":
+  "integrity" "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g=="
+  "resolved" "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.5.tgz"
+  "version" "7.24.5"
+  dependencies:
+    "regenerator-runtime" "^0.14.0"
+
+"@trysound/sax@0.2.0":
+  "integrity" "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
+  "resolved" "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz"
+  "version" "0.2.0"
+
+"balanced-match@^1.0.0":
+  "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+  "resolved" "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz"
+  "version" "1.0.2"
+
+"base64-js@^1.3.1":
+  "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+  "resolved" "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz"
+  "version" "1.5.1"
+
+"bl@^4.0.2":
+  "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="
+  "resolved" "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz"
+  "version" "4.1.0"
+  dependencies:
+    "buffer" "^5.5.0"
+    "inherits" "^2.0.4"
+    "readable-stream" "^3.4.0"
+
+"boolbase@^1.0.0":
+  "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+  "resolved" "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz"
+  "version" "1.0.0"
+
+"brace-expansion@^1.1.7":
+  "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
+  "resolved" "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz"
+  "version" "1.1.11"
+  dependencies:
+    "balanced-match" "^1.0.0"
+    "concat-map" "0.0.1"
+
+"buffer-from@^1.0.0":
+  "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+  "resolved" "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz"
+  "version" "1.1.2"
+
+"buffer@^5.5.0":
+  "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="
+  "resolved" "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz"
+  "version" "5.7.1"
+  dependencies:
+    "base64-js" "^1.3.1"
+    "ieee754" "^1.1.13"
+
+"commander@^7.2.0":
+  "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+  "resolved" "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz"
+  "version" "7.2.0"
+
+"commist@^1.0.0":
+  "integrity" "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg=="
+  "resolved" "https://registry.npmmirror.com/commist/-/commist-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "leven" "^2.1.0"
+    "minimist" "^1.1.0"
+
+"concat-map@0.0.1":
+  "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+  "resolved" "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz"
+  "version" "0.0.1"
+
+"concat-stream@^2.0.0":
+  "integrity" "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="
+  "resolved" "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "buffer-from" "^1.0.0"
+    "inherits" "^2.0.3"
+    "readable-stream" "^3.0.2"
+    "typedarray" "^0.0.6"
+
+"copy-text-to-clipboard@^3.0.1":
+  "integrity" "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q=="
+  "resolved" "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz"
+  "version" "3.2.0"
+
+"core-js@^3.11.0":
+  "integrity" "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug=="
+  "resolved" "https://registry.npmmirror.com/core-js/-/core-js-3.37.0.tgz"
+  "version" "3.37.0"
+
+"css-select@^5.1.0":
+  "integrity" "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="
+  "resolved" "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz"
+  "version" "5.1.0"
+  dependencies:
+    "boolbase" "^1.0.0"
+    "css-what" "^6.1.0"
+    "domhandler" "^5.0.2"
+    "domutils" "^3.0.1"
+    "nth-check" "^2.0.1"
+
+"css-tree@^2.3.1":
+  "integrity" "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw=="
+  "resolved" "https://registry.npmmirror.com/css-tree/-/css-tree-2.3.1.tgz"
+  "version" "2.3.1"
+  dependencies:
+    "mdn-data" "2.0.30"
+    "source-map-js" "^1.0.1"
+
+"css-tree@~2.2.0":
+  "integrity" "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="
+  "resolved" "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz"
+  "version" "2.2.1"
+  dependencies:
+    "mdn-data" "2.0.28"
+    "source-map-js" "^1.0.1"
+
+"css-what@^6.1.0":
+  "integrity" "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
+  "resolved" "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz"
+  "version" "6.1.0"
+
+"csso@^5.0.5":
+  "integrity" "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="
+  "resolved" "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz"
+  "version" "5.0.5"
+  dependencies:
+    "css-tree" "~2.2.0"
+
+"dayjs@^1.11.7":
+  "integrity" "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
+  "resolved" "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz"
+  "version" "1.11.11"
+
+"debug@^4.1.1", "debug@^4.3.1":
+  "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
+  "resolved" "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz"
+  "version" "4.3.4"
+  dependencies:
+    "ms" "2.1.2"
+
+"dom-serializer@^2.0.0":
+  "integrity" "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="
+  "resolved" "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz"
+  "version" "2.0.0"
+  dependencies:
+    "domelementtype" "^2.3.0"
+    "domhandler" "^5.0.2"
+    "entities" "^4.2.0"
+
+"domelementtype@^2.3.0":
+  "integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+  "resolved" "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz"
+  "version" "2.3.0"
+
+"domhandler@^5.0.2", "domhandler@^5.0.3":
+  "integrity" "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="
+  "resolved" "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz"
+  "version" "5.0.3"
+  dependencies:
+    "domelementtype" "^2.3.0"
+
+"domutils@^3.0.1":
+  "integrity" "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="
+  "resolved" "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz"
+  "version" "3.2.2"
+  dependencies:
+    "dom-serializer" "^2.0.0"
+    "domelementtype" "^2.3.0"
+    "domhandler" "^5.0.3"
+
+"duplexify@^4.1.1":
+  "integrity" "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA=="
+  "resolved" "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.3.tgz"
+  "version" "4.1.3"
+  dependencies:
+    "end-of-stream" "^1.4.1"
+    "inherits" "^2.0.3"
+    "readable-stream" "^3.1.1"
+    "stream-shift" "^1.0.2"
+
+"echarts@^5.4.2":
+  "integrity" "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw=="
+  "resolved" "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz"
+  "version" "5.5.0"
+  dependencies:
+    "tslib" "2.3.0"
+    "zrender" "5.5.0"
+
+"end-of-stream@^1.1.0", "end-of-stream@^1.4.1":
+  "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="
+  "resolved" "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz"
+  "version" "1.4.4"
+  dependencies:
+    "once" "^1.4.0"
+
+"entities@^4.2.0":
+  "integrity" "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+  "resolved" "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz"
+  "version" "4.5.0"
+
+"fs.realpath@^1.0.0":
+  "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+  "resolved" "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz"
+  "version" "1.0.0"
+
+"glob@^7.1.6":
+  "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="
+  "resolved" "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz"
+  "version" "7.2.3"
+  dependencies:
+    "fs.realpath" "^1.0.0"
+    "inflight" "^1.0.4"
+    "inherits" "2"
+    "minimatch" "^3.1.1"
+    "once" "^1.3.0"
+    "path-is-absolute" "^1.0.0"
+
+"help-me@^3.0.0":
+  "integrity" "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ=="
+  "resolved" "https://registry.npmmirror.com/help-me/-/help-me-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "glob" "^7.1.6"
+    "readable-stream" "^3.6.0"
+
+"ieee754@^1.1.13":
+  "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+  "resolved" "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz"
+  "version" "1.2.1"
+
+"inflight@^1.0.4":
+  "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="
+  "resolved" "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz"
+  "version" "1.0.6"
+  dependencies:
+    "once" "^1.3.0"
+    "wrappy" "1"
+
+"inherits@^2.0.3", "inherits@^2.0.4", "inherits@2":
+  "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+  "resolved" "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz"
+  "version" "2.0.4"
+
+"js-sdsl@4.3.0":
+  "integrity" "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ=="
+  "resolved" "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz"
+  "version" "4.3.0"
+
+"leven@^2.1.0":
+  "integrity" "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA=="
+  "resolved" "https://registry.npmmirror.com/leven/-/leven-2.1.0.tgz"
+  "version" "2.1.0"
+
+"lodash@^4.17.21":
+  "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+  "resolved" "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
+  "version" "4.17.21"
+
+"lru-cache@^6.0.0":
+  "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
+  "resolved" "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz"
+  "version" "6.0.0"
+  dependencies:
+    "yallist" "^4.0.0"
+
+"mdn-data@2.0.28":
+  "integrity" "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
+  "resolved" "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz"
+  "version" "2.0.28"
+
+"mdn-data@2.0.30":
+  "integrity" "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
+  "resolved" "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.30.tgz"
+  "version" "2.0.30"
+
+"minimatch@^3.1.1":
+  "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="
+  "resolved" "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz"
+  "version" "3.1.2"
+  dependencies:
+    "brace-expansion" "^1.1.7"
+
+"minimist@^1.1.0", "minimist@^1.2.5":
+  "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+  "resolved" "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz"
+  "version" "1.2.8"
+
+"mpvue-echarts@^0.3.2":
+  "integrity" "sha512-KULGS1DOMNhXu3nBkBv6BtmnqjyHLc+2Dur7eW+2s2aic1NCOygglCMmAmMEU6/TGSR67ttFA2NYxXPUYbNhWQ=="
+  "resolved" "https://registry.npmmirror.com/mpvue-echarts/-/mpvue-echarts-0.3.2.tgz"
+  "version" "0.3.2"
+
+"mqtt-packet@^6.8.0":
+  "integrity" "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA=="
+  "resolved" "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-6.10.0.tgz"
+  "version" "6.10.0"
+  dependencies:
+    "bl" "^4.0.2"
+    "debug" "^4.1.1"
+    "process-nextick-args" "^2.0.1"
+
+"mqtt@^4.3.7":
+  "integrity" "sha512-2xT75uYa0kiPEF/PE0VPdavmEkoBzMT/UL9moid0rAvlCtV48qBwxD62m7Ld/4j8tSkIO1E/iqRl/S72SEOhOw=="
+  "resolved" "https://registry.npmmirror.com/mqtt/-/mqtt-4.3.8.tgz"
+  "version" "4.3.8"
+  dependencies:
+    "commist" "^1.0.0"
+    "concat-stream" "^2.0.0"
+    "debug" "^4.1.1"
+    "duplexify" "^4.1.1"
+    "help-me" "^3.0.0"
+    "inherits" "^2.0.3"
+    "lru-cache" "^6.0.0"
+    "minimist" "^1.2.5"
+    "mqtt-packet" "^6.8.0"
+    "number-allocator" "^1.0.9"
+    "pump" "^3.0.0"
+    "readable-stream" "^3.6.0"
+    "reinterval" "^1.1.0"
+    "rfdc" "^1.3.0"
+    "split2" "^3.1.0"
+    "ws" "^7.5.5"
+    "xtend" "^4.0.2"
+
+"ms@2.1.2":
+  "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+  "resolved" "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz"
+  "version" "2.1.2"
+
+"mutation-observer@^1.0.3":
+  "integrity" "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
+  "resolved" "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz"
+  "version" "1.0.3"
+
+"nth-check@^2.0.1":
+  "integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="
+  "resolved" "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "boolbase" "^1.0.0"
+
+"number-allocator@^1.0.9":
+  "integrity" "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA=="
+  "resolved" "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz"
+  "version" "1.0.14"
+  dependencies:
+    "debug" "^4.3.1"
+    "js-sdsl" "4.3.0"
+
+"once@^1.3.0", "once@^1.3.1", "once@^1.4.0":
+  "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="
+  "resolved" "https://registry.npmmirror.com/once/-/once-1.4.0.tgz"
+  "version" "1.4.0"
+  dependencies:
+    "wrappy" "1"
+
+"path-is-absolute@^1.0.0":
+  "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+  "resolved" "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+  "version" "1.0.1"
+
+"picocolors@^1.0.0":
+  "integrity" "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+  "resolved" "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz"
+  "version" "1.1.1"
+
+"process-nextick-args@^2.0.1":
+  "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+  "resolved" "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
+  "version" "2.0.1"
+
+"pump@^3.0.0":
+  "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww=="
+  "resolved" "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz"
+  "version" "3.0.0"
+  dependencies:
+    "end-of-stream" "^1.1.0"
+    "once" "^1.3.1"
+
+"readable-stream@^3.0.0", "readable-stream@^3.0.2", "readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0":
+  "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="
+  "resolved" "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz"
+  "version" "3.6.2"
+  dependencies:
+    "inherits" "^2.0.3"
+    "string_decoder" "^1.1.1"
+    "util-deprecate" "^1.0.1"
+
+"regenerator-runtime@^0.14.0":
+  "integrity" "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+  "resolved" "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
+  "version" "0.14.1"
+
+"reinterval@^1.1.0":
+  "integrity" "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ=="
+  "resolved" "https://registry.npmmirror.com/reinterval/-/reinterval-1.1.0.tgz"
+  "version" "1.1.0"
+
+"rfdc@^1.3.0":
+  "integrity" "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg=="
+  "resolved" "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.1.tgz"
+  "version" "1.3.1"
+
+"safe-buffer@~5.2.0":
+  "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+  "resolved" "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz"
+  "version" "5.2.1"
+
+"source-map-js@^1.0.1":
+  "integrity" "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+  "resolved" "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz"
+  "version" "1.2.1"
+
+"split2@^3.1.0":
+  "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg=="
+  "resolved" "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz"
+  "version" "3.2.2"
+  dependencies:
+    "readable-stream" "^3.0.0"
+
+"stream-shift@^1.0.2":
+  "integrity" "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="
+  "resolved" "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz"
+  "version" "1.0.3"
+
+"string_decoder@^1.1.1":
+  "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="
+  "resolved" "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz"
+  "version" "1.3.0"
+  dependencies:
+    "safe-buffer" "~5.2.0"
+
+"svgo@^3.3.2":
+  "integrity" "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw=="
+  "resolved" "https://registry.npmmirror.com/svgo/-/svgo-3.3.2.tgz"
+  "version" "3.3.2"
+  dependencies:
+    "@trysound/sax" "0.2.0"
+    "commander" "^7.2.0"
+    "css-select" "^5.1.0"
+    "css-tree" "^2.3.1"
+    "css-what" "^6.1.0"
+    "csso" "^5.0.5"
+    "picocolors" "^1.0.0"
+
+"tslib@2.3.0":
+  "integrity" "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+  "resolved" "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz"
+  "version" "2.3.0"
+
+"typedarray@^0.0.6":
+  "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+  "resolved" "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz"
+  "version" "0.0.6"
+
+"util-deprecate@^1.0.1":
+  "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+  "resolved" "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz"
+  "version" "1.0.2"
+
+"vconsole@^3.15.1":
+  "integrity" "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g=="
+  "resolved" "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz"
+  "version" "3.15.1"
+  dependencies:
+    "@babel/runtime" "^7.17.2"
+    "copy-text-to-clipboard" "^3.0.1"
+    "core-js" "^3.11.0"
+    "mutation-observer" "^1.0.3"
+
+"wrappy@1":
+  "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+  "resolved" "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz"
+  "version" "1.0.2"
+
+"ws@^7.5.5":
+  "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q=="
+  "resolved" "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz"
+  "version" "7.5.9"
+
+"xtend@^4.0.2":
+  "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+  "resolved" "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz"
+  "version" "4.0.2"
+
+"yallist@^4.0.0":
+  "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+  "resolved" "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz"
+  "version" "4.0.0"
+
+"zrender@5.5.0":
+  "integrity" "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w=="
+  "resolved" "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz"
+  "version" "5.5.0"
+  dependencies:
+    "tslib" "2.3.0"

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio