snow 11 mesiacov pred
rodič
commit
ac9818c2c4

+ 7 - 8
.env.development

@@ -16,16 +16,18 @@ VITE_APP_ID = "ww6076e6fd4268ee31"
 # 微信开发环境基础重定向url
 REDIRECT_BASE_URL = "http://cxinv.api.caixiao365.com"
 # 开发环境后端用户地址
-VITE_PROXY_USER_REAL1 = "http://user.test241.wanyuhengtong.com"
+VITE_PROXY_USER_REAL1 = "http://user.api.caixiao365.com"
 # 开发环境后端用户地址
-VITE_PROXY_USER_REAL = "http://stockinv.test241.wanyuhengtong.com"
+VITE_PROXY_USER_REAL = "http://cxinv.api.caixiao365.com"
 # 开发环境后端业务地址
-VITE_PROXY_DOMAIN_REAL = "http://stockinv.test241.wanyuhengtong.com"
+VITE_PROXY_DOMAIN_REAL = "http://cxinv.api.caixiao365.com"
 
 VITE_IS_PROD = true
 
-# 跳转结算地址
-VITE_PURCHASE_URL = 'http://webstock3.test241.wanyuhengtong.com/'
+# 跳转采销地址
+VITE_PURCHASE_URL = 'http://pin.caixiao365.com/'
+# 跳转工单地址
+VITE_GD_URL = 'http://bug.caixiao365.com/'
 
 # 报表地址
 VITE_DASHBOARD_URL = 'http://web.report.caixiao365.com/'
@@ -33,6 +35,3 @@ VITE_DASHBOARD_URL = 'http://web.report.caixiao365.com/'
 # token密钥
 VITE_SECRET_KEY = 'key123'
 
-
-# 跳转工单地址
-VITE_GD_URL = 'http//bugweb.test241.wanyuhengtong.com/'

+ 229 - 281
pnpm-lock.yaml

@@ -788,6 +788,15 @@ packages:
       - typescript
     dev: true
 
+  /@esbuild/linux-loong64/0.14.54:
+    resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /@eslint-community/eslint-utils/4.4.0_eslint@8.36.0:
     resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1088,6 +1097,10 @@ packages:
       nanopop: 2.2.0
     dev: false
 
+  /@sxzz/popperjs-es/2.11.7:
+    resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
+    dev: false
+
   /@transloadit/prettier-bytes/0.0.7:
     resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
     dev: false
@@ -2290,7 +2303,7 @@ packages:
       normalize-path: 3.0.0
       readdirp: 3.6.0
     optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/2.3.2
+      fsevents: 2.3.2
     dev: true
 
   /clean-stack/2.2.0:
@@ -2894,7 +2907,7 @@ packages:
       '@ctrl/tinycolor': 3.6.0
       '@element-plus/icons-vue': 2.1.0_vue@3.2.47
       '@floating-ui/dom': 1.2.5
-      '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7
+      '@popperjs/core': /@sxzz/popperjs-es/2.11.7
       '@types/lodash': 4.14.191
       '@types/lodash-es': 4.17.7
       '@vueuse/core': 9.13.0_vue@3.2.47
@@ -2971,33 +2984,213 @@ packages:
       ext: 1.7.0
     dev: false
 
+  /esbuild-android-64/0.14.54:
+    resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-android-arm64/0.14.54:
+    resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-darwin-64/0.14.54:
+    resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-darwin-arm64/0.14.54:
+    resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-freebsd-64/0.14.54:
+    resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-freebsd-arm64/0.14.54:
+    resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-32/0.14.54:
+    resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-64/0.14.54:
+    resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-arm/0.14.54:
+    resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-arm64/0.14.54:
+    resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-mips64le/0.14.54:
+    resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-ppc64le/0.14.54:
+    resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-riscv64/0.14.54:
+    resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-linux-s390x/0.14.54:
+    resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-netbsd-64/0.14.54:
+    resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-openbsd-64/0.14.54:
+    resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-sunos-64/0.14.54:
+    resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-windows-32/0.14.54:
+    resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-windows-64/0.14.54:
+    resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /esbuild-windows-arm64/0.14.54:
+    resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /esbuild/0.14.54:
     resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
     engines: {node: '>=12'}
     hasBin: true
     requiresBuild: true
     optionalDependencies:
