Browse Source

fix:文件预览修改

master
wang 1 month ago
parent
commit
b75aecdb9d
  1. 325
      package-lock.json
  2. 5
      package.json
  3. 7
      src/api/business/service-applications/service-applications-api.js
  4. 220
      src/components/support/file-upload/index.vue
  5. 25
      src/views/business/erp/service/service-applications-list.vue
  6. 37
      src/views/business/erp/service/service-applications-report-list.vue
  7. 7
      src/views/system/account/components/center/index.vue

325
package-lock.json

@ -10,6 +10,9 @@
"license": "MIT",
"dependencies": {
"@ant-design/icons-vue": "^7.0.1",
"@vue-office/docx": "^1.6.3",
"@vue-office/excel": "^1.7.14",
"@vue-office/pdf": "^2.0.10",
"@wangeditor-next/editor": "5.6.34",
"@wangeditor-next/editor-for-vue": "5.1.14",
"ant-design-vue": "4.2.5",
@ -24,6 +27,7 @@
"highlight.js": "11.8.0",
"lodash": "4.17.21",
"lunar-javascript": "1.6.12",
"mammoth": "^1.12.0",
"mitt": "3.0.1",
"nprogress": "0.2.0",
"pinia": "2.1.7",
@ -33,6 +37,7 @@
"uuid": "^11.1.0",
"v-viewer": "~1.6.4",
"vue": "3.4.27",
"vue-demi": "^0.14.10",
"vue-i18n": "9.13.1",
"vue-router": "4.3.2",
"vue3-json-viewer": "2.3.1"
@ -1386,6 +1391,57 @@
"vue": "^3.2.25"
}
},
"node_modules/@vue-office/docx": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/@vue-office/docx/-/docx-1.6.3.tgz",
"integrity": "sha512-Cs+3CAaRBOWOiW4XAhTwwxJ0dy8cPIf6DqfNvYcD3YACiLwO4kuawLF2IAXxyijhbuOeoFsfvoVbOc16A/4bZA==",
"hasInstallScript": true,
"license": "MIT",
"peerDependencies": {
"@vue/composition-api": "^1.7.1",
"vue": "^2.0.0 || >=3.0.0",
"vue-demi": "^0.14.6"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@vue-office/excel": {
"version": "1.7.14",
"resolved": "https://registry.npmjs.org/@vue-office/excel/-/excel-1.7.14.tgz",
"integrity": "sha512-pVUgt+emDQUnW7q22CfnQ+jl43mM/7IFwYzOg7lwOwPEbiVB4K4qEQf+y/bc4xGXz75w1/e3Kz3G6wAafmFBFg==",
"hasInstallScript": true,
"license": "MIT",
"peerDependencies": {
"@vue/composition-api": "^1.7.1",
"vue": "^2.0.0 || >=3.0.0",
"vue-demi": "^0.14.6"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@vue-office/pdf": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/@vue-office/pdf/-/pdf-2.0.10.tgz",
"integrity": "sha512-yHVLrMAKpMPBkhBwofFyGEtEeJF0Zd7oGmf56Pe5aj/xObdRq3E1CIZqTqhWJNgHV8oLQqaX0vs4p5T1zq+GIA==",
"hasInstallScript": true,
"license": "MIT",
"peerDependencies": {
"@vue/composition-api": "^1.7.1",
"vue": "^2.0.0 || >=3.0.0",
"vue-demi": "^0.14.6"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/@vue/compiler-core": {
"version": "3.4.27",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.27.tgz",
@ -1825,6 +1881,15 @@
"@xtuc/long": "4.2.2"
}
},
"node_modules/@xmldom/xmldom": {
"version": "0.8.11",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
"integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@ -2100,6 +2165,26 @@
"dev": true,
"license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
"version": "2.9.10",
"resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.10.tgz",
@ -2111,6 +2196,12 @@
"baseline-browser-mapping": "dist/cli.js"
}
},
"node_modules/bluebird": {
"version": "3.4.7",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
"integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==",
"license": "MIT"
},
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
@ -2392,6 +2483,12 @@
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
"node_modules/cosmiconfig": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
@ -2605,6 +2702,12 @@
"node": ">=12.0.0"
}
},
"node_modules/dingbat-to-unicode": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz",
"integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==",
"license": "BSD-2-Clause"
},
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
@ -2652,6 +2755,15 @@
"ssr-window": "^4.0.0"
}
},
"node_modules/duck": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz",
"integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==",
"license": "BSD",
"dependencies": {
"underscore": "^1.13.1"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
@ -3896,6 +4008,12 @@
"node": ">=0.10.0"
}
},
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"license": "MIT"
},
"node_modules/immer": {
"version": "9.0.21",
"resolved": "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz",
@ -3969,7 +4087,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true,
"license": "ISC"
},
"node_modules/ini": {
@ -4103,6 +4220,12 @@
"dev": true,
"license": "MIT"
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
@ -4212,6 +4335,18 @@
"dev": true,
"license": "MIT"
},
"node_modules/jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"license": "(MIT OR GPL-3.0-or-later)",
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz",
@ -4298,6 +4433,15 @@
"node": ">= 0.8.0"
}
},
"node_modules/lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@ -4417,6 +4561,17 @@
"loose-envify": "cli.js"
}
},
"node_modules/lop": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz",
"integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==",
"license": "BSD-2-Clause",
"dependencies": {
"duck": "^0.1.12",
"option": "~0.2.1",
"underscore": "^1.13.1"
}
},
"node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz",
@ -4465,6 +4620,39 @@
"semver": "bin/semver"
}
},
"node_modules/mammoth": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.12.0.tgz",
"integrity": "sha512-cwnK1RIcRdDMi2HRx2EXGYlxqIEh0Oo3bLhorgnsVJi2UkbX1+jKxuBNR9PC5+JaX7EkmJxFPmo6mjLpqShI2w==",
"license": "BSD-2-Clause",
"dependencies": {
"@xmldom/xmldom": "^0.8.6",
"argparse": "~1.0.3",
"base64-js": "^1.5.1",
"bluebird": "~3.4.0",
"dingbat-to-unicode": "^1.0.1",
"jszip": "^3.7.1",
"lop": "^0.4.2",
"path-is-absolute": "^1.0.0",
"underscore": "^1.13.1",
"xmlbuilder": "^10.0.0"
},
"bin": {
"mammoth": "bin/mammoth"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/mammoth/node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/map-obj": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz",
@ -4832,6 +5020,12 @@
"wrappy": "1"
}
},
"node_modules/option": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz",
"integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==",
"license": "BSD-2-Clause"
},
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz",
@ -4899,6 +5093,12 @@
"dev": true,
"license": "BlueOak-1.0.0"
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"license": "(MIT AND Zlib)"
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
@ -4955,7 +5155,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@ -5061,32 +5260,6 @@
}
}
},
"node_modules/pinia/node_modules/vue-demi": {
"version": "0.14.10",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
@ -5253,6 +5426,12 @@
"node": ">=6"
}
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@ -5459,6 +5638,27 @@
"node": ">=8"
}
},
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/readable-stream/node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
"node_modules/redent": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz",
@ -5751,6 +5951,12 @@
"randombytes": "^2.1.0"
}
},
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"license": "MIT"
},
"node_modules/shallow-equal": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz",
@ -5944,12 +6150,33 @@
"specificity": "bin/specificity"
}
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"license": "BSD-3-Clause"
},
"node_modules/ssr-window": {
"version": "4.0.2",
"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-4.0.2.tgz",
"integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==",
"license": "MIT"
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/string_decoder/node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
"node_modules/string-width": {
"version": "5.1.2",
"resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
@ -6569,6 +6796,12 @@
"node": "*"
}
},
"node_modules/underscore": {
"version": "1.13.8",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz",
"integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==",
"license": "MIT"
},
"node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz",
@ -6623,7 +6856,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true,
"license": "MIT"
},
"node_modules/uuid": {
@ -6763,6 +6995,32 @@
}
}
},
"node_modules/vue-demi": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/vue-eslint-parser": {
"version": "9.4.3",
"resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
@ -7141,6 +7399,15 @@
"node": ">=12"
}
},
"node_modules/xmlbuilder": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz",
"integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==",
"license": "MIT",
"engines": {
"node": ">=4.0"
}
},
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",

