From f33e3c6f15be20e2cfa9ca8e9118a935f78534f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E5=8C=97?= <2958847195@qq.com> Date: Fri, 12 Dec 2025 15:48:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=8A=A5=E9=94=99=E5=92=8C?= =?UTF-8?q?=E9=97=A8=E8=AF=8A=E5=8C=BB=E7=94=9F=E7=AB=99=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openhis-ui-vue3/package-lock.json | 191 ++++++++---------- openhis-ui-vue3/package.json | 4 +- .../layout/components/Sidebar/SidebarItem.vue | 8 + openhis-ui-vue3/src/main.js | 15 +- openhis-ui-vue3/src/permission.js | 11 +- openhis-ui-vue3/src/router/index.js | 2 + .../components/tcm/tcmAdvice.vue | 120 +++++++---- .../src/views/doctorstation/index.vue | 23 ++- 8 files changed, 197 insertions(+), 177 deletions(-) diff --git a/openhis-ui-vue3/package-lock.json b/openhis-ui-vue3/package-lock.json index 0ed3f093..1e529faf 100644 --- a/openhis-ui-vue3/package-lock.json +++ b/openhis-ui-vue3/package-lock.json @@ -18,7 +18,7 @@ "decimal.js": "^10.5.0", "echarts": "^5.4.3", "element-china-area-data": "^6.1.0", - "element-plus": "2.9.11", + "element-plus": "^2.12.0", "file-saver": "2.0.5", "fuse.js": "6.6.2", "html2pdf.js": "^0.10.3", @@ -40,7 +40,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "4.5.0", - "@vue/compiler-sfc": "3.3.9", + "@vue/compiler-sfc": "^3.5.25", "sass": "1.69.5", "unplugin-auto-import": "0.17.1", "unplugin-vue-setup-extend-plus": "1.0.0", @@ -77,27 +77,24 @@ "version": "7.27.1", "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", - "license": "MIT", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -116,13 +113,12 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", - "license": "MIT", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1015,7 +1011,6 @@ "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/lodash": "*" } @@ -1025,7 +1020,6 @@ "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.7.2.tgz", "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", "dev": true, - "peer": true, "dependencies": { "undici-types": "~7.14.0" } @@ -1086,57 +1080,65 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.9.tgz", - "integrity": "sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==", + "version": "3.5.25", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.25.tgz", + "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.23.3", - "@vue/shared": "3.3.9", + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.25", + "entities": "^4.5.0", "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.9.tgz", - "integrity": "sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==", + "version": "3.5.25", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", + "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.3.9", - "@vue/shared": "3.3.9" + "@vue/compiler-core": "3.5.25", + "@vue/shared": "3.5.25" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.9.tgz", - "integrity": "sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==", + "version": "3.5.25", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz", + "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.23.3", - "@vue/compiler-core": "3.3.9", - "@vue/compiler-dom": "3.3.9", - "@vue/compiler-ssr": "3.3.9", - "@vue/reactivity-transform": "3.3.9", - "@vue/shared": "3.3.9", + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.25", + "@vue/compiler-dom": "3.5.25", + "@vue/compiler-ssr": "3.5.25", + "@vue/shared": "3.5.25", "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.31", - "source-map-js": "^1.0.2" + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.9.tgz", - "integrity": "sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==", + "version": "3.5.25", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz", + "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.3.9", - "@vue/shared": "3.3.9" + "@vue/compiler-dom": "3.5.25", + "@vue/shared": "3.5.25" } }, "node_modules/@vue/devtools-api": { @@ -1154,20 +1156,6 @@ "@vue/shared": "3.5.22" } }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.9.tgz", - "integrity": "sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.23.3", - "@vue/compiler-core": "3.3.9", - "@vue/shared": "3.3.9", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, "node_modules/@vue/reactivity/node_modules/@vue/shared": { "version": "3.5.22", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", @@ -1273,11 +1261,10 @@ } }, "node_modules/@vue/shared": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.9.tgz", - "integrity": "sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==", - "dev": true, - "license": "MIT" + "version": "3.5.25", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.25.tgz", + "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", + "dev": true }, "node_modules/@vueup/vue-quill": { "version": "1.2.0", @@ -2561,7 +2548,6 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "peer": true, "engines": { "node": ">=12" } @@ -2701,10 +2687,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.18", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.18.tgz", - "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", - "license": "MIT" + "version": "1.11.19", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==" }, "node_modules/debug": { "version": "4.4.3", @@ -2931,24 +2916,22 @@ } }, "node_modules/element-plus": { - "version": "2.9.11", - "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.11.tgz", - "integrity": "sha512-x4L/6YC8de4JtuE3vpaEugJdQIeHQaHtIYKyk67IeF6dTIiVax45aX4nWOygnh+xX+0gTvL6xO+9BZhPA3G82w==", - "license": "MIT", + "version": "2.12.0", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.12.0.tgz", + "integrity": "sha512-M9YLSn2np9OnqrSKWsiXvGe3qnF8pd94+TScsHj1aTMCD+nSEvucXermf807qNt6hOP040le0e5Aft7E9ZfHmA==", "dependencies": { "@ctrl/tinycolor": "^3.4.1", - "@element-plus/icons-vue": "^2.3.1", + "@element-plus/icons-vue": "^2.3.2", "@floating-ui/dom": "^1.0.1", "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", - "@types/lodash": "^4.14.182", - "@types/lodash-es": "^4.17.6", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", "@vueuse/core": "^9.1.0", "async-validator": "^4.2.5", - "dayjs": "^1.11.13", - "escape-html": "^1.0.3", + "dayjs": "^1.11.19", "lodash": "^4.17.21", "lodash-es": "^4.17.21", - "lodash-unified": "^1.0.2", + "lodash-unified": "^1.0.3", "memoize-one": "^6.0.0", "normalize-wheel-es": "^1.2.0" }, @@ -2956,6 +2939,14 @@ "vue": "^3.2.0" } }, + "node_modules/element-plus/node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/element-plus/node_modules/@types/web-bluetooth": { "version": "0.0.16", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", @@ -3291,12 +3282,6 @@ "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -4649,8 +4634,7 @@ "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "peer": true + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/js-base64": { "version": "2.6.4", @@ -4792,14 +4776,12 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "peer": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "peer": true + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash-unified": { "version": "1.0.3", @@ -4832,12 +4814,11 @@ "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "license": "MIT", + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/map-cache": { @@ -5598,7 +5579,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -6035,7 +6015,6 @@ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.52.4.tgz", "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "dev": true, - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -6213,7 +6192,6 @@ "resolved": "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz", "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dev": true, - "peer": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -6237,7 +6215,6 @@ "version": "2.0.3", "resolved": "https://registry.npmmirror.com/segmentit/-/segmentit-2.0.3.tgz", "integrity": "sha512-7mn2XL3OdTUQ+AhHz7SbgyxLTaQRzTWQNVwiK+UlTO8aePGbSwvKUzTwE4238+OUY9MoR6ksAg35zl8sfTunQQ==", - "peer": true, "dependencies": { "preval.macro": "^4.0.0" } @@ -7721,7 +7698,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.4.tgz", "integrity": "sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==", "dev": true, - "peer": true, "dependencies": { "esbuild": "^0.19.3", "postcss": "^8.4.31", @@ -7819,7 +7795,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", diff --git a/openhis-ui-vue3/package.json b/openhis-ui-vue3/package.json index eadbb903..829f949e 100644 --- a/openhis-ui-vue3/package.json +++ b/openhis-ui-vue3/package.json @@ -28,7 +28,7 @@ "decimal.js": "^10.5.0", "echarts": "^5.4.3", "element-china-area-data": "^6.1.0", - "element-plus": "2.9.11", + "element-plus": "^2.12.0", "file-saver": "2.0.5", "fuse.js": "6.6.2", "html2pdf.js": "^0.10.3", @@ -50,7 +50,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "4.5.0", - "@vue/compiler-sfc": "3.3.9", + "@vue/compiler-sfc": "^3.5.25", "sass": "1.69.5", "unplugin-auto-import": "0.17.1", "unplugin-vue-setup-extend-plus": "1.0.0", diff --git a/openhis-ui-vue3/src/layout/components/Sidebar/SidebarItem.vue b/openhis-ui-vue3/src/layout/components/Sidebar/SidebarItem.vue index 0236581e..d3b7bf1b 100644 --- a/openhis-ui-vue3/src/layout/components/Sidebar/SidebarItem.vue +++ b/openhis-ui-vue3/src/layout/components/Sidebar/SidebarItem.vue @@ -85,6 +85,14 @@ function resolvePath(routePath, routeQuery) { if (isExternal(props.basePath)) { return props.basePath } + // 特殊处理门诊医生站路径,确保路径正确 + if (routePath === '/doctorstation' || routePath === 'doctorstation') { + if (routeQuery) { + let query = JSON.parse(routeQuery); + return { path: '/doctorstation', query: query } + } + return '/doctorstation' + } if (routeQuery) { let query = JSON.parse(routeQuery); return { path: getNormalPath(props.basePath + '/' + routePath), query: query } diff --git a/openhis-ui-vue3/src/main.js b/openhis-ui-vue3/src/main.js index f7d266e8..741ff703 100644 --- a/openhis-ui-vue3/src/main.js +++ b/openhis-ui-vue3/src/main.js @@ -5,7 +5,6 @@ import Cookies from 'js-cookie' import ElementPlus from 'element-plus' import zhCn from 'element-plus/es/locale/lang/zh-cn' import 'element-plus/dist/index.css' -import locale from 'element-plus/es/locale/lang/zh-cn' import '@/assets/styles/index.scss' // global css @@ -84,8 +83,14 @@ app.component('ImageUpload', ImageUpload) app.component('ImagePreview', ImagePreview) app.component('RightToolbar', RightToolbar) app.component('Editor', Editor) -app.use(registerComponents) +// 使用element-plus 并且设置全局的大小 +app.use(ElementPlus, { + locale: zhCn, + // 支持 large、default、small + size: Cookies.get('size') || 'default' +}) app.use(ElMessage) +app.use(registerComponents) app.use(router) app.use(store) app.use(plugins) @@ -94,11 +99,5 @@ app.component('svg-icon', SvgIcon) directive(app) // 全局禁止点击遮罩层关闭弹窗 ElDialog.props.closeOnClickModal.default = false; -// 使用element-plus 并且设置全局的大小 -app.use(ElementPlus, { - locale: zhCn, - // 支持 large、default、small - size: Cookies.get('size') || 'default' -}) app.mount('#app') diff --git a/openhis-ui-vue3/src/permission.js b/openhis-ui-vue3/src/permission.js index 4d495ac9..d46f2aad 100644 --- a/openhis-ui-vue3/src/permission.js +++ b/openhis-ui-vue3/src/permission.js @@ -29,14 +29,9 @@ router.beforeEach((to, from, next) => { // 判断当前用户是否已拉取完user_info信息 useUserStore().getInfo().then(() => { isRelogin.show = false - usePermissionStore().generateRoutes().then(accessRoutes => { - // 根据roles权限生成可访问的路由表 - accessRoutes.forEach(route => { - if (!isHttp(route.path)) { - router.addRoute(route) // 动态添加可访问路由表 - } - }) - next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + usePermissionStore().generateRoutes().then(() => { + // 路由已在generateRoutes方法中添加,无需再次添加 + next({ ...to, replace: true }) // hack方法 确保路由已完成 }) }).catch(err => { useUserStore().logOut().then(() => { diff --git a/openhis-ui-vue3/src/router/index.js b/openhis-ui-vue3/src/router/index.js index ab70b68c..5dd60e08 100644 --- a/openhis-ui-vue3/src/router/index.js +++ b/openhis-ui-vue3/src/router/index.js @@ -27,6 +27,8 @@ import Layout from '@/layout' // 公共路由 export const constantRoutes = [ { path: '/appoinmentmanage', component: Layout, redirect: '/appoinmentmanage', name: 'AppoinmentManage', hidden: true, meta: { title: '预约管理', icon: 'component' }, children: [{ path: '', component: () => import('@/views/appoinmentmanage/index.vue'), name: 'AppoinmentManageIndex', meta: { title: '预约管理' } }, { path: 'doctorschedule/:deptId', component: () => import('@/views/appoinmentmanage/doctorschedule/index.vue'), name: 'DoctorSchedule', hidden: true, meta: { title: '医生排班' } }] }, + // 门诊医生站路由配置 + { path: '/doctorstation', component: Layout, redirect: '/doctorstation', name: 'DoctorStation', meta: { title: '门诊医生站', icon: 'doctorstation' }, children: [{ path: '', component: () => import('@/views/doctorstation/index.vue'), name: 'DoctorStationIndex', meta: { title: '门诊医生站', icon: 'doctorstation' } }] }, { path: '/redirect', component: Layout, diff --git a/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue b/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue index ec60c110..0a4a04e9 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/tcm/tcmAdvice.vue @@ -580,13 +580,17 @@ function getListInfo(addNewRow) { getTcmAdviceList({ encounterId: props.patientInfo.encounterId }).then((res) => { if (res && res.data && Array.isArray(res.data)) { - prescriptionList.value = res.data.map((item) => { + // 清空当前处方列表 + tcmPrescriptionList.value = []; + + // 处理返回的数据 + res.data.forEach((item) => { try { // 解析contentJson获取完整的医嘱数据 const contentData = item.contentJson ? JSON.parse(item.contentJson) : {}; - // 合并基础信息和contentJson中的详细信息 - return { + // 创建一个新的处方对象 + const newPrescription = { ...item, ...contentData, // 确保关键显示字段存在 @@ -596,11 +600,14 @@ function getListInfo(addNewRow) { diagnosisName: contentData.diagnosisName || item.diagnosisName || '', positionName: contentData.positionName || item.positionName || '', doseUnitCode_dictText: contentData.doseUnitCode_dictText || item.doseUnitCode_dictText || '', - chineseHerbsDoseQuantity: contentData.chineseHerbsDoseQuantity || item.chineseHerbsDoseQuantity || '' + chineseHerbsDoseQuantity: contentData.chineseHerbsDoseQuantity || item.chineseHerbsDoseQuantity || '', + prescriptionList: [contentData] }; + + // 添加到处方列表 + tcmPrescriptionList.value.push(newPrescription); } catch (error) { console.error('解析医嘱数据失败:', error, '数据项:', item); - return item; // 出错时返回原始数据 } }); @@ -612,11 +619,11 @@ function getListInfo(addNewRow) { } } else { console.error('获取医嘱列表失败或数据格式错误:', res); - prescriptionList.value = []; + tcmPrescriptionList.value = []; } }).catch(error => { console.error('获取医嘱列表异常:', error); - prescriptionList.value = []; + tcmPrescriptionList.value = []; }); tcmDiagnosisList.value = getFromDiagnosis(props.patientInfo.encounterId); @@ -769,7 +776,8 @@ function handleDeletePrescriptionClick(prescriptionIndex) { } // 检查是否有已签发的药品 - const hasChargedItems = prescriptionList.value.some(item => item.statusEnum === 2); + const prescription = tcmPrescriptionList.value[prescriptionIndex]; + const hasChargedItems = prescription.prescriptionList.some(item => item.statusEnum === 2); if (hasChargedItems) { proxy.$modal.msgWarning('该处方单已收费,不能删除'); return; @@ -793,16 +801,18 @@ function isPrescriptionDeletable(prescriptionIndex) { } // 检查是否有已签发的药品 - const hasChargedItems = prescriptionList.value.some(item => item.statusEnum === 2); + const hasChargedItems = tcmPrescriptionList.value.some(item => + item.prescriptionList && item.prescriptionList.some(med => med.statusEnum === 2) + ); return !hasChargedItems; } // 计算处方总价 function getPrescriptionTotalPrice(prescriptionIndex) { - const prescription = prescriptionList.value[prescriptionIndex]; + const prescription = tcmPrescriptionList.value[prescriptionIndex]; let totalPrice = 0; - if (prescription && prescription.prescriptionDetailsList) { - prescription.prescriptionDetailsList.forEach(item => { + if (prescription && prescription.prescriptionList) { + prescription.prescriptionList.forEach(item => { // 使用decimal.js确保精度计算 const quantity = new Decimal(item.minUnitQuantity || 0); const unitPrice = new Decimal(item.unitPrice || 0); @@ -814,9 +824,11 @@ function getPrescriptionTotalPrice(prescriptionIndex) { // 获取处方中的药品数量 function getPrescriptionMedicineCount(prescriptionIndex) { - // 这里需要根据实际的业务逻辑来计算 - // 假设每个处方对应一组药品,这里简化处理 - return prescriptionList.value.filter(item => item.statusEnum !== 2).length; + const prescription = tcmPrescriptionList.value[prescriptionIndex]; + if (prescription && prescription.prescriptionList) { + return prescription.prescriptionList.length; + } + return 0; } /** @@ -959,7 +971,9 @@ function handleDelete(pIndex) { prescription.expandOrder = []; prescription.isAdding = false; adviceQueryParams.value.adviceType = undefined; - groupMarkers.value = getGroupMarkers(prescriptionList.value); // 删除行会出现组号混乱的情况,所以这里重新更新标记 + // 删除行会出现组号混乱的情况,所以这里重新更新标记 + const allPrescriptions = tcmPrescriptionList.value.flatMap(p => p.prescriptionList); + groupMarkers.value = getGroupMarkers(allPrescriptions); } @@ -1115,42 +1129,60 @@ function handleSaveSign(row, index) { function handleSaveBatch() { - let saveList = prescriptionList.value - .filter((item) => { - return item.statusEnum == 1; - }) - .map((item, index) => { - return { - ...item, - accountId: accountId.value, - conditionId: prescription.conditionId, - encounterDiagnosisId: prescription.encounterDiagnosisId, - conditionDefinitionId: prescription.conditionDefinitionId, - encounterId: props.patientInfo.encounterId, - patientId: props.patientInfo.patientId, - requestId: item.requestId, - groupId: item.groupId ? item.groupId : timestamp.toString(), - - chineseHerbsDoseQuantity: prescription.chineseHerbsDoseQuantity, - dbOpType: item.requestId ? '2' : '1', - }; - }); + // 收集所有需要保存的处方项目 + let saveList = []; + + // 遍历所有处方 + for (const prescription of tcmPrescriptionList.value) { + if (prescription.prescriptionList) { + // 检查处方是否有必填的付数 + if (!prescription.chineseHerbsDoseQuantity || prescription.chineseHerbsDoseQuantity == 0) { + proxy.$modal.msgWarning('请输入付数'); + return; + } + + // 收集该处方下需要保存的项目 + const itemsToSave = prescription.prescriptionList + .filter((item) => item.statusEnum == 1) + .map((item, index) => { + return { + ...item, + accountId: accountId.value, + conditionId: prescription.conditionId, + encounterDiagnosisId: prescription.encounterDiagnosisId, + conditionDefinitionId: prescription.conditionDefinitionId, + encounterId: props.patientInfo.encounterId, + patientId: props.patientInfo.patientId, + requestId: item.requestId, + groupId: item.groupId ? item.groupId : timestamp.toString(), + chineseHerbsDoseQuantity: prescription.chineseHerbsDoseQuantity, + dbOpType: item.requestId ? '2' : '1', + }; + }); + + // 将项目添加到保存列表 + saveList = saveList.concat(itemsToSave); + } + } + + // 检查是否有可保存的项目 if (saveList.length == 0) { proxy.$modal.msgWarning('当前没有可保存医嘱'); return; } - if ( - prescription.chineseHerbsDoseQuantity == undefined || - prescription.chineseHerbsDoseQuantity == 0 - ) { - proxy.$modal.msgWarning('请输入付数'); - return; - } + + // 保存处方 saveTcmAdvice({ adviceSaveList: saveList }).then((res) => { if (res.code === 200) { proxy.$modal.msgSuccess('保存成功'); getListInfo(true); - prescription.nextId = 1; + + // 重置所有处方的nextId + tcmPrescriptionList.value.forEach(prescription => { + if (prescription.nextId) { + prescription.nextId = 1; + } + }); } }); } diff --git a/openhis-ui-vue3/src/views/doctorstation/index.vue b/openhis-ui-vue3/src/views/doctorstation/index.vue index 0976a1a9..19d5b390 100644 --- a/openhis-ui-vue3/src/views/doctorstation/index.vue +++ b/openhis-ui-vue3/src/views/doctorstation/index.vue @@ -362,18 +362,27 @@ const shortcuts = [ // const eprescriptionRef = ref(); onMounted(() => { getWaitPatient(); + getPatientList(); }); -getPatientList(); // 获取现诊患者列表 function getPatientList() { queryParams.value.statusEnum = 2; + console.log('调用getPatientList,参数:', queryParams.value); getList(queryParams.value).then((res) => { - patientList.value = res.data.records.map((item) => { - return { - ...item, - active: currentEncounterId.value ? item.encounterId == currentEncounterId.value : false, - }; - }); + console.log('getPatientList返回结果:', res); + if (res.data && res.data.records) { + patientList.value = res.data.records.map((item) => { + return { + ...item, + active: currentEncounterId.value ? item.encounterId == currentEncounterId.value : false, + }; + }); + console.log('患者列表数据:', patientList.value); + } else { + console.error('API返回的数据格式不正确:', res); + } + }).catch(error => { + console.error('获取患者列表失败:', error); }); } function setVisitType(type) {