-      '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.14.54
-      esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.14.54
-      esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.14.54
-      esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.14.54
-      esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.14.54
-      esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.14.54
-      esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.14.54
-      esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.14.54
-      esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.14.54
-      esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.14.54
-      esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.14.54
-      esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.14.54
-      esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.14.54
-      esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.14.54
-      esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.14.54
-      esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.14.54
-      esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.14.54
-      esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.14.54
-      esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.14.54
-      esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.14.54
-      esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.14.54
+      '@esbuild/linux-loong64': 0.14.54
+      esbuild-android-64: 0.14.54
+      esbuild-android-arm64: 0.14.54
+      esbuild-darwin-64: 0.14.54
+      esbuild-darwin-arm64: 0.14.54
+      esbuild-freebsd-64: 0.14.54
+      esbuild-freebsd-arm64: 0.14.54
+      esbuild-linux-32: 0.14.54
+      esbuild-linux-64: 0.14.54
+      esbuild-linux-arm: 0.14.54
+      esbuild-linux-arm64: 0.14.54
+      esbuild-linux-mips64le: 0.14.54
+      esbuild-linux-ppc64le: 0.14.54
+      esbuild-linux-riscv64: 0.14.54
+      esbuild-linux-s390x: 0.14.54
+      esbuild-netbsd-64: 0.14.54
+      esbuild-openbsd-64: 0.14.54
+      esbuild-sunos-64: 0.14.54
+      esbuild-windows-32: 0.14.54
+      esbuild-windows-64: 0.14.54
+      esbuild-windows-arm64: 0.14.54
     dev: true
 
   /escalade/3.1.1:
@@ -3399,6 +3592,14 @@ packages:
     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
     dev: true
 
+  /fsevents/2.3.2:
+    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
   /function-bind/1.1.1:
     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
 
@@ -3869,7 +4070,7 @@ packages:
   /jsonfile/4.0.0:
     resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
     optionalDependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.11
+      graceful-fs: 4.2.11
     dev: false
 
   /jsonfile/6.1.0:
@@ -3877,7 +4078,7 @@ packages:
     dependencies:
       universalify: 2.0.0
     optionalDependencies:
-      graceful-fs: registry.npmmirror.com/graceful-fs/4.2.11
+      graceful-fs: 4.2.11
     dev: true
 
   /jsonparse/1.3.1:
@@ -5132,7 +5333,7 @@ packages:
     engines: {node: '>=10.0.0'}
     hasBin: true
     optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/2.3.2
+      fsevents: 2.3.2
     dev: true
 
   /rollup/2.79.1:
@@ -5140,7 +5341,7 @@ packages:
     engines: {node: '>=10.0.0'}
     hasBin: true
     optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/2.3.2
+      fsevents: 2.3.2
     dev: true
 
   /run-parallel/1.2.0:
@@ -5962,7 +6163,7 @@ packages:
       rollup: 2.77.3
       sass: 1.60.0
     optionalDependencies:
-      fsevents: registry.npmmirror.com/fsevents/2.3.2
+      fsevents: 2.3.2
     dev: true
 
   /vue-demi/0.13.11_vue@3.2.47:
@@ -6326,23 +6527,6 @@ packages:
       tslib: 2.3.0
     dev: false
 
-  registry.npmmirror.com/@esbuild/linux-loong64/0.14.54:
-    resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz}
-    name: '@esbuild/linux-loong64'
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/@sxzz/popperjs-es/2.11.7:
-    resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz}
-    name: '@sxzz/popperjs-es'
-    version: 2.11.7
-    dev: false
-
   registry.npmmirror.com/core-util-is/1.0.3:
     resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz}
     name: core-util-is