5
package.json

@ -12,6 +12,9 @@
"type": "module",
"dependencies": {
"@ant-design/icons-vue": "^7.0.1",
"@vue-office/docx": "^1.6.3",
"@vue-office/excel": "^1.7.14",
"@vue-office/pdf": "^2.0.10",
"@wangeditor-next/editor": "5.6.34",
"@wangeditor-next/editor-for-vue": "5.1.14",
"ant-design-vue": "4.2.5",
@ -26,6 +29,7 @@
"highlight.js": "11.8.0",
"lodash": "4.17.21",
"lunar-javascript": "1.6.12",
"mammoth": "^1.12.0",
"mitt": "3.0.1",
"nprogress": "0.2.0",
"pinia": "2.1.7",
@ -35,6 +39,7 @@
"uuid": "^11.1.0",
"v-viewer": "~1.6.4",
"vue": "3.4.27",
"vue-demi": "^0.14.10",
"vue-i18n": "9.13.1",
"vue-router": "4.3.2",
"vue3-json-viewer": "2.3.1"

7
src/api/business/service-applications/service-applications-api.js

@ -48,6 +48,13 @@ export const serviceApplicationsApi = {
return postRequest('/serviceApplications/review', param);
},
/**
* 驳回 @author wzh
*/
noreview: (param) => {
return postRequest('/serviceApplications/noreview', param);
},
/**
* 批量审核 @author wzh
*/

220
src/components/support/file-upload/index.vue

@ -33,9 +33,86 @@
</template>
</div>
</a-upload>
<a-modal :footer="null" :open="previewVisible" @cancel="handleCancel">
<img :src="previewUrl" alt="example" style="width: 100%" />
<!-- 文件预览弹框非图片文件 -->
<a-modal
v-model:open="previewVisible"
:title="previewFileName"
:footer="null"
width="90%"
:centered="true"
:body-style="{ height: '80vh', padding: 0 }"
@cancel="handleCancel"
>
<!-- Word 文档预览 -->
<vue-office-docx
v-if="isDocFile"
:src="previewUrl"
style="height: 80vh; overflow: auto;"
@rendered="renderedHandler"
@error="errorHandler"
/>
<!-- Excel 表格预览 -->
<vue-office-excel
v-else-if="isExcelFile"
:src="previewUrl"
:options="excelOptions"
style="height: 80vh; overflow: auto;"
@rendered="renderedHandler"
@error="errorHandler"
/>
<!-- PDF 预览 -->
<vue-office-pdf
v-else-if="isPdfFile"
:src="previewUrl"
style="height: 80vh; overflow: auto;"
@rendered="renderedHandler"
@error="errorHandler"
/>
<!-- 旧版 doc 文件不支持预览 -->
<div v-else-if="isOldDocFile" class="other-file-preview">
<a-result
status="warning"
title="旧版 Word 文档暂不支持预览"
sub-title="请下载后使用 Word 打开查看"
>
<template #extra>
<a-button type="primary" @click="downloadCurrentFile">
<DownloadOutlined />
下载文件
</a-button>
</template>
</a-result>
</div>
<!-- 其他文件类型 -->
<div v-else class="other-file-preview">
<a-result
status="info"
title="该文件类型暂不支持预览"
sub-title="请点击下方按钮下载查看"
>
<template #extra>
<a-button type="primary" @click="downloadCurrentFile">
<DownloadOutlined />
下载文件
</a-button>
</template>
</a-result>
</div>
</a-modal>
<!-- 图片直接使用 a-image 预览 Modal -->
<a-image
:style="{ display: 'none' }"
:preview="{
visible: imagePreviewVisible,
onVisibleChange: (visible) => imagePreviewVisible = visible,
}"
:src="previewUrl"
/>
</div>
</template>
@ -47,10 +124,65 @@
.readonly-upload :deep(.ant-upload-select) {
display: none !important;
}
.preview-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 300px;
max-height: 70vh;
overflow: auto;
text-align: center;
}
.preview-container img {
max-height: 60vh;
object-fit: contain;
}
.preview-toolbar {
display: flex;
justify-content: center;
align-items: center;
gap: 16px;
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid #f0f0f0;
}
.scale-text {
font-size: 14px;
color: #666;
min-width: 50px;
text-align: center;
}
/* 文件预览样式 */
.image-preview-wrapper {
display: flex;
justify-content: center;
align-items: center;
height: 80vh;
background: #f5f5f5;
padding: 20px;
}
.other-file-preview {
display: flex;
justify-content: center;
align-items: center;
height: 80vh;
}
</style>
<script setup>
import { computed, ref, watch } from 'vue';
import { Modal } from 'ant-design-vue';
import { Modal, message } from 'ant-design-vue';
import { PlusOutlined, DownloadOutlined } from '@ant-design/icons-vue';
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'
import VueOfficeExcel from '@vue-office/excel'
import '@vue-office/excel/lib/index.css'
import VueOfficePdf from '@vue-office/pdf'
import { fileApi } from '/@/api/support/file-api';
import { useUserStore } from '/@/store/modules/system/user';
import { SmartLoading } from '/@/components/framework/smart-loading';
@ -126,6 +258,39 @@
const previewVisible = ref(false);
const fileList = ref([]);
const previewUrl = ref('');
const previewFileName = ref('');
const previewFileType = ref('');
const currentPreviewFile = ref(null);
const imagePreviewVisible = ref(false); //
// Excel
const excelOptions = ref({
xls: false,
minColLength: 0,
minRowLength: 0,
});
//
const isDocFile = computed(() => {
return previewFileType.value.toLowerCase() === 'docx';
});
// doc
const isOldDocFile = computed(() => {
return previewFileType.value.toLowerCase() === 'doc';
});
const isExcelFile = computed(() => {
return ['xls', 'xlsx'].includes(previewFileType.value.toLowerCase());
});
const isPdfFile = computed(() => {
return previewFileType.value.toLowerCase() === 'pdf';
});
const isImageFile = computed(() => {
return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(previewFileType.value.toLowerCase());
});
watch(
files,
@ -213,17 +378,58 @@
function handleCancel() {
previewVisible.value = false;
imagePreviewVisible.value = false; //
}
const handlePreview = async (file) => {
if (imgFileType.some((e) => e === file.fileType)) {
previewUrl.value = file.url || file.preview;
previewVisible.value = true;
currentPreviewFile.value = file;
previewFileName.value = file.name || file.fileName || '文件预览';
previewFileType.value = (file.fileType || file.name || '').split('.').pop() || '';
previewUrl.value = file.url || file.preview || file.fileUrl;
console.log('文件类型:', previewFileType.value);
console.log('文件URL:', previewUrl.value);
console.log('isDocFile:', isDocFile.value);
console.log('isExcelFile:', isExcelFile.value);
console.log('isPdfFile:', isPdfFile.value);
// Excel
if (previewFileType.value.toLowerCase() === 'xls') {
excelOptions.value.xls = true;
} else {
fileApi.downLoadFile(file.fileKey);
excelOptions.value.xls = false;
}
//
const fileType = previewFileType.value.toLowerCase();
const isImage = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(fileType);
if (isImage) {
// a-image 使 Modal
imagePreviewVisible.value = true;
} else {
// 使 Modal
previewVisible.value = true;
}
};
//
function renderedHandler() {
console.log('文件渲染完成');
}
//
function errorHandler() {
message.error('文件预览失败,请尝试下载查看');
}
//
function downloadCurrentFile() {
if (currentPreviewFile.value) {
fileApi.downLoadFile(currentPreviewFile.value.fileKey);
}
}
// ------------------------ ------------------------
function clear() {
fileList.value = [];

25
src/views/business/erp/service/service-applications-list.vue

@ -1432,15 +1432,26 @@ function showAuditModal(record) {
rejectLoading.value = true;
const rejectData = {
applicationId: currentRejectRecord.value.applicationId,
associationAuditStatus: 4, //
associationAuditOpinion: rejectForm.rejectReason,
approvalRemark: rejectForm.approvalRemark
};
//
let rejectData;
if (isCeo.value) {
// CEO
rejectData = {
applicationId: currentRejectRecord.value.applicationId,
associationAuditStatus: 4, //
associationAuditOpinion: rejectForm.rejectReason
};
} else {
//
rejectData = {
applicationId: currentRejectRecord.value.applicationId,
firmAuditStatus: 4, //
firmAuditOpinion: rejectForm.rejectReason
};
}
try {
await serviceApplicationsApi.review(rejectData);
await serviceApplicationsApi.noreview(rejectData);
message.success('驳回成功');
rejectModalVisible.value = false;
queryData();

37
src/views/business/erp/service/service-applications-report-list.vue

@ -111,12 +111,12 @@
<template v-if="column.dataIndex === 'action'">
<div class="smart-table-operate">
<a-button @click="showDetail(record)" type="link">详情</a-button>
<!-- 执业机构审核状态为拒绝时只显示详情按钮 -->
<template v-if="record.firmAuditStatus !== 4">
<a-button v-if="(record.firmAuditStatus === 0 || record.firmAuditStatus === 4) && record.userId === loginInfo?.userId" @click="showForm(record)" type="link">编辑</a-button>
<a-button v-if="(record.firmAuditStatus === 0 && record.userId === loginInfo?.userId)" @click="onSubmit(record)" type="link">提交</a-button>
<a-button v-if="record.firmAuditStatus === 0 && record.userId === loginInfo?.userId" @click="onDelete(record)" danger type="link">删除</a-button>
</template>
<!-- 编辑按钮未提交或拒绝状态可以编辑 -->
<a-button v-if="(record.firmAuditStatus === 0 || record.firmAuditStatus === 4) && record.userId === loginInfo?.userId" @click="showForm(record)" type="link">编辑</a-button>
<!-- 提交按钮未提交或拒绝状态可以提交 -->
<a-button v-if="(record.firmAuditStatus === 0 || record.firmAuditStatus === 4) && record.userId === loginInfo?.userId" @click="onSubmit(record)" type="link">提交</a-button>
<!-- 删除按钮未提交或拒绝状态可以删除 -->
<a-button v-if="(record.firmAuditStatus === 0 || record.firmAuditStatus === 4) && record.userId === loginInfo?.userId" @click="onDelete(record)" danger type="link">删除</a-button>
</div>
</template>
</template>
@ -1258,15 +1258,26 @@ function showAuditModal(record) {
rejectLoading.value = true;
const rejectData = {
applicationId: currentRejectRecord.value.applicationId,
associationAuditStatus: 4, //
associationAuditOpinion: rejectForm.rejectReason,
approvalRemark: rejectForm.approvalRemark
};
//
let rejectData;
if (isCeo.value) {
// CEO
rejectData = {
applicationId: currentRejectRecord.value.applicationId,
associationAuditStatus: 4, //
associationAuditOpinion: rejectForm.rejectReason
};
} else {
//
rejectData = {
applicationId: currentRejectRecord.value.applicationId,
firmAuditStatus: 4, //
firmAuditOpinion: rejectForm.rejectReason
};
}
try {
await serviceApplicationsApi.review(rejectData);
await serviceApplicationsApi.noreview(rejectData);
message.success('驳回成功');
rejectModalVisible.value = false;
queryData();

7
src/views/system/account/components/center/index.vue

@ -208,7 +208,12 @@
async function updateEmployee() {
SmartLoading.show();
try {
await employeeApi.updateCenter(form);
// licenseNumber certificateNumber
const submitData = {
...form,
certificateNumber: form.licenseNumber,
};
await employeeApi.updateCenter(submitData);
message.success('更新成功');
//
await getLoginInfo();

Loading…
Cancel
Save