diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/.eslintrc b/.eslintrc index 72e93a1..a6a6e44 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,13 @@ "no-tabs":"off", "no-const-assign": "off", "no-console": "off", + "eqeqeq": "off", + "vars-on-top":"off", + "no-var":"off", + "array-callback-return":"off", + "@typescript-eslint/no-this-alias": "off", + "no-unused-expressions":"off", + "vue/no-mutating-props": "off", "vue/component-name-in-template-casing": ["error", "kebab-case", { "registeredComponentsOnly": false, "ignores": [] diff --git a/.gitignore b/.gitignore index 8265508..84ea431 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ !src/assets/sprites/.gitkeep public/icons .idea +.history diff --git a/package.json b/package.json index d85ed1b..78fde3f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "axios": "^1.1.3", "dayjs": "^1.11.6", "element-plus": "^2.2.20", + "file-saver": "^2.0.5", "hotkeys-js": "^3.10.0", "jsencrypt": "^3.3.1", "lodash-es": "^4.17.21", @@ -36,7 +37,9 @@ "qs": "^6.11.0", "tinymce": "^6.2.0", "vue": "^3.2.44", - "vue-router": "^4.1.6" + "vue-router": "^4.1.6", + "vue3-print-nb": "^0.1.4", + "xlsx": "^0.18.5" }, "devDependencies": { "@antfu/eslint-config": "^0.29.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 215c772..3149996 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,7 @@ element-plus: ^2.2.20 eslint: ^8.27.0 esno: ^0.16.3 + file-saver: ^2.0.5 fs-extra: ^10.1.0 hotkeys-js: ^3.10.0 http-server: ^14.1.1 @@ -61,6 +62,8 @@ vue: ^3.2.44 vue-router: ^4.1.6 vue-tsc: ^1.0.9 + vue3-print-nb: ^0.1.4 + xlsx: ^0.18.5 dependencies: '@tinymce/tinymce-vue': 5.0.0_vue@3.2.44 @@ -69,6 +72,7 @@ axios: 1.1.3 dayjs: 1.11.6 element-plus: 2.2.20_vue@3.2.44 + file-saver: 2.0.5 hotkeys-js: 3.10.0 jsencrypt: registry.npmmirror.com/jsencrypt/3.3.1 lodash-es: 4.17.21 @@ -82,6 +86,8 @@ tinymce: 6.2.0 vue: 3.2.44 vue-router: 4.1.6_vue@3.2.44 + vue3-print-nb: 0.1.4 + xlsx: 0.18.5 devDependencies: '@antfu/eslint-config': 0.29.4_rmayb2veg2btbq6mbmnyivgasy @@ -600,6 +606,24 @@ get-tsconfig: 4.2.0 dev: true + /@esbuild/android-arm/0.15.12: + resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.12: + resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc/1.3.3: resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -789,6 +813,10 @@ picomatch: 2.3.1 dev: true + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + /@tinymce/tinymce-vue/5.0.0_vue@3.2.44: resolution: {integrity: sha512-1HRCNa2eGdztOKShYAiHIry50LTU6YJG//qSP9AJElrXhb3BIBN0Bef6E56nZObVgwCgSmI4cnX35VU9D49aow==} peerDependencies: @@ -1372,6 +1400,11 @@ hasBin: true dev: true + /adler-32/1.3.1: + resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} + engines: {node: '>=0.8'} + dev: false + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1842,6 +1875,14 @@ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true + /cfb/1.2.2: + resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} + engines: {node: '>=0.8'} + dependencies: + adler-32: 1.3.1 + crc-32: 1.2.2 + dev: false + /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1920,7 +1961,7 @@ normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /ci-info/3.5.0: @@ -2010,6 +2051,11 @@ engines: {node: '>=0.8'} dev: true + /codepage/1.15.0: + resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} + engines: {node: '>=0.8'} + dev: false + /collection-visit/1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -2165,6 +2211,12 @@ yaml: 1.10.2 dev: true + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + /cross-spawn/6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} engines: {node: '>=4.8'} @@ -2570,7 +2622,7 @@ '@ctrl/tinycolor': 3.4.1 '@element-plus/icons-vue': 2.0.10_vue@3.2.44 '@floating-ui/dom': 1.0.3 - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 '@types/lodash': 4.14.186 '@types/lodash-es': 4.17.6 '@vueuse/core': 9.5.0_vue@3.2.44 @@ -2682,6 +2734,186 @@ is-symbol: 1.0.4 dev: true + /esbuild-android-64/0.15.12: + resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.12: + resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.12: + resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.12: + resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.12: + resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.12: + resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.12: + resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.12: + resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.12: + resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.12: + resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.12: + resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.12: + resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.12: + resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.12: + resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.12: + resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.12: + resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.12: + resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.12: + resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.12: + resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.12: + resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /esbuild/0.11.3: resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==} hasBin: true @@ -2694,28 +2926,28 @@ hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.12 - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.12 - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.12 - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.12 - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.12 - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.12 - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.12 - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12 - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.12 - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.12 - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.12 - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.12 - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.12 - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12 - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.12 - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.12 - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.12 - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.12 - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.12 - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.12 - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.12 - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.12 + '@esbuild/android-arm': 0.15.12 + '@esbuild/linux-loong64': 0.15.12 + esbuild-android-64: 0.15.12 + esbuild-android-arm64: 0.15.12 + esbuild-darwin-64: 0.15.12 + esbuild-darwin-arm64: 0.15.12 + esbuild-freebsd-64: 0.15.12 + esbuild-freebsd-arm64: 0.15.12 + esbuild-linux-32: 0.15.12 + esbuild-linux-64: 0.15.12 + esbuild-linux-arm: 0.15.12 + esbuild-linux-arm64: 0.15.12 + esbuild-linux-mips64le: 0.15.12 + esbuild-linux-ppc64le: 0.15.12 + esbuild-linux-riscv64: 0.15.12 + esbuild-linux-s390x: 0.15.12 + esbuild-netbsd-64: 0.15.12 + esbuild-openbsd-64: 0.15.12 + esbuild-sunos-64: 0.15.12 + esbuild-windows-32: 0.15.12 + esbuild-windows-64: 0.15.12 + esbuild-windows-arm64: 0.15.12 dev: true /escalade/3.1.1: @@ -3280,6 +3512,10 @@ flat-cache: 3.0.4 dev: true + /file-saver/2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + dev: false + /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -3426,6 +3662,11 @@ mime-types: 2.1.35 dev: false + /frac/1.1.2: + resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} + engines: {node: '>=0.8'} + dev: false + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -3450,6 +3691,14 @@ 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==} @@ -3680,7 +3929,7 @@ source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: registry.npmmirror.com/uglify-js/3.17.4 + uglify-js: 3.17.4 dev: true /har-schema/2.0.0: @@ -4510,7 +4759,7 @@ dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 + graceful-fs: 4.2.10 dev: true /jsprim/1.4.2: @@ -6103,7 +6352,7 @@ engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /run-async/2.4.1: @@ -6444,6 +6693,13 @@ through2: 2.0.5 dev: true + /ssf/0.11.2: + resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} + engines: {node: '>=0.8'} + dependencies: + frac: 1.1.2 + dev: false + /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} @@ -6992,7 +7248,7 @@ '@esbuild-kit/core-utils': 3.0.0 '@esbuild-kit/esm-loader': 2.5.0 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /tunnel-agent/0.6.0: @@ -7055,6 +7311,14 @@ resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} dev: true + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -7484,7 +7748,7 @@ rollup: 2.79.1 sass: 1.56.1 optionalDependencies: - fsevents: registry.npmmirror.com/fsevents/2.3.2 + fsevents: 2.3.2 dev: true /vue-demi/0.13.11_vue@3.2.44: @@ -7554,6 +7818,12 @@ '@vue/server-renderer': 3.2.44_vue@3.2.44 '@vue/shared': 3.2.44 + /vue3-print-nb/0.1.4: + resolution: {integrity: sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==} + dependencies: + vue: 3.2.44 + dev: false + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -7622,11 +7892,21 @@ isexe: 2.0.0 dev: true + /wmf/1.0.2: + resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} + engines: {node: '>=0.8'} + dev: false + /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true + /word/0.3.0: + resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} + engines: {node: '>=0.8'} + dev: false + /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true @@ -7661,6 +7941,20 @@ signal-exit: 3.0.7 dev: true + /xlsx/0.18.5: + resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} + engines: {node: '>=0.8'} + hasBin: true + dependencies: + adler-32: 1.3.1 + cfb: 1.2.2 + codepage: 1.15.0 + crc-32: 1.2.2 + ssf: 0.11.2 + wmf: 1.0.2 + word: 0.3.0 + dev: false + /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -7704,264 +7998,6 @@ engines: {node: '>=10'} dev: true - registry.npmmirror.com/@esbuild/android-arm/0.15.12: - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.12.tgz} - name: '@esbuild/android-arm' - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/@esbuild/linux-loong64/0.15.12: - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz} - name: '@esbuild/linux-loong64' - version: 0.15.12 - 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/esbuild-android-64/0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz} - name: esbuild-android-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-android-arm64/0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz} - name: esbuild-android-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-64/0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz} - name: esbuild-darwin-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-darwin-arm64/0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz} - name: esbuild-darwin-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-64/0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz} - name: esbuild-freebsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz} - name: esbuild-freebsd-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-32/0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz} - name: esbuild-linux-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-64/0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz} - name: esbuild-linux-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm/0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz} - name: esbuild-linux-arm - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-arm64/0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz} - name: esbuild-linux-arm64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-mips64le/0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz} - name: esbuild-linux-mips64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz} - name: esbuild-linux-ppc64le - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-riscv64/0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz} - name: esbuild-linux-riscv64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-linux-s390x/0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz} - name: esbuild-linux-s390x - version: 0.15.12 - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-netbsd-64/0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz} - name: esbuild-netbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-openbsd-64/0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz} - name: esbuild-openbsd-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-sunos-64/0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz} - name: esbuild-sunos-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-32/0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz} - name: esbuild-windows-32 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-64/0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz} - name: esbuild-windows-64 - version: 0.15.12 - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - registry.npmmirror.com/esbuild-windows-arm64/0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz} - name: esbuild-windows-arm64 - version: 0.15.12 - 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.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz} name: graceful-fs @@ -7973,13 +8009,3 @@ name: jsencrypt version: 3.3.1 dev: false - - registry.npmmirror.com/uglify-js/3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} - name: uglify-js - version: 3.17.4 - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..bbe88b1 --- /dev/null +++ b/public/data.json @@ -0,0 +1,139 @@ +{ + "code": "200", + "msg": "success", + "data": { + "tableId": 1, + "workFlowDef": { + "name": "合同审批" + }, + "directorMaxLevel": 4, + "flowPermission": [], + "nodeConfig": { + "nodeName": "发起人", + "type": 0, + "priorityLevel": "", + "settype": "", + "selectMode": "", + "selectRange": "", + "directorLevel": "", + "examineMode": "", + "noHanderAction": "", + "examineEndDirectorLevel": "", + "ccSelfSelectFlag": "", + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "审核人", + "error": false, + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ + "columnId": 0, + "type": 1, + "conditionEn": "", + "conditionCn": "", + "optType": "", + "zdy1": "", + "zdy2": "", + "opt1": "", + "opt2": "", + "columnDbname": "", + "columnType": "", + "showType": "", + "showName": "", + "fixedDownBoxValue": "" + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git "a/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" new file mode 100644 index 0000000..bb7afeb --- /dev/null +++ "b/public/data\345\255\227\346\256\265\346\263\250\351\207\212.js" @@ -0,0 +1,137 @@ +export default { + "code": "200", + "msg": "success", + "data": { + "tableId": 1,//审批id + "workFlowDef": { + "name": "合同审批",//审批名称 + }, + "directorMaxLevel": 4,//审批主管最大层级 + "flowPermission": [],//发起人 + "nodeConfig": { + "nodeName": "发起人",//节点名称 + "type": 0,// 0 发起人 1审批 2抄送 3条件 4路由 + "priorityLevel": "",// 条件优先级 + "settype": "",// 审批人设置 1指定成员 2主管 4发起人自选 5发起人自己 7连续多级主管 + "selectMode": "", //审批人数 1选一个人 2选多个人 + "selectRange": "", //选择范围 1.全公司 2指定成员 2指定角色 + "directorLevel": "", //审批终点 最高层主管数 + "examineMode": "", //多人审批时采用的审批方式 1依次审批 2会签 + "noHanderAction": "",//审批人为空时 1自动审批通过/不允许发起 2转交给审核管理员 + "examineEndDirectorLevel": "", //审批终点 第n层主管 + "ccSelfSelectFlag": "", //允许发起人自选抄送人 + "conditionList": [], //当审批单同时满足以下条件时进入此流程 + "nodeUserList": [], //操作人 + "childNode": { + "nodeName": "审核人", + "error": false, //当前审批是否通过校验 + "type": 1, + "settype": 2, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 0, + "childNode": { + "nodeName": "路由", + "type": 4, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": { + "nodeName": "抄送人", + "type": 2, + "ccSelfSelectFlag": 1, + "childNode": null, + "nodeUserList": [], + "error": false + }, + "conditionNodes": [{ //条件节点 + "nodeName": "条件1", + "type": 3, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [{ //当前条件 + "columnId": 0, //发起人 + "type": 1, //1 发起人 2其他 + "optType": "", //["", "<", ">", "≤", "=", "≥"][optType] + "zdy1": "",//左侧自定义内容 + "zdy2": "",//右侧自定义内容 + "opt1": "",//左侧符号 < ≤ + "opt2": "",//右侧符号 < ≤ + "columnDbname": "",//条件字段名称 + "columnType": "",//条件字段类型 + "showType": "",//3多选 其他 + "showName": "",//展示名 + "fixedDownBoxValue": ""//多选数组 + }], + "nodeUserList": [{ + "targetId": 85, + "type": 1, + "name": "天旭" + }], + "childNode": { + "nodeName": "审核人", + "type": 1, + "priorityLevel": 1, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [{ + "targetId": 2515744, + "type": 1, + "name": "哈哈哈哈" + }], + "childNode": null, + "conditionNodes": [], + "error": false + }, + "conditionNodes": [], + "error": false + }, { + "nodeName": "条件2", + "type": 3, + "priorityLevel": 2, + "settype": 1, + "selectMode": 0, + "selectRange": 0, + "directorLevel": 1, + "examineMode": 1, + "noHanderAction": 2, + "examineEndDirectorLevel": 1, + "ccSelfSelectFlag": 1, + "conditionList": [], + "nodeUserList": [], + "childNode": null, + "conditionNodes": [], + "error": false + }] + }, + "nodeUserList": [] + }, + "conditionNodes": [] + } + } +} \ No newline at end of file diff --git a/src/api/system/area.ts b/src/api/system/area.ts index 8b4e5a8..682162d 100644 --- a/src/api/system/area.ts +++ b/src/api/system/area.ts @@ -2,7 +2,7 @@ * 区域管理接口 */ import request from '../index' -const prefix = 'sys' +const prefix = 'ext' // 区域查询 export function getAreaListPage(params: object) { @@ -45,7 +45,7 @@ // 区域类型查询 export function getAreaType() { return request({ - url: `${prefix}/dict/code/levelType`, + url: 'sys/dict/code/levelType', method: 'get', }) } diff --git a/src/api/system/dept.ts b/src/api/system/dept.ts index 48f386e..06e3178 100644 --- a/src/api/system/dept.ts +++ b/src/api/system/dept.ts @@ -64,3 +64,11 @@ }, }) } + +// 资源类型列表 +export function getDeptTypeList() { + return request({ + url: `${prefix}/dict/code/deptType`, + method: 'get', + }) +} diff --git a/src/api/system/notice.ts b/src/api/system/notice.ts index 7c8c260..9f38397 100644 --- a/src/api/system/notice.ts +++ b/src/api/system/notice.ts @@ -5,7 +5,22 @@ const prefix = 'system' // 获取公告列表/详情 -export function getNoticeeApi(data: object) { +export interface listParamsType { + noticeNo: string // 编号 + noticePublisher: string // 发布人 + noticeTime: string // 发布时间 + noticeTitle: string // 标题 + limit: number + offset: number +} +export function getNoticeeApi(data: listParamsType) { + return request({ + url: `${prefix}/notice/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +export function getNoticeDetail(data: object) { return request({ url: `${prefix}/notice/listPage`, method: 'post', @@ -28,3 +43,4 @@ data, }) } + diff --git a/src/api/system/tool.ts b/src/api/system/tool.ts new file mode 100644 index 0000000..2257d08 --- /dev/null +++ b/src/api/system/tool.ts @@ -0,0 +1,117 @@ +import request from '../index' +import type { queryType } from '@/views/system/tool/tool_interface' +const prefix = 'system/' + +// 签名/签章新增 +export function addApi(data: object) { + return request({ + url: `${prefix}sign/add`, + method: 'post', + data, + }) +} +// 签名/签章批量删除 +export function batchDelete(data: { ids: string[] }) { + return request({ + url: `${prefix}sign/batchDelete`, + method: 'post', + data, + }) +} +// 签名/签章删除 +export function deleteApi(data: { id: string }) { + return request({ + url: `${prefix}sign/delete`, + method: 'post', + data, + }) +} +// 签名/签章列表 +export function listApi(data: object) { + return request({ + url: `${prefix}sign/list`, + method: 'post', + data, + }) +} +// 签名/签章导出 +export function exportApi(data: object) { + return request({ + url: `${prefix}sign/listExport`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情(分页) +export function listPageApi(data: queryType) { + return request({ + url: `${prefix}sign/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 签名/签章列表/详情 +export function listPageDetailApi(data: object) { + return request({ + url: `${prefix}sign/listPage`, + method: 'post', + data, + }) +} +// 签名/签章更新 +export function updateApi(data: object) { + return request({ + url: `${prefix}sign/update`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表(分页) +export interface listParamsType { + templateNo: string // 编号 + templateName: string // 名称 + templateCreator: string // 负责人 + createTime: string // 创建时间 + limit: number + offset: number + templateType: string +} +export function templatePage(data: listParamsType) { + return request({ + url: `${prefix}/template/listPage?limit=${data.limit}&offset=${data.offset}`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表/详情( +export function templatePageDetail(data: object) { + return request({ + url: `${prefix}/template/listPage`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表删除 +export function templateDelete(data: object) { + return request({ + url: `${prefix}/template/delete`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表新建 +export function templateAdd(data: object) { + return request({ + url: `${prefix}/template/add`, + method: 'post', + data, + }) +} +// 原始记录模板/证书报告模板列表更新 +export function templateUpdate(data: object) { + return request({ + url: `${prefix}/template/update`, + method: 'post', + data, + }) +} diff --git "a/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" new file mode 100644 index 0000000..e934468 --- /dev/null +++ "b/src/assets/images/workFlowImg/\345\256\241\346\211\271\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" new file mode 100644 index 0000000..23521a1 --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\212\204\351\200\201\344\272\272.png" Binary files differ diff --git "a/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" new file mode 100644 index 0000000..92c6e6d --- /dev/null +++ "b/src/assets/images/workFlowImg/\346\235\241\344\273\266.png" Binary files differ diff --git a/src/components.d.ts b/src/components.d.ts index ed47866..f96b6fe 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -7,31 +7,44 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { + AddNode: typeof import('./components/addNode.vue')['default'] AppContainer: typeof import('./components/AppContainer/index.vue')['default'] + ApproverDrawer: typeof import('./components/drawer/approverDrawer.vue')['default'] Auth: typeof import('./components/Auth/index.vue')['default'] AuthAll: typeof import('./components/AuthAll/index.vue')['default'] BatchActionBar: typeof import('./components/BatchActionBar/index.vue')['default'] + ConditionDrawer: typeof import('./components/drawer/conditionDrawer.vue')['default'] + CopyerDrawer: typeof import('./components/drawer/copyerDrawer.vue')['default'] Copyright: typeof import('./components/Copyright/index.vue')['default'] DeptSelect: typeof import('./components/DeptSelect/index.vue')['default'] Editor: typeof import('./components/Editor/index.vue')['default'] + EmployeesDialog: typeof import('./components/dialog/employeesDialog.vue')['default'] + EmployeesRoleDialog: typeof import('./components/dialog/employeesRoleDialog.vue')['default'] + ErrorDialog: typeof import('./components/dialog/errorDialog.vue')['default'] FileUpload: typeof import('./components/FileUpload/index.vue')['default'] FixedActionBar: typeof import('./components/FixedActionBar/index.vue')['default'] ImagePreview: typeof import('./components/ImagePreview/index.vue')['default'] ImagesUpload: typeof import('./components/ImagesUpload/index.vue')['default'] ImageUpload: typeof import('./components/ImageUpload/index.vue')['default'] + NodeWrap: typeof import('./components/nodeWrap.vue')['default'] NormalTable: typeof import('./components/NormalTable/index.vue')['default'] PageHeader: typeof import('./components/PageHeader/index.vue')['default'] PageMain: typeof import('./components/PageMain/index.vue')['default'] PcasCascader: typeof import('./components/PcasCascader/index.vue')['default'] + PromoterDrawer: typeof import('./components/drawer/promoterDrawer.vue')['default'] + RoleDialog: typeof import('./components/dialog/roleDialog.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SearchArea: typeof import('./components/SearchArea/index.vue')['default'] SearchBar: typeof import('./components/SearchBar/index.vue')['default'] SearchItem: typeof import('./components/SearchArea/SearchItem.vue')['default'] + SelectBox: typeof import('./components/selectBox.vue')['default'] + SelectResult: typeof import('./components/selectResult.vue')['default'] SelectTree: typeof import('./components/SelectTree/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SystemInfo: typeof import('./components/SystemInfo/index.vue')['default'] TableContainer: typeof import('./components/TableContainer/index.vue')['default'] Trend: typeof import('./components/Trend/index.vue')['default'] + WorkFlow: typeof import('./components/workFlow/workFlow.vue')['default'] } } diff --git a/src/components/DeptSelect/index.vue b/src/components/DeptSelect/index.vue index 419d14d..2344541 100644 --- a/src/components/DeptSelect/index.vue +++ b/src/components/DeptSelect/index.vue @@ -176,7 +176,7 @@ class="full-width-input" /> - + diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@ diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@ diff --git a/src/components/SearchArea/index.vue b/src/components/SearchArea/index.vue index d0a46f3..8326149 100644 --- a/src/components/SearchArea/index.vue +++ b/src/components/SearchArea/index.vue @@ -117,6 +117,6 @@ diff --git a/src/components/TableContainer/index.vue b/src/components/TableContainer/index.vue index d87651b..031e444 100644 --- a/src/components/TableContainer/index.vue +++ b/src/components/TableContainer/index.vue @@ -35,6 +35,7 @@ .button-area { display: flex; justify-content: space-between; + margin-bottom: 10px; .button-left { display: flex; diff --git a/src/components/addNode.vue b/src/components/addNode.vue new file mode 100644 index 0000000..71f6df6 --- /dev/null +++ b/src/components/addNode.vue @@ -0,0 +1,240 @@ + + + + + + + diff --git a/src/components/dialog/common.js b/src/components/dialog/common.js new file mode 100644 index 0000000..c7984c5 --- /dev/null +++ b/src/components/dialog/common.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:05:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:34 + * @FilePath: /Workflow-Vue3/src/components/dialog/common.js + */ +import { ref } from 'vue' +import { getDepartments, getEmployees, getRoles } from '@/plugins/api.js' +import $func from '@/plugins/preload.js' +export const searchVal = ref('') +export const departments = ref({ + titleDepartments: [], + childDepartments: [], + employees: [], +}) +export const roles = ref({}) +export const getRoleList = async () => { + const { data: { list } } = await getRoles() + roles.value = list +} +export const getDepartmentList = async (parentId = 0) => { + const { data } = await getDepartments({ parentId }) + departments.value = data +} +export const getDebounceData = (event, type = 1) => { + $func.debounce(async () => { + if (event.target.value) { + const data = { + searchName: event.target.value, + pageNum: 1, + pageSize: 30, + } + if (type == 1) { + departments.value.childDepartments = [] + const res = await getEmployees(data) + departments.value.employees = res.data.list + } + else { + const res = await getRoles(data) + roles.value = res.data.list + } + } + else { + type == 1 ? await getDepartmentList() : await getRoleList() + } + })() +} diff --git a/src/components/dialog/employeesDialog.vue b/src/components/dialog/employeesDialog.vue new file mode 100644 index 0000000..61ac040 --- /dev/null +++ b/src/components/dialog/employeesDialog.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/dialog/employeesRoleDialog.vue b/src/components/dialog/employeesRoleDialog.vue new file mode 100644 index 0000000..9679941 --- /dev/null +++ b/src/components/dialog/employeesRoleDialog.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/dialog/errorDialog.vue b/src/components/dialog/errorDialog.vue new file mode 100644 index 0000000..f79428d --- /dev/null +++ b/src/components/dialog/errorDialog.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/dialog/roleDialog.vue b/src/components/dialog/roleDialog.vue new file mode 100644 index 0000000..025a105 --- /dev/null +++ b/src/components/dialog/roleDialog.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/drawer/approverDrawer.vue b/src/components/drawer/approverDrawer.vue new file mode 100644 index 0000000..6b2694d --- /dev/null +++ b/src/components/drawer/approverDrawer.vue @@ -0,0 +1,301 @@ + + + + + + diff --git a/src/components/drawer/conditionDrawer.vue b/src/components/drawer/conditionDrawer.vue new file mode 100644 index 0000000..bc3d84e --- /dev/null +++ b/src/components/drawer/conditionDrawer.vue @@ -0,0 +1,416 @@ + + + + + + diff --git a/src/components/drawer/copyerDrawer.vue b/src/components/drawer/copyerDrawer.vue new file mode 100644 index 0000000..a3fc819 --- /dev/null +++ b/src/components/drawer/copyerDrawer.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/components/drawer/promoterDrawer.vue b/src/components/drawer/promoterDrawer.vue new file mode 100644 index 0000000..7108976 --- /dev/null +++ b/src/components/drawer/promoterDrawer.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/components/nodeWrap.vue b/src/components/nodeWrap.vue new file mode 100644 index 0000000..0cd3792 --- /dev/null +++ b/src/components/nodeWrap.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/src/components/selectBox.vue b/src/components/selectBox.vue new file mode 100644 index 0000000..e4f2c55 --- /dev/null +++ b/src/components/selectBox.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/selectResult.vue b/src/components/selectResult.vue new file mode 100644 index 0000000..21c2de5 --- /dev/null +++ b/src/components/selectResult.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/components/workFlow/addNode.vue b/src/components/workFlow/addNode.vue new file mode 100644 index 0000000..2c0ea84 --- /dev/null +++ b/src/components/workFlow/addNode.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/components/workFlow/nodeWrap.vue b/src/components/workFlow/nodeWrap.vue new file mode 100644 index 0000000..a5b1ff7 --- /dev/null +++ b/src/components/workFlow/nodeWrap.vue @@ -0,0 +1,1093 @@ + + + + + diff --git a/src/components/workFlow/workFlow.vue b/src/components/workFlow/workFlow.vue new file mode 100644 index 0000000..439b560 --- /dev/null +++ b/src/components/workFlow/workFlow.vue @@ -0,0 +1,764 @@ + + + + + diff --git a/src/css/dialog.css b/src/css/dialog.css new file mode 100644 index 0000000..eb462a0 --- /dev/null +++ b/src/css/dialog.css @@ -0,0 +1,38 @@ +.person_body { + border: 1px solid #f5f5f5; + height: 500px; +} + +.tree_nav span { + display: inline-block; + padding-right: 10px; + margin-right: 5px; + max-width: 6em; + color: #38adff; + font-size: 12px; + cursor: pointer; + background: url("@/assets/images/jiaojiao.png") no-repeat right center; +} + +.tree_nav span:last-of-type { + background: none; +} + +.person_tree { + padding: 10px 12px 0 8px; + width: 280px; + height: 100%; + border-right: 1px solid #f5f5f5; +} + +.person_tree input { + padding-left: 22px; + width: 210px; + height: 30px; + font-size: 12px; + border-radius: 2px; + border: 1px solid #d5dadf; + background: url("@/assets/images/list_search.png") no-repeat 10px center; + background-size: 14px 14px; + margin-bottom: 14px; +} diff --git a/src/css/override-element-ui.css b/src/css/override-element-ui.css new file mode 100644 index 0000000..d772692 --- /dev/null +++ b/src/css/override-element-ui.css @@ -0,0 +1,125 @@ +.el-drawer__header button.el-drawer__close-btn { + display: none !important; +} + +.el-drawer__header { + margin-bottom: 0 !important; + padding: 14px 0 14px 20px !important; + + /* border-bottom: 1px solid #f2f2f2 !important; */ + color: #323232 !important; + font-size: 16px !important; +} + +.el-drawer__header .el-drawer__title { + font-size: 16px !important; +} + +.demo-drawer__content { + display: flex !important; + flex-direction: column !important; + height: 100% !important; +} + +.drawer_content { + flex: 1 !important; +} + +.demo-drawer__content > div { + border-top: 1px solid #f2f2f2 !important; +} + +.el-button { + min-width: 79px !important; + padding: 8px 12px !important; + font-size: 12px !important; + border-radius: 2px !important; + color: #323232 !important; + background: #f2f2f2 !important; + height: 30px !important; +} + +.el-button.el-button--primary { + background: #46a6fe !important; + color: #fff !important; +} + +.demo-drawer__footer { + padding: 10px 30px !important; + border-top: 1px solid #f2f2f2 !important; +} + +.demo-drawer__footer .el-button { + float: right !important; + margin-right: 10px !important; +} + +.el-dialog { + width: 520px; + border: 1px solid #dde1e5 !important; + border-radius: 3px !important; +} + +.el-dialog__header { + padding: 0 0 0 20px !important; + line-height: 50px !important; + height: 50px !important; + background: #fff !important; + border-bottom: 1px solid #f2f2f2 !important; +} + +.el-dialog__header .el-dialog__title { + font-size: 16px !important; + line-height: 50px !important; + color: #333 !important; +} + +.el-dialog__header .el-dialog__headerbtn { + height: 12px !important; + width: 12px !important; +} + +.el-dialog__header .el-icon-close { + width: 12px !important; + height: 12px !important; + float: left !important; +} + +.el-dialog__header .el-icon-close::before { + display: block !important; + width: 12px !important; + height: 12px !important; + background: url("@/assets/images/add-close.png") no-repeat center !important; + background-size: 100% 100% !important; + content: "" !important; +} + +.el-drawer__body { + padding: 0 !important; +} + +.el-dialog__footer { + border-top: 1px solid #f2f2f2 !important; + padding-bottom: 10px !important; +} + +.el-checkbox, +.el-checkbox__input.is-checked + .el-checkbox__label, +.el-radio, +.el-radio__input.is-checked + .el-radio__label, +.el-dialog__body, +.el-tree { + color: #333 !important; +} + +.el-radio__label, +.el-checkbox__label { + font-size: 12px !important; +} + +.my-el-custom-spinner { + display: inline-block !important; + width: 80px !important; + height: 80px !important; + background: url("@/assets/images/loading.gif") no-repeat center !important; +} diff --git a/src/css/workflow.css b/src/css/workflow.css new file mode 100644 index 0000000..26ba1e6 --- /dev/null +++ b/src/css/workflow.css @@ -0,0 +1,1706 @@ +body { + background: #eee; + margin: 0; + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-variant: tabular-nums; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; +} + +@font-face { + font-family: "Chinese Quote"; + src: local("PingFang SC"), local("SimSun"); + unicode-range: u+2018, u+2019, u+201c, u+201d; +} + +body, +html { + width: 100%; + + /* height: 100% */ +} + +input::-ms-clear, +input::-ms-reveal { + display: none; +} + +*, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} + +@viewport { + width: device-width; +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5em; + color: rgb(0 0 0 / 85%); + font-weight: 500; +} + +p { + margin-top: 0; + margin-bottom: 1em; +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1em; + font-style: normal; + line-height: inherit; +} + +input[type="number"], +input[type="password"], +input[type="text"], +textarea { + appearance: none; +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1em; +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0; +} + +dt { + font-weight: 500; +} + +dd { + margin-bottom: 0.5em; + margin-left: 0; +} + +blockquote { + margin: 0 0 1em; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #1890ff; + background-color: transparent; + text-decoration: none; + outline: none; + cursor: pointer; + transition: color 0.3s; + text-decoration-skip: objects; +} + +a:focus { + text-decoration: underline; + text-decoration-skip: auto; +} + +a:hover { + color: #40a9ff; +} + +a:active { + color: #096dd9; +} + +a:active, +a:hover { + outline: 0; + text-decoration: none; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1em; + overflow: auto; +} + +figure { + margin: 0 0 1em; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +[role="button"], +a, +area, +button, +input:not([type="range"]), +label, +select, +summary, +textarea { + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75em; + padding-bottom: 0.3em; + color: rgb(0 0 0 / 45%); + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[type="reset"], +[type="submit"], +button, +html [type="button"] { + appearance: button; +} + +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="datetime-local"], +input[type="month"], +input[type="time"] { + appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5em; + font-size: 1.5em; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +mark { + padding: 0.2em; + background-color: #feffe6; +} + +::selection { + background: #1890ff; + color: #fff; +} + +.clearfix { + zoom: 1; +} + +.clearfix::after, +.clearfix::before { + content: ""; + display: table; +} + +.clearfix::after { + clear: both; +} + +@font-face { + font-family: anticon; + font-display: fallback; + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.eot"); + src: url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.woff") format("woff"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.ttf") format("truetype"), url("https://at.alicdn.com/t/font_148784_v4ggb6wrjmkotj4i.svg#iconfont") format("svg"); +} + +.anticon { + display: inline-block; + font-style: normal; + vertical-align: baseline; + text-align: center; + text-transform: none; + line-height: 1; + text-rendering: optimizelegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon::before { + display: block; + font-family: anticon !important; +} + +.anticon-close::before { + content: "\E633"; +} + +.anticon-right::before { + content: "\E61F"; +} + +.anticon-exclamation-circle { + color: rgb(242 86 67); +} + +.anticon-exclamation-circle::before { + content: "\E62C"; +} + +.anticon-left::before { + content: "\E620"; +} + +.anticon-close-circle::before { + content: "\E62E"; +} + +.ant-btn { + line-height: 1.5; + display: inline-block; + font-weight: 400; + text-align: center; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 0 15px; + font-size: 14px; + border-radius: 4px; + height: 32px; + user-select: none; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + position: relative; + color: rgb(0 0 0 / 65%); + background-color: #fff; + border-color: #d9d9d9; +} + +.ant-btn > .anticon { + line-height: 1; +} + +.ant-btn, +.ant-btn:active, +.ant-btn:focus { + outline: 0; +} + +.ant-btn > a:only-child { + color: currentcolor; +} + +.ant-btn > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn:focus, +.ant-btn:hover { + color: #40a9ff; + background-color: #fff; + border-color: #40a9ff; +} + +.ant-btn:focus > a:only-child, +.ant-btn:hover > a:only-child { + color: currentcolor; +} + +.ant-btn:focus > a:only-child::after, +.ant-btn:hover > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active { + color: #096dd9; + background-color: #fff; + border-color: #096dd9; +} + +.ant-btn.active > a:only-child, +.ant-btn:active > a:only-child { + color: currentcolor; +} + +.ant-btn.active > a:only-child::after, +.ant-btn:active > a:only-child::after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: transparent; +} + +.ant-btn.active, +.ant-btn:active, +.ant-btn:focus, +.ant-btn:hover { + background: #fff; + text-decoration: none; +} + +.ant-btn > i, +.ant-btn > span { + pointer-events: none; +} + +.ant-btn::before { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + background: #fff; + opacity: 0.35; + content: ""; + border-radius: inherit; + z-index: 1; + transition: opacity 0.2s; + pointer-events: none; + display: none; +} + +.ant-btn .anticon { + transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.ant-btn:active > span, +.ant-btn:focus > span { + position: relative; +} + +.ant-btn > .anticon + span, +.ant-btn > span + .anticon { + margin-left: 8px; +} + +.fd-nav-container { + display: inline-block; + position: relative; +} + +.fd-nav-container .ghost-bar { + position: absolute; + width: 150px; + height: 100%; + left: 0; + background: #1583f2; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-container .ghost-bar::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + margin-left: -5px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 5px 6px; + border-color: transparent transparent #f6f6f6; +} + +.fd-nav-item { + position: relative; + cursor: pointer; + display: inline-block; + line-height: 60px; + width: 150px; + text-align: center; + white-space: nowrap; +} + +.fd-nav-item .order-num { + display: inline-block; + width: 20px; + height: 20px; + line-height: 20px; + border: 1px solid #fff; + border-radius: 50%; + margin-right: 6px; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.fd-nav-item.active .order-num { + color: #1583f2; + background: #fff; +} + +.ant-input { + font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-variant: tabular-nums; + box-sizing: border-box; + margin: 0; + list-style: none; + position: relative; + display: inline-block; + padding: 4px 11px; + width: 100%; + height: 32px; + font-size: 14px; + line-height: 1.5; + color: rgb(0 0 0 / 65%); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + transition: all 0.3s; +} + +.ant-input::placeholder { + color: #bfbfbf; + opacity: 1; +} + +/* .ant-input:input-placeholder { + color: #bfbfbf; +} */ + +/* .ant-input::input-placeholder { + color: #bfbfbf; +} */ + +.ant-input:focus, +.ant-input:hover { + border-color: #40a9ff; + border-right-width: 1px !important; +} + +.ant-input:focus { + outline: 0; + box-shadow: 0 0 0 2px rgb(24 144 255 / 20%); +} + +textarea.ant-input { + max-width: 100%; + height: auto; + vertical-align: bottom; + transition: all 0.3s, height 0s; + min-height: 32px; +} + +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +p, +pre, +q, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + + /* font: inherit; */ + vertical-align: baseline; +} + +/* *, +::after, +::before { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + text-size-adjust: 100%; +} + +body, +html { + font-size: 14px; +} + +body { + font-family: "Microsoft Yahei", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif; + line-height: 1.6; + background-color: #fff; + position: static !important; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); +} */ + +ol, +ul { + list-style-type: none; +} + +/* b, +strong { + font-weight: 700; +} + +img { + border: 0; +} */ + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0; +} + +/* textarea { + overflow: auto; + vertical-align: top; + appearance: none; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} */ + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + appearance: button; + cursor: pointer; +} + +input[type="search"] { + appearance: textfield; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* table { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} */ + +table, +td, +th { + border: 0; +} + +td, +th { + padding: 0; + vertical-align: top; +} + +/* th { + font-weight: 700; + text-align: left; +} */ + +thead th { + white-space: nowrap; +} + +/* a { + text-decoration: none; + cursor: pointer; + color: #3296fa; +} + +a:active, +a:hover { + outline: 0; + color: #3296fa; +} + +small { + font-size: 80%; +} + +body, +html { + font-size: 12px !important; + color: #191f25 !important; + background: #f6f6f6 !important; +} */ + +.wrap { + display: -webkit-box; + display: flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + height: 100%; +} + +@font-face { + font-family: IconFont; + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot"); + src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg"); +} + +.iconfont { + font-family: IconFont !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +.fd-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 997; + width: 100%; + height: 60px; + font-size: 14px; + color: #fff; + background: #3296fa; + display: flex; + align-items: center; +} + +.fd-nav > * { + flex: 1; + width: 100%; +} + +.fd-nav .fd-nav-left { + display: -webkit-box; + display: flex; + align-items: center; +} + +.fd-nav .fd-nav-center { + flex: none; + width: 600px; + text-align: center; +} + +.fd-nav .fd-nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + text-align: right; +} + +.fd-nav .fd-nav-back { + display: inline-block; + width: 60px; + height: 60px; + font-size: 22px; + border-right: 1px solid #1583f2; + text-align: center; + cursor: pointer; +} + +.fd-nav .fd-nav-back:hover { + background: #5af; +} + +.fd-nav .fd-nav-back:active { + background: #1583f2; +} + +.fd-nav .fd-nav-back .anticon { + line-height: 60px; +} + +.fd-nav .fd-nav-title { + width: 0; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 0 15px; +} + +.fd-nav a { + color: #fff; + margin-left: 12px; +} + +.fd-nav .button-publish { + min-width: 80px; + margin-left: 4px; + margin-right: 15px; + color: #3296fa; + border-color: #fff; +} + +.fd-nav .button-publish.ant-btn:focus, +.fd-nav .button-publish.ant-btn:hover { + color: #3296fa; + border-color: #fff; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 30%); +} + +.fd-nav .button-publish.ant-btn:active { + color: #3296fa; + background: #d6eaff; + box-shadow: none; +} + +.fd-nav .button-preview { + min-width: 80px; + margin-left: 16px; + margin-right: 4px; + color: #fff; + border-color: #fff; + background: transparent; +} + +.fd-nav .button-preview.ant-btn:focus, +.fd-nav .button-preview.ant-btn:hover { + color: #fff; + border-color: #fff; + background: #59acfc; +} + +.fd-nav .button-preview.ant-btn:active { + color: #fff; + border-color: #fff; + background: #2186ef; +} + +.fd-nav-content { + /* position: fixed; + top: 60px; + left: 0; + right: 0; + bottom: 0; + z-index: 1; */ + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 30px; +} + +.error-modal-desc { + font-size: 13px; + color: rgb(25 31 37 / 56%); + line-height: 22px; + margin-bottom: 14px; +} + +.error-modal-list { + height: 200px; + overflow-y: auto; + margin-right: -25px; + padding-right: 25px; +} + +.error-modal-item { + padding: 10px 20px; + line-height: 21px; + background: #f6f6f6; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + border-radius: 4px; +} + +.error-modal-item-label { + flex: none; + font-size: 15px; + color: rgb(25 31 37 / 56%); + padding-right: 10px; +} + +.error-modal-item-content { + text-align: right; + flex: 1; + font-size: 13px; + color: #191f25; +} + +#body.blur { + filter: blur(3px); +} + +.zoom { + display: flex; + position: fixed; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + height: 40px; + width: 125px; + right: 40px; + margin-top: 30px; + z-index: 10; +} + +.zoom .zoom-in, +.zoom .zoom-out { + width: 30px; + height: 30px; + background: #fff; + color: #c1c1cd; + cursor: pointer; + background-size: 100%; + background-repeat: no-repeat; +} + +.zoom .zoom-out { + background-image: url("https://gw.alicdn.com/tfs/TB1s0qhBHGYBuNjy0FoXXciBFXa-90-90.png"); +} + +.zoom .zoom-out.disabled { + opacity: 0.5; +} + +.zoom .zoom-in { + background-image: url("https://gw.alicdn.com/tfs/TB1UIgJBTtYBeNjy1XdXXXXyVXa-90-90.png"); +} + +.zoom .zoom-in.disabled { + opacity: 0.5; +} + +.auto-judge:hover .editable-title, +.node-wrap-box:hover .editable-title { + border-bottom: 1px dashed #fff; +} + +.auto-judge:hover .editable-title.editing, +.node-wrap-box:hover .editable-title.editing { + text-decoration: none; + border: 1px solid #d9d9d9; +} + +.auto-judge:hover .editable-title { + border-color: #15bc83; +} + +.editable-title { + line-height: 15px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-bottom: 1px dashed transparent; +} + +.editable-title::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 40px; +} + +.editable-title:hover { + border-bottom: 1px dashed #fff; +} + +.editable-title-input { + flex: none; + height: 18px; + padding-left: 4px; + text-indent: 0; + font-size: 12px; + line-height: 18px; + z-index: 1; +} + +.editable-title-input:hover { + text-decoration: none; +} + +/* .ant-btn { + position: relative; +} */ + +.node-wrap-box { + display: inline-box; + display: inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + position: relative; + width: 220px; + min-height: 72px; + -ms-flex-negative: 0; + flex-shrink: 0; + background: #fff; + border-radius: 4px; + cursor: pointer; +} + +.node-wrap-box::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box.active::after, +.node-wrap-box:active::after, +.node-wrap-box:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.node-wrap-box.active .close, +.node-wrap-box:active .close, +.node-wrap-box:hover .close { + display: block; +} + +.node-wrap-box.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.node-wrap-box .title { + position: relative; + display: flex; + align-items: center; + padding-left: 16px; + padding-right: 30px; + width: 100%; + height: 24px; + line-height: 24px; + font-size: 12px; + color: #fff; + text-align: left; + background: #576a95; + border-radius: 4px 4px 0 0; +} + +.node-wrap-box .title .iconfont { + font-size: 12px; + margin-right: 5px; +} + +.node-wrap-box .placeholder { + color: #bfbfbf; +} + +.node-wrap-box .close { + display: none; + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + font-size: 14px; + color: #fff; + border-radius: 50%; + text-align: center; + line-height: 20px; +} + +.node-wrap-box .content { + position: relative; + font-size: 14px; + padding: 16px; + padding-right: 30px; +} + +.node-wrap-box .content .text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.node-wrap-box .content .arrow { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 14px; + font-size: 14px; + color: #979797; +} + +.start-node.node-wrap-box .content .text { + display: block; + white-space: nowrap; +} + +.node-wrap-box::before { + content: ""; + position: absolute; + top: -12px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4px; + border-style: solid; + border-width: 8px 6px 4px; + border-color: #cacaca transparent transparent; + background: #f5f5f7; +} + +.node-wrap-box.start-node::before { + content: none; +} + +.top-left-cover-line { + left: -1px; +} + +.top-left-cover-line, +.top-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + top: -4px; +} + +.top-right-cover-line { + right: -1px; +} + +.bottom-left-cover-line { + left: -1px; +} + +.bottom-left-cover-line, +.bottom-right-cover-line { + position: absolute; + height: 8px; + width: 50%; + background-color: #f5f5f7; + bottom: -4px; +} + +.bottom-right-cover-line { + right: -1px; +} + +.dingflow-design { + width: 100%; + background-color: #f5f5f7; + overflow: auto; + + /* position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; */ +} + +.dingflow-design .box-scale { + transform: scale(1); + display: inline-block; + position: relative; + width: 100%; + padding: 54.5px 0; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + flex-wrap: wrap; + min-width: min-content; + background-color: #f5f8ff; + transform-origin: 50% 0 0; +} + +.dingflow-design .node-wrap { + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + + /* flex-wrap: wrap; */ + -webkit-box-flex: 1; + -ms-flex-positive: 1; + padding: 0 50px; + position: relative; +} + +.dingflow-design .branch-wrap, +.dingflow-design .node-wrap { + display: inline-flex; + width: 100%; +} + +.dingflow-design .branch-box-wrap { + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + + /* flex-wrap: wrap; */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: 270px; + width: 100%; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.dingflow-design .branch-box { + display: flex; + overflow: visible; + min-height: 180px; + height: auto; + border-bottom: 2px solid #ccc; + border-top: 2px solid #ccc; + position: relative; + margin-top: 15px; +} + +.dingflow-design .branch-box .col-box { + background: #f5f5f7; +} + +.dingflow-design .branch-box .col-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .add-branch { + border: none; + outline: none; + user-select: none; + justify-content: center; + font-size: 12px; + padding: 0 10px; + height: 30px; + line-height: 30px; + border-radius: 15px; + color: #3296fa; + background: #fff; + box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%); + position: absolute; + top: -16px; + left: 50%; + transform: translateX(-50%); + transform-origin: center center; + cursor: pointer; + z-index: 1; + display: inline-flex; + align-items: center; + transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); +} + +.dingflow-design .add-branch:hover { + transform: translateX(-50%) scale(1.1); + box-shadow: 0 8px 16px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .add-branch:active { + transform: translateX(-50%); + box-shadow: none; +} + +.dingflow-design .col-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + position: relative; +} + +.dingflow-design .condition-node { + min-height: 220px; +} + +.dingflow-design .condition-node, +.dingflow-design .condition-node-box { + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-flex: 1; +} + +.dingflow-design .condition-node-box { + padding-top: 30px; + padding-right: 50px; + padding-left: 50px; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + flex-grow: 1; + position: relative; +} + +.dingflow-design .condition-node-box::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 2px; + height: 100%; + background-color: #cacaca; +} + +.dingflow-design .auto-judge { + position: relative; + width: 220px; + min-height: 72px; + background: #fff; + border-radius: 4px; + padding: 14px 19px; + cursor: pointer; +} + +.dingflow-design .auto-judge::after { + pointer-events: none; + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 2; + border-radius: 4px; + border: 1px solid transparent; + transition: all 0.1s cubic-bezier(0.645, 0.045, 0.355, 1); + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge.active::after, +.dingflow-design .auto-judge:active::after, +.dingflow-design .auto-judge:hover::after { + border: 1px solid #3296fa; + box-shadow: 0 0 6px 0 rgb(50 150 250 / 30%); +} + +.dingflow-design .auto-judge.active .close, +.dingflow-design .auto-judge:active .close, +.dingflow-design .auto-judge:hover .close { + display: block; +} + +.dingflow-design .auto-judge.error::after { + border: 1px solid #f25643; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 10%); +} + +.dingflow-design .auto-judge .title-wrapper { + position: relative; + font-size: 12px; + color: #15bc83; + text-align: left; + line-height: 16px; +} + +.dingflow-design .auto-judge .title-wrapper .editable-title { + display: inline-block; + max-width: 120px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.dingflow-design .auto-judge .title-wrapper .priority-title { + display: inline-block; + float: right; + margin-right: 10px; + color: rgb(25 31 37 / 56%); +} + +.dingflow-design .auto-judge .placeholder { + color: #bfbfbf; +} + +.dingflow-design .auto-judge .close { + display: none; + position: absolute; + right: -10px; + top: -10px; + width: 20px; + height: 20px; + font-size: 14px; + color: rgb(0 0 0 / 25%); + border-radius: 50%; + text-align: center; + line-height: 20px; + z-index: 2; +} + +.dingflow-design .auto-judge .content { + font-size: 14px; + color: #191f25; + text-align: left; + margin-top: 6px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.dingflow-design .auto-judge .sort-left, +.dingflow-design .auto-judge .sort-right { + position: absolute; + top: 0; + bottom: 0; + display: none; + z-index: 1; +} + +.dingflow-design .auto-judge .sort-left { + left: 0; + border-right: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge .sort-right { + right: 0; + border-left: 1px solid #f6f6f6; +} + +.dingflow-design .auto-judge:hover .sort-left, +.dingflow-design .auto-judge:hover .sort-right { + display: flex; + align-items: center; +} + +.dingflow-design .auto-judge .sort-left:hover, +.dingflow-design .auto-judge .sort-right:hover { + background: #efefef; +} + +.dingflow-design .end-node { + border-radius: 50%; + font-size: 14px; + color: rgb(25 31 37 / 40%); + text-align: left; +} + +.dingflow-design .end-node .end-node-circle { + width: 10px; + height: 10px; + margin: auto; + border-radius: 50%; + background: #dbdcdc; +} + +.dingflow-design .end-node .end-node-text { + margin-top: 5px; + text-align: center; +} + +.approval-setting { + border-radius: 2px; + margin: 20px 0; + position: relative; + background: #fff; +} + +/* .ant-btn { + position: relative; +} */ diff --git a/src/plugins/api.js b/src/plugins/api.js new file mode 100644 index 0000000..b3b9e24 --- /dev/null +++ b/src/plugins/api.js @@ -0,0 +1,60 @@ +/* + * @Date: 2022-08-25 14:06:59 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:36:58 + * @FilePath: /Workflow-Vue3/src/plugins/api.js + */ +import http from '@/plugins/axios' +const baseUrl = import.meta.env.BASE_URL + +/** + * 获取角色 + * @param {*} data + * @returns + */ +export function getRoles(data) { + return http.get(`${baseUrl}roles.json`, { params: data }) +} + +/** + * 获取部门 + * @param {*} data + * @returns + */ +export function getDepartments(data) { + return http.get(`${baseUrl}departments.json`, { params: data }) +} + +/** + * 获取职员 + * @param {*} data + * @returns + */ +export function getEmployees(data) { + return http.get(`${baseUrl}employees.json`, { params: data }) +} +/** + * 获取条件字段 + * @param {*} data + * @returns + */ +export function getConditions(data) { + return http.get(`${baseUrl}conditions.json`, { params: data }) +} + +/** + * 获取审批数据 + * @param {*} data + * @returns + */ +export function getWorkFlowData(data) { + return http.get(`${baseUrl}data.json`, { params: data }) +} +/** + * 设置审批数据 + * @param {*} data + * @returns + */ +export function setWorkFlowData(data) { + return http.post(`${baseUrl}`, data) +} diff --git a/src/plugins/axios.js b/src/plugins/axios.js new file mode 100644 index 0000000..ca3c7e2 --- /dev/null +++ b/src/plugins/axios.js @@ -0,0 +1,47 @@ +/* + * @Date: 2022-08-25 14:43:53 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:02 + * @FilePath: /Workflow-Vue3/src/plugins/axios.js + */ +'use strict' + +import axios from 'axios' + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; + +const config = { + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control +} + +const _axios = axios.create(config) + +_axios.interceptors.request.use( + (config) => { + // Do something before request is sent + return config + }, + (error) => { + // Do something with request error + return Promise.reject(error) + }, +) + +// Add a response interceptor +_axios.interceptors.response.use( + (response) => { + // Do something with response data + return response.data + }, + (error) => { + // Do something with response error + return Promise.reject(error) + }, +) + +export default _axios diff --git a/src/plugins/element.js b/src/plugins/element.js new file mode 100644 index 0000000..3e66f98 --- /dev/null +++ b/src/plugins/element.js @@ -0,0 +1,36 @@ +import Vue from 'vue' +import { + Breadcrumb, BreadcrumbItem, + Button, Checkbox, + CheckboxGroup, Dialog, + Drawer, Message, + Popover, Radio, + RadioGroup, TabPane, + Tabs, + Tree, +} from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +Vue.use(Button) +Vue.use(Popover) +Vue.use(Dialog) +Vue.use(Drawer) +Vue.use(Tree) +Vue.use(Radio) +Vue.use(RadioGroup) +Vue.use(Checkbox) +Vue.use(CheckboxGroup) +Vue.use(Breadcrumb) +Vue.use(BreadcrumbItem) +Vue.use(Tabs) +Vue.use(TabPane) + +Vue.prototype.$message = { + error(msg) { + Message.closeAll() + Message.error(msg) + }, + success(msg) { + Message.closeAll() + Message.success(msg) + }, +} diff --git a/src/plugins/lib.ts b/src/plugins/lib.ts new file mode 100644 index 0000000..cc6ab69 --- /dev/null +++ b/src/plugins/lib.ts @@ -0,0 +1,45 @@ +/* + * @Date: 2022-08-25 15:35:18 + * @LastEditors: StavinLi 495727881@qq.com + * @LastEditTime: 2022-09-21 14:37:04 + * @FilePath: /Workflow-Vue3/src/plugins/lib.js + */ +import { computed } from 'vue' +// import { useStore } from 'vuex' +import useWorkFlowStore from '../../src/store/modules/workFlow' +const store = useWorkFlowStore() + +const mapState = () => { + return Object.fromEntries( + Object.keys(store.$state).map( + key => [key, computed(() => store.$state[key])], + ), + ) +} + +const mapGetters = () => { + return Object.fromEntries( + Object.keys(store.getters).map( + getter => [getter, computed(() => store.getters[getter])], + ), + ) +} + +const mapMutations = () => { + return Object.fromEntries( + + Object.keys(store._mutations).map( + mutation => [mutation, value => store.commit(mutation, value)], + ), + ) +} + +const mapActions = () => { + return Object.fromEntries( + Object.keys(store._actions).map( + action => [action, value => store.dispatch(action, value)], + ), + ) +} + +export { mapState, mapGetters, mapMutations, mapActions } diff --git a/src/plugins/preload.js b/src/plugins/preload.js new file mode 100644 index 0000000..b0281d9 --- /dev/null +++ b/src/plugins/preload.js @@ -0,0 +1,170 @@ +function All() {} +All.prototype = { + timer: '', + debounce(fn, delay = 500) { + var _this = this + return function (arg) { + // 获取函数的作用域和变量 + const that = this + const args = arg + clearTimeout(_this.timer) // 清除定时器 + _this.timer = setTimeout(() => { + fn.call(that, args) + }, delay) + } + }, + setCookie(val) { // cookie设置[{key:value}]、获取key、清除['key1','key2'] + for (var i = 0, len = val.length; i < len; i++) { + for (var key in val[i]) { + document.cookie = `${key}=${encodeURIComponent(val[i][key])}; path=/` + } + } + }, + getCookie(name) { + var strCookie = document.cookie + var arrCookie = strCookie.split('; ') + for (var i = 0, len = arrCookie.length; i < len; i++) { + var arr = arrCookie[i].split('=') + if (name == arr[0]) { + return decodeURIComponent(arr[1]) + } + } + }, + clearCookie(name) { + var myDate = new Date() + myDate.setTime(-1000) // 设置时间 + for (var i = 0, len = name.length; i < len; i++) { + document.cookie = `${name[i]}=''; path=/; expires=${myDate.toGMTString()}` + } + }, + arrToStr(arr) { + if (arr) { + return arr.map((item) => { return item.name }).toString() + } + }, + toggleClass(arr, elem, key = 'id') { + return arr.some((item) => { return item[key] == elem[key] }) + }, + toChecked(arr, elem, key = 'id') { + var isIncludes = this.toggleClass(arr, elem, key) + !isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key) + }, + removeEle(arr, elem, key = 'id') { + var includesIndex + arr.map((item, index) => { + if (item[key] == elem[key]) { + includesIndex = index + } + }) + arr.splice(includesIndex, 1) + }, + setApproverStr(nodeConfig) { + if (nodeConfig.settype == 1) { + if (nodeConfig.nodeUserList.length == 1) { + return nodeConfig.nodeUserList[0].name + } + else if (nodeConfig.nodeUserList.length > 1) { + if (nodeConfig.examineMode == 1) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else if (nodeConfig.examineMode == 2) { + return `${nodeConfig.nodeUserList.length}人会签` + } + } + } + else if (nodeConfig.settype == 2) { + const level = nodeConfig.directorLevel == 1 ? '直接主管' : `第${nodeConfig.directorLevel}级主管` + if (nodeConfig.examineMode == 1) { + return level + } + else if (nodeConfig.examineMode == 2) { + return `${level}会签` + } + } + else if (nodeConfig.settype == 4) { + if (nodeConfig.selectRange == 1) { + return '发起人自选' + } + else { + if (nodeConfig.nodeUserList.length > 0) { + if (nodeConfig.selectRange == 2) { + return '发起人自选' + } + else { + return `发起人从${nodeConfig.nodeUserList[0].name}中自选` + } + } + else { + return '' + } + } + } + else if (nodeConfig.settype == 5) { + return '发起人自己' + } + else if (nodeConfig.settype == 7) { + return `从直接主管到通讯录中级别最高的第${nodeConfig.examineEndDirectorLevel}个层级主管` + } + }, + dealStr(str, obj) { + const arr = [] + const list = str.split(',') + for (var elem in obj) { + list.map((item) => { + if (item == elem) { + arr.push(obj[elem].value) + } + }) + } + return arr.join('或') + }, + conditionStr(nodeConfig, index) { + var { conditionList, nodeUserList } = nodeConfig.conditionNodes[index] + if (conditionList.length == 0) { + return (index == nodeConfig.conditionNodes.length - 1) && nodeConfig.conditionNodes[0].conditionList.length != 0 ? '其他条件进入此流程' : '请设置条件' + } + else { + let str = '' + for (var i = 0; i < conditionList.length; i++) { + var { columnId, columnType, showType, showName, optType, zdy1, opt1, zdy2, opt2, fixedDownBoxValue } = conditionList[i] + if (columnId == 0) { + if (nodeUserList.length != 0) { + str += '发起人属于:' + str += `${nodeUserList.map((item) => { return item.name }).join('或')} 并且 ` + } + } + if (columnType == 'String' && showType == '3') { + if (zdy1) { + str += `${showName}属于:${this.dealStr(zdy1, JSON.parse(fixedDownBoxValue))} 并且 ` + } + } + if (columnType == 'Double') { + if (optType != 6 && zdy1) { + var optTypeStr = ['', '<', '>', '≤', '=', '≥'][optType] + str += `${showName} ${optTypeStr} ${zdy1} 并且 ` + } + else if (optType == 6 && zdy1 && zdy2) { + str += `${zdy1} ${opt1} ${showName} ${opt2} ${zdy2} 并且 ` + } + } + } + return str ? str.substring(0, str.length - 4) : '请设置条件' + } + }, + copyerStr(nodeConfig) { + if (nodeConfig.nodeUserList.length != 0) { + return this.arrToStr(nodeConfig.nodeUserList) + } + else { + if (nodeConfig.ccSelfSelectFlag == 1) { + return '发起人自选' + } + } + }, + toggleStrClass(item, key) { + const a = item.zdy1 ? item.zdy1.split(',') : [] + return a.some((item) => { return item == key }) + }, +} + +export default new All() diff --git a/src/router/modules/system.ts b/src/router/modules/system.ts index 113d712..5a45736 100644 --- a/src/router/modules/system.ts +++ b/src/router/modules/system.ts @@ -23,6 +23,7 @@ auth: '/sys/area', sidebar: false, breadcrumb: true, + activeMenu: '/area', }, }, ], @@ -47,6 +48,7 @@ auth: '/sys/resource', sidebar: false, breadcrumb: true, + activeMenu: '/resource', }, }, ], @@ -71,6 +73,7 @@ auth: '/sys/dept', sidebar: false, breadcrumb: true, + activeMenu: '/dept', }, }, ], @@ -95,6 +98,7 @@ auth: '/sys/role', sidebar: false, breadcrumb: true, + activeMenu: '/role', }, }, ], @@ -119,6 +123,7 @@ auth: '/sys/mgr', sidebar: false, breadcrumb: true, + activeMenu: '/user', }, }, ], @@ -143,6 +148,7 @@ auth: '/sys/dict', sidebar: false, breadcrumb: true, + activeMenu: '/dict', }, }, ], @@ -191,6 +197,7 @@ auth: '/sys/tenantSys/list', sidebar: false, breadcrumb: true, + activeMenu: '/tenant', }, }, ], @@ -215,6 +222,7 @@ auth: '/sys/log/biz/list', sidebar: false, breadcrumb: true, + activeMenu: '/business', }, }, ], @@ -239,6 +247,7 @@ auth: '/sys/log/error/list', sidebar: false, breadcrumb: true, + activeMenu: '/error', }, }, ], @@ -263,6 +272,7 @@ auth: '/sys/loginLog', sidebar: false, breadcrumb: true, + activeMenu: '/loginDiary', }, }, ], @@ -334,7 +344,7 @@ { path: 'list', name: 'noticeList', - component: () => import('@/views/system/notice/note.list.vue'), + component: () => import('@/views/system/notice/noteList.vue'), meta: { title: '通知公告', auth: '/sys/notice/list', diff --git a/src/store/modules/workFlow.ts b/src/store/modules/workFlow.ts new file mode 100644 index 0000000..956b386 --- /dev/null +++ b/src/store/modules/workFlow.ts @@ -0,0 +1,54 @@ +import { defineStore } from 'pinia' +const useWorkFlowStore = defineStore( + 'workFlow', + { + state: () => ({ + tableId: '', + isTried: false, + promoterDrawer: false, + flowPermission1: {}, + approverDrawer: false, + approverConfig1: {}, + copyerDrawer: false, + copyerConfig1: {}, + conditionDrawer: false, + conditionsConfig1: { + conditionNodes: [], + }, + }), + actions: { + setTableId(payload: string) { + this.tableId = payload + }, + setIsTried(payload: boolean) { + this.isTried = payload + }, + setPromoter(payload: boolean) { + this.promoterDrawer = payload + }, + setFlowPermission(payload: object) { + this.flowPermission1 = payload + }, + setApprover(payload: boolean) { + this.approverDrawer = payload + }, + setApproverConfig(payload: object) { + this.approverConfig1 = payload + }, + setCopyer(payload: boolean) { + this.copyerDrawer = payload + }, + setCopyerConfig(payload: object) { + this.copyerConfig1 = payload + }, + setCondition(payload: boolean) { + this.conditionDrawer = payload + }, + setConditionsConfig(payload: any) { + this.conditionsConfig1 = payload + }, + }, + }, +) + +export default useWorkFlowStore diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts new file mode 100644 index 0000000..3fe9a62 --- /dev/null +++ b/src/utils/exportUtils.ts @@ -0,0 +1,20 @@ +/** + * 导出文件工具 + * @param blob 文件 + * @param fileName 导出文件名 + */ +export function exportFile(blob: Blob, fileName: string) { + if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) { + (navigator as any).msSaveBlob(blob, fileName) + } + else { + const downloadElement = document.createElement('a') + const href = window.URL.createObjectURL(blob) // 创建下载的链接 + downloadElement.href = href + downloadElement.download = fileName + document.body.appendChild(downloadElement) + downloadElement.click() // 点击下载 + document.body.removeChild(downloadElement) // 下载完成移除元素 + window.URL.revokeObjectURL(href) // 释放blob对象 + } +} diff --git a/src/utils/exportXlsx.ts b/src/utils/exportXlsx.ts new file mode 100644 index 0000000..e532b1a --- /dev/null +++ b/src/utils/exportXlsx.ts @@ -0,0 +1,90 @@ +import * as XLSX from 'xlsx' +console.log(XLSX) + +/* + * @description: + * @param {Object} json 服务端发过来的数据 + * @param {String} name 导出Excel文件名字 + * @param {String} titleArr 导出Excel表头 + * @param {String} sheetName 导出sheetName名字 + * @return: + */ +export interface excelType { + json: object + name: string + titleArr: string[] + sheetName: string +} +export function exportExcel(params: excelType) { + /* convert state to workbook */ + const data = [] + const keyArray = [] + const getLength = function (obj: object) { + let count = 0 + for (const i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + // if (obj.hasOwnProperty(i)) { + count++ + } + } + return count + } + for (const key1 in params.json) { + if (Object.prototype.hasOwnProperty.call(params.json, key1)) { + const element = (params.json as { [key: string]: object })[key1] + const rowDataArray = [] + for (const key2 in element) { + if (Object.prototype.hasOwnProperty.call(element, key2)) { + const element2 = (element as { [key: string]: object })[key2] + rowDataArray.push(element2) + if (keyArray.length < getLength(element)) { + keyArray.push(key2) + } + console.log(keyArray, 'keyArray') + } + } + data.push(rowDataArray) + } + } + // keyArray为英文字段表头 + data.splice(0, 0, keyArray as any, params.titleArr as any) + console.log('data', data) + const ws = XLSX.utils.aoa_to_sheet(data) + const wb = XLSX.utils.book_new() + // 此处隐藏英文字段表头 + const wsrows = [{ hidden: true }] + /* 设置worksheet每列的最大宽度 */ + const colWidth = data.map(row => row.map((val) => { + /* 先判断是否为null/undefined */ + if (val == null) { + return { + wch: 10, + } + } + /* 再判断是否为中文 */ + else if (val.toString().charCodeAt(0) > 255) { + return { + wch: val.toString().length * 2, + } + } + else { + return { + wch: val.toString().length, + } + } + })) + /* 以第一行为初始值 */ + const result = colWidth[0] + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j].wch < colWidth[i][j].wch) { + result[j].wch = colWidth[i][j].wch + } + } + } + ws['!cols'] = result + ws['!rows'] = wsrows // ws - worksheet + XLSX.utils.book_append_sheet(wb, ws, params.sheetName) + /* generate file and send to client */ + XLSX.writeFile(wb, `${params.name}.xlsx`) +} diff --git a/src/views/login.vue b/src/views/login.vue index 6e2b685..17dbad3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -28,13 +28,17 @@ const redirect = ref(route.query.redirect?.toString() ?? '/') // 是否需要验证码 const showKaptcha = ref(false) +// 公钥 const publicKey = ref('') +// sid +const sid = ref('') // 获取系统基础配置: 公钥,是否开启验证码 function getBaseConfig() { userStore.getBaseConfig().then((res) => { showKaptcha.value = res.kaptcha publicKey.value = res.publicKey + sid.value = res.sid ElMessage({ message: '连接服务器成功', type: 'success', @@ -68,6 +72,7 @@ loading.value = true // 表单对象 const finalForm = { + sid: sid.value, username: loginForm.value.username, password: '', kaptcha: loginForm.value.kaptcha, @@ -248,7 +253,7 @@ - + diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@ diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@ diff --git a/src/views/setting.vue b/src/views/setting.vue new file mode 100644 index 0000000..534d796 --- /dev/null +++ b/src/views/setting.vue @@ -0,0 +1,174 @@ + + + + + + + diff --git a/src/views/system/area/listArea.vue b/src/views/system/area/listArea.vue index 335a6fb..3663af7 100644 --- a/src/views/system/area/listArea.vue +++ b/src/views/system/area/listArea.vue @@ -2,7 +2,7 @@ import { computed, onActivated, reactive, ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { Ref } from 'vue' -import type { IlistQuery } from './area_interface' +import type { IlistQuery } from './area-interface' import EditArea from './editArea.vue' import { delArea, getAreaListPage } from '@/api/system/area' import type { TableColumn } from '@/components/NormalTable/table_interface' @@ -136,31 +136,34 @@ - - - - - + + + + + + + + diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@ @@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@ diff --git a/src/views/system/dept/dept-interface.ts b/src/views/system/dept/dept-interface.ts index 12ffea3..d5a75b6 100644 --- a/src/views/system/dept/dept-interface.ts +++ b/src/views/system/dept/dept-interface.ts @@ -1,9 +1,17 @@ // 部门类别 export const DeptTypeList = [ - { name: '公司/单位', value: '03' }, - { name: '部门/组', value: '04' }, + { name: '公司', value: '1' }, + { name: '部门', value: '2' }, + { name: '科室', value: '3' }, + { name: '工程组', value: '4' }, ] +// 部门类型 +export interface DeptTypeInfo { + name: string + value: string +} + // 部门信息,下拉树用 export interface DeptTreeNode { id: string @@ -26,4 +34,5 @@ deptType: string tips: string children?: [] + [key: string]: string | number | [] | undefined } diff --git a/src/views/system/dept/editDept.vue b/src/views/system/dept/editDept.vue index c16ec9a..b1e16c8 100644 --- a/src/views/system/dept/editDept.vue +++ b/src/views/system/dept/editDept.vue @@ -1,12 +1,12 @@ - - - - diff --git a/src/views/system/notice/noteList.vue b/src/views/system/notice/noteList.vue new file mode 100644 index 0000000..ce72aac --- /dev/null +++ b/src/views/system/notice/noteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/system/notice/notice-interface.ts b/src/views/system/notice/notice-interface.ts new file mode 100644 index 0000000..a1fc349 --- /dev/null +++ b/src/views/system/notice/notice-interface.ts @@ -0,0 +1,12 @@ +// 通知公告信息类型 +export interface noticeType { + id: number // 主键id(列表接口参数) + minioFileName: string // 上传文件返回名称 string + noticeCompany: string // 发布单位 string + noticeContent: string // 发布内容 string + noticeNo: string // 通知公告编号 string + noticePublisher: string // 发布人 string + noticeSketch: string // 内容简述 string + noticeTime: string // 发布时间 string + noticeTitle: string // 通知公告标题 string +} diff --git a/src/views/system/notice/noticeDetail.vue b/src/views/system/notice/noticeDetail.vue index a9a3b29..17142a1 100644 --- a/src/views/system/notice/noticeDetail.vue +++ b/src/views/system/notice/noticeDetail.vue @@ -1,7 +1,7 @@ - - - - diff --git a/src/views/system/notice/tableHeader.vue b/src/views/system/notice/tableHeader.vue new file mode 100644 index 0000000..e65bccd --- /dev/null +++ b/src/views/system/notice/tableHeader.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/system/process/editProcess.vue b/src/views/system/process/editProcess.vue index 4a92993..c172ada 100644 --- a/src/views/system/process/editProcess.vue +++ b/src/views/system/process/editProcess.vue @@ -3,7 +3,9 @@ import { reactive, ref } from 'vue' import type { FormInstance, FormRules } from 'element-plus' import type { Ref } from 'vue' +import setting from '../../setting.vue' import type { Iform } from './process' +import WorkFlow from '@/components/workFlow/workFlow.vue' const emits = defineEmits(['close']) const ruleFormRef = ref() const form: Ref = ref({ @@ -192,10 +194,15 @@ + +
流程配置
-
+ +
@@ -204,7 +211,8 @@ width: 100%; .title { - margin: 0; + margin: 0 0 20px; + font-weight: 600; } .edit { @@ -212,7 +220,7 @@ padding: 12px; background-color: #fff; border-radius: 7px; - margin: 20px 0; + margin: 0 0 20px; .button-area { width: 100%; @@ -223,7 +231,10 @@ } .set { - height: 200px; + width: 100%; + background-color: #fff; + border-radius: 7px; + margin: 20px 0; } } diff --git a/src/views/system/resource/editResource.vue b/src/views/system/resource/editResource.vue index 1e72e08..59a8a6b 100644 --- a/src/views/system/resource/editResource.vue +++ b/src/views/system/resource/editResource.vue @@ -103,10 +103,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + name: '', + id: '', + url: '', + code: '', + pid: '', + resourceType: '', + num: 0, + icon: '', + } } // 树列表配置 @@ -137,7 +143,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -162,6 +171,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/resource/listResource.vue b/src/views/system/resource/listResource.vue index 3017259..2d564a9 100644 --- a/src/views/system/resource/listResource.vue +++ b/src/views/system/resource/listResource.vue @@ -77,8 +77,8 @@ ).then(() => { delResource(row.id).then((res) => { ElMessage.success('删除成功') + fetchData() }) - fetchData() }) } // 添加资源 @@ -132,10 +132,10 @@ diff --git a/src/views/system/role/editRole.vue b/src/views/system/role/editRole.vue index 6f668f9..d83a56f 100644 --- a/src/views/system/role/editRole.vue +++ b/src/views/system/role/editRole.vue @@ -96,10 +96,16 @@ // 重置表单 function resetForm() { - nextTick(() => { - if (!dataFormRef.value) { return } - dataFormRef.value?.resetFields() - }) + formData.value = { + id: '', + name: '', + tips: '', + dataScopeType: '', + pid: '', + deptId: '', + num: 0, + version: '', + } } // 树列表配置 @@ -138,7 +144,10 @@ dialogVisible.value = true btnLoading.value = false if (dialogstatus === 'create') { - // resetForm() + resetForm() + nextTick(() => { + dataFormRef.value?.clearValidate() + }) } else if (dialogstatus === 'update') { formData.value = { @@ -163,6 +172,7 @@ // 关闭弹窗 function dialogClose() { dialogVisible.value = false + resetForm() } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) diff --git a/src/views/system/role/listRole.vue b/src/views/system/role/listRole.vue index 53b18e2..2b58e5f 100644 --- a/src/views/system/role/listRole.vue +++ b/src/views/system/role/listRole.vue @@ -140,10 +140,10 @@ diff --git a/src/views/system/tool/autograph/addDDialog.vue b/src/views/system/tool/autograph/addDDialog.vue new file mode 100644 index 0000000..b123149 --- /dev/null +++ b/src/views/system/tool/autograph/addDDialog.vue @@ -0,0 +1,215 @@ + + + + + + diff --git a/src/views/system/tool/autograph/autograph.vue b/src/views/system/tool/autograph/autograph.vue index f7b262f..63058ee 100644 --- a/src/views/system/tool/autograph/autograph.vue +++ b/src/views/system/tool/autograph/autograph.vue @@ -1,19 +1,51 @@