@@ -6357,242 +6541,6 @@ packages:
       once: registry.npmmirror.com/once/1.4.0
     dev: true
 
-  registry.npmmirror.com/esbuild-android-64/0.14.54:
-    resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz}
-    name: esbuild-android-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-android-arm64/0.14.54:
-    resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz}
-    name: esbuild-android-arm64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-darwin-64/0.14.54:
-    resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz}
-    name: esbuild-darwin-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-darwin-arm64/0.14.54:
-    resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz}
-    name: esbuild-darwin-arm64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-freebsd-64/0.14.54:
-    resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz}
-    name: esbuild-freebsd-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-freebsd-arm64/0.14.54:
-    resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz}
-    name: esbuild-freebsd-arm64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-32/0.14.54:
-    resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz}
-    name: esbuild-linux-32
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-64/0.14.54:
-    resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz}
-    name: esbuild-linux-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-arm/0.14.54:
-    resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz}
-    name: esbuild-linux-arm
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-arm64/0.14.54:
-    resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz}
-    name: esbuild-linux-arm64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-mips64le/0.14.54:
-    resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz}
-    name: esbuild-linux-mips64le
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-ppc64le/0.14.54:
-    resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz}
-    name: esbuild-linux-ppc64le
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-riscv64/0.14.54:
-    resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz}
-    name: esbuild-linux-riscv64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-linux-s390x/0.14.54:
-    resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz}
-    name: esbuild-linux-s390x
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-netbsd-64/0.14.54:
-    resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz}
-    name: esbuild-netbsd-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-openbsd-64/0.14.54:
-    resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz}
-    name: esbuild-openbsd-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-sunos-64/0.14.54:
-    resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz}
-    name: esbuild-sunos-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-windows-32/0.14.54:
-    resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz}
-    name: esbuild-windows-32
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-windows-64/0.14.54:
-    resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz}
-    name: esbuild-windows-64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/esbuild-windows-arm64/0.14.54:
-    resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz}
-    name: esbuild-windows-arm64
-    version: 0.14.54
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/fsevents/2.3.2:
-    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
-    name: fsevents
-    version: 2.3.2
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  registry.npmmirror.com/graceful-fs/4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
-    name: graceful-fs
-    version: 4.2.11
-    optional: true
-
   registry.npmmirror.com/immediate/3.0.6:
     resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz}
     name: immediate

+ 2 - 0
src/components/ReIcon/src/iconifyIconOffline.ts

@@ -47,8 +47,10 @@ import downloadLine from "@iconify-icons/ep/download";
 import QuestionFilled from "@iconify-icons/ep/question-filled";
 import Sort from "@iconify-icons/ep/sort";
 import Management from "@iconify-icons/ep/management";
+import EpPlus from "@iconify-icons/ep/plus"
 
 addIcon("sort", Sort);
+addIcon("plus", EpPlus);
 addIcon("Management", Management);
 addIcon("download-line", downloadLine);
 addIcon("question-filled", QuestionFilled);

+ 2 - 2
src/layout/components/menu/index.vue

@@ -13,8 +13,8 @@ const route = useRoute()
 
 watch(() => route,() => {
   const [_, parent] = (route.path).split('/')
-  parentKey.value = `/${parent}`
-  childKey.value = route.path
+  parentKey.value = parent !== 'welcome' ? `/${parent}` : '/'
+  childKey.value =  route.path
 },{
   deep: true,
   immediate: true

+ 1 - 0
src/layout/components/menu/sidebar.vue

@@ -16,6 +16,7 @@ function handleClick(key: string) {
 
 onMounted(() => {
   const _parents = permissionStore.wholeMenus.map(({ path, meta }) => ({ key: path, label: meta.title, icon: meta.icon }))
+  console.log(_parents)
   parents.value = _parents
 })
 </script>

+ 2 - 0
src/main.ts

@@ -9,6 +9,7 @@ import { useEcharts } from "/@/plugins/echarts";
 import VirtualScroller from "vue-virtual-scroller";
 import { useTable } from "../src/plugins/vxe-table";
 import { injectResponsiveStorage } from "/@/utils/responsive";
+import { setupPanelComponent } from "/@/views/welcome/panel";
 
 import Table from "@pureadmin/table";
 import PureDescriptions from "@pureadmin/descriptions";
@@ -56,6 +57,7 @@ app.component("NoAuth", NoAuth);
 app.component("PagePower", PagePower);
 
 setupPageComponent(app);
+setupPanelComponent(app)
 
 window.addEventListener("beforeunload", () => removeRelaComNo());
 

+ 6 - 0
src/style/index.scss

@@ -142,6 +142,12 @@ html {
   border-radius: 4px;
 }
 
+.custom-shadow {
+  box-shadow: rgba(33, 76, 217, 0.2) 0px 2px 8px 0px;
+  border-radius: 4px;
+  // border:1px solid #ccc;
+}
+
 
 .bg-white {
   background:#FFF !important;

+ 0 - 37
src/views/welcome/components/message-center.vue

@@ -1,37 +0,0 @@
-<script setup lang="ts">
-
-const items = new Array(4).fill([
-  {
-    text:'审批中心',
-    total: 3,
-    bgColor: '#0296ff',
-    tagColor: '#35b1ff'
-  }
-])
-
-</script>
-
-
-<template>
-  <div class="w-full h-full rounded-lg bg-[#fcf6f5] p-[10px] flex flex-col">
-    <div class="flex justify-between">
-      <p style="font-size:14px">消息中心</p>
-    </div>
-
-    <div class="flex">
-      <div class="flex items-center">
-        <div class="h-[65px] w-[65px] bg-blue rounded-100 border-2 border-[#fff]"></div>
-        <div class="ml-[10px]">
-          <p class="font-bold">你好 ! xxx</p>
-          <p class="w-[120px]" style="word-break: break-all">*************************!</p>
-        </div>
-      </div>
-      
-      <div class="flex flex-1 bg-red">
-        <div v-for="(item,index) in items" :key="index">
-        
-        </div>
-      </div>
-    </div>
-  </div>
-</template>

+ 39 - 12
src/views/welcome/index.vue

@@ -1,24 +1,50 @@
 <script setup lang="ts">
-import MessageCenter from "./components/message-center.vue"
+import { ref } from "vue"
+import Header from "./layouts/header.vue"
+import Footer from "./layouts/footer.vue"
 
+import Draggable from "vuedraggable"
+
+import { data } from "./panel"
+
+const editable = ref(true)
+
+function handleDrop(evt) {
+  console.log(evt)
+}
 </script>
 
 <template>
   <div class="welcome">
-    <div class="w-[1100px] h-full mr-[10px]">
-      <!-- 消息中心 -->
-      <div class="w-full h-[180px] mb-2">
-        <MessageCenter />
+    <div :class="`border-1 box-border p-[5px] ${editable ? 'border-[#9fd2ff]' : 'border-transparent'}`">
+      <!-- <Header v-model="editable" /> -->
+
+      <div class="flex w-full">
+        <!-- left-start -->
+        <div class="w-[1100px] h-full mr-[10px]">
+          <Draggable :list="data.left" group="left" @change="handleDrop">
+            <template #item="{ element }">
+              <div class="w-full h-[180px] mb-2">
+                <component :editable="editable" :is="element.key" />
+              </div>
+            </template>
+          </Draggable>
+        </div>
+        <!-- left-end -->
+
+        <!-- right-start -->
+        <div class="flex-1 h-full">
+          <template v-for="item in data.right" :key="item.key">
+            <div class="w-full h-[180px] mb-2">
+              <component :editable="editable" :is="item.key" />
+            </div>
+          </template>
+        </div>
+        <!-- right-end -->
       </div>
-      
-      <div class="w-full h-[180px] border-1 mb-2"></div>
-      <div class="w-full h-[180px] border-1 mb-2"></div>
     </div>
 
-    <div class="flex-1 h-full">
-      <div class="w-full h-[180px] border-1 mb-2"></div>
-      <div class="w-full h-[340px] border-1 mb-2"></div>
-    </div>
+    <Footer v-model="editable" />
   </div>
 </template>
 
@@ -35,5 +61,6 @@ import MessageCenter from "./components/message-center.vue"
   height: calc(100vh - 48px);
   display: flex;
   padding: 0 0 0 0;
+  flex-direction: column;
 }
 </style>

+ 26 - 0
src/views/welcome/layouts/footer.vue

@@ -0,0 +1,26 @@
+<script setup lang="ts">
+defineProps<{ modelValue: boolean }>()
+const emit = defineEmits(['update:modelValue']);
+</script>
+
+<template>
+  <div
+    class="fixed bottom-0 w-full left-0 w-full h-[48px] bg-white custom-shadow rounded-lg flex items-center justify-end py-[5px] px-[15px]"
+    v-if="modelValue">
+
+    <ElButton class="mr-[30px]"  size="small">移动</ElButton>
+
+
+    <el-button-group class="mr-[20px]">
+      <el-button size="small">恢复默认</el-button>
+      <el-button size="small">一键去重</el-button>
+      <el-button size="small">一键清空</el-button>
+      <el-button size="small">清除失效</el-button>
+    </el-button-group>
+
+    <div class="ml-[10px]">
+      <ElButton  type="primary" size="small" @click="emit('update:modelValue', false)">保存</ElButton>
+      <ElButton class="ml-[5px]" size="small" @click="emit('update:modelValue', false)">取消</ElButton>
+    </div>
+  </div>
+</template>

+ 22 - 0
src/views/welcome/layouts/header.vue

@@ -0,0 +1,22 @@
+<script setup lang="ts">
+defineProps<{ modelValue: boolean }>()
+const emit = defineEmits(['update:modelValue']);
+</script>
+
+<template>
+  <div class="w-full h-[40px] mb-[10px] rounded-lg flex">
+    <div :class="`flex-1 h-full mr-[10px] p-[5px] ${modelValue ? '' : 'bg-white custom-shadow'}`">
+      <div class="bg-[#2a82ff] inline-block px-[10px] py-[5px] box-border text-[#FFF] rounded-lg select-none"
+        style="font-size:12px">
+        销售员
+      </div>
+    </div>
+
+    <div
+      v-if="!modelValue"
+      class="flex w-[82px] h-full bg-white  custom-shadow items-center p-[5px] select-none cursor-pointer hover:color-[#2a82ff]" @click="() => emit('update:modelValue',true)">
+      <IconifyIconOffline style="font-size:14px" icon="edits" />
+      <p class="ml-[5px] mt-[1px]" style="font-size:12px">桌面配置</p>
+    </div>
+  </div>
+</template>

+ 28 - 0
src/views/welcome/panel/index.ts

@@ -0,0 +1,28 @@
+import { App } from "vue"
+import ExternalLinks from "./src/external-links.vue"
+import MessageCenter from "./src/message-center.vue"
+import Business from "./src/business.vue"
+import Commonly from "./src/commonly.vue"
+import Notice from "./src/notice.vue"
+
+
+export function setupPanelComponent(app: App) {
+  app.component("ExternalLinks", ExternalLinks);
+  app.component("MessageCenter", MessageCenter);
+  app.component("Business", Business);
+  app.component("Commonly", Commonly);
+  app.component("Notice", Notice);
+}
+
+
+export const data = {
+  'left': [
+    { key: 'MessageCenter'},
+    { key: 'Business'},
+    { key: 'Commonly'},
+  ],
+  'right': [
+    { key: 'Notice'},
+    { key: 'ExternalLinks'},
+  ]
+}

+ 27 - 0
src/views/welcome/panel/src/business.vue

@@ -0,0 +1,27 @@
+<script setup lang="ts">
+import Wrapper from "./wrapper.vue"
+
+defineProps<{ editable: boolean }>()
+
+const items= new Array(18).fill(0).map((_, index) => ({
+    total: 3,
+    key: index,
+    text:`销售单-${index}`,
+    bgColor: '#0296ff',
+    tagColor: '#35b1ff'
+}))
+</script>
+
+<template>
+  <Wrapper class="bg-[#ffffff]" title="日常业务" :editable="editable" addable>
+    <div class="flex select-none mt-[5px] flex-wrap">
+      <div class="h-[60px] w-[70px] mr-[10px] flex flex-col items-center justify-between cursor-pointer mb-[5px]" v-for="item in items" :key="item.key">
+        <div class="w-[40px] h-[40px] bg-[#f1f4ff] flex items-center justify-center mb-[5px]" style="bottom:10px;font-size:24px;border-radius: 5px">
+          <IconifyIconOffline icon="office-building" />
+        </div>
+
+        <p style="font-size:12px">{{item.text}}</p>
+      </div>
+    </div>
+  </Wrapper>
+</template>

+ 28 - 0
src/views/welcome/panel/src/commonly.vue

@@ -0,0 +1,28 @@
+<script setup lang="ts">
+import Wrapper from "./wrapper.vue"
+
+const items= new Array(3).fill(0).map((_, index) => ({
+    key: index,
+    text:`常用查询-${index}`,
+    total: 3,
+    bgColor: '#0296ff',
+    tagColor: '#35b1ff'
+}))
+
+const generateStyles = (background: string) => ({ background })
+</script>
+
+
+<template>
+  <Wrapper class="bg-[#FFFFFF]" title="常用查询">
+    <div class="flex select-none mt-[5px] flex-wrap">
+      <div class="h-[60px] w-[60px] mr-[10px] flex flex-col items-center justify-between cursor-pointer mb-[5px]" v-for="item in items" :key="item.key">
+        <div class="w-[40px] h-[40px] bg-[#f1f4ff] flex items-center justify-center mb-[5px]" style="bottom:10px;font-size:24px;border-radius: 5px">
+          <IconifyIconOffline icon="office-building" />
+        </div>
+
+        <p style="font-size:12px">{{item.text}}</p>
+      </div>
+    </div>
+  </Wrapper>
+</template>

+ 21 - 0
src/views/welcome/panel/src/external-links.vue

@@ -0,0 +1,21 @@
+<script setup lang="ts">
+const items= new Array(5).fill(0).map((_, index) => ({
+    key: index,
+    text:`外部网站-${index}`,
+}))
+</script>
+
+
+<template>
+  <div class="flex flex-wrap">
+    <div
+      v-for="(item,index) in items"
+      :class="`w-[48.5%] h-[120px] bg-white custom-shadow p-[20px] select-none cursor-pointer relative mb-[${String((index + 1) / 2).indexOf('.') !== -1 ? '0' : '10px'}] ml-[${String((index + 1) / 2).indexOf('.') !== -1  ? '0' : '10px'}]`">
+      <p class="" style="font-size:14px">{{item.text}}</p>
+
+      <div class="absolute top-[50%] right-0 translate-[-50%]">
+        <IconifyIconOffline style="font-size:38px" icon="link" />
+      </div>
+    </div>
+  </div>
+</template>

+ 43 - 0
src/views/welcome/panel/src/message-center.vue

@@ -0,0 +1,43 @@
+<script setup lang="ts">
+import Wrapper from "./wrapper.vue"
+
+defineProps<{ editable: boolean }>()
+
+const items = new Array(5).fill(0).map((_, index) => ({
+  text: '审批中心',
+  total: index,
+  bgColor: '#0296ff',
+  tagColor: '#35b1ff'
+}))
+
+const generateStyles = (background: string) => ({ background })
+</script>
+
+
+<template>
+  <Wrapper title="消息中心" refresh :editable="editable">
+    <div class="flex select-none">
+      <div class="flex items-center ml-[5px]">
+        <div class="h-[65px] w-[65px] bg-blue rounded-100 border-2 border-[#fff]"></div>
+        <div class="ml-[10px]">
+          <p class="font-bold" style="fontSize:14px">你好 ! xxx</p>
+          <p class="w-[120px] text-[#b2b4c1]" style="word-break: break-all">*************************!</p>
+        </div>
+      </div>
+
+      <div class="flex flex-1 select-none">
+        <div class="w-[25%] h-[100px] ml-[10px] rounded-xl relative" :style="generateStyles(item.bgColor)"
+          v-for="(item, index) in items" :key="index">
+          <div class="absolute top-[10px] right-[10px] text-white" style="font-size:22px">
+            <IconifyIconOffline icon="checkbox-circle-line" />
+          </div>
+
+          <div class="flex flex-col w-[85px] text-white ml-[10px] mt-[20px]" style="font-size:12px">
+            <h3 style="fontSize:24px">{{ item.total }}</h3>
+            <p class="rounded-100 px-[5px] text-center" :style="generateStyles(item.tagColor)">{{ item.text }}</p>
+          </div>
+        </div>
+      </div>
+    </div>
+  </Wrapper>
+</template>

+ 23 - 0
src/views/welcome/panel/src/notice.vue

@@ -0,0 +1,23 @@
+<script setup lang="ts">
+import Wrapper from "./wrapper.vue"
+
+const items= new Array(31).fill(0).map((_, index) => ({
+    key: index,
+    text:`xxxxxxxxxx-${index}`,
+    time: `2024-01-${String(index).length === 1 ? `0${index}` : index}`
+}))
+
+const generateStyles = (background: string) => ({ background })
+</script>
+
+
+<template>
+  <Wrapper class="bg-[#ffffff]" title="系统通知" refresh>
+    <div class="flex select-none flex-wrap px-[5px]">
+      <div class="flex w-full justify-between" v-for="item in items" :key="item.key" style="font-size:12px">
+        <p>{{item.text}}</p>
+        <p>{{item.time}}</p>
+      </div>
+    </div>
+  </Wrapper>
+</template>

+ 42 - 0
src/views/welcome/panel/src/wrapper.vue

@@ -0,0 +1,42 @@
+<script setup lang="ts">
+defineProps<{
+  title: string
+  addable?: boolean
+  refresh?:boolean
+  background?:string
+  editable?:boolean
+}>()
+
+const emit = defineEmits(['refresh'])
+</script>
+
+
+<template>
+  <div :class="`w-full h-full rounded-lg bg-[${background ? background : '#FFFFFF'}] p-[10px] flex flex-col custom-shadow relative`">
+    <div class="flex justify-between select-none">
+      <p style="font-size:14px">{{title}}</p>
+    </div>
+
+    <el-scrollbar max-height="100%">
+      <slot></slot>
+    </el-scrollbar>
+
+    <div v-if="editable" :class="`absolute right-0 top-0  bg-[#e2e8f3] h-[25px] rounded-bl-[100px] flex items-center`">
+      <div v-if="addable" :class="`cursor-pointer hover:color-[#0296ff]`" :style="`padding-left:${addable ? '15px' : '5px'}`">
+        <IconifyIconOffline icon="plus" />
+      </div>
+      
+      <div :style="`padding-left:${addable ? '5px' : '15px'}`">
+        <ElCheckbox />
+      </div>
+
+      <div class="pl-[5px] pr-[5px] cursor-pointer hover:color-[#0296ff]">
+        <IconifyIconOffline icon="close" />
+      </div>
+    </div>
+
+    <div v-if="refresh" class="absolute cursor-pointer" style="bottom:10px;font-size:18px" @click="emit('refresh')">
+      <IconifyIconOffline icon="refresh" />
+    </div>
+  </div>
+</template>