From 4a853ba237f0d2a6cf84f23cecc03a261d64ca2a Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 14 Mar 2026 15:39:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../debug/GenerateTestUserSig-es.js | 4 +- TUICallKit-Vue3/manifest.json | 8 +- TUICallKit-Vue3/static/logo.png | Bin 4023 -> 0 bytes admin/package-lock.json | 176 +++- admin/package.json | 4 +- admin/src/api/order.ts | 5 + admin/src/api/tcm.ts | 27 + admin/src/components/chat-dialog/index.vue | 287 +++++-- .../src/components/tcm-prescription/index.vue | 756 ++++++++++++++++++ admin/src/views/consumer/assistant/edit.vue | 442 ++++++++++ admin/src/views/consumer/assistant/index.vue | 164 ++++ admin/src/views/order/index.vue | 6 +- admin/src/views/tcm/appointment/list.vue | 26 +- admin/src/views/tcm/diagnosis/index.vue | 4 + admin/src/views/workbench/index.vue | 371 ++++++++- ps/管理密码.txt | 7 +- .../controller/order/OrderController.php | 11 + .../controller/tcm/DiagnosisController.php | 11 + .../controller/tcm/PrescriptionController.php | 68 ++ server/app/adminapi/logic/auth/AdminLogic.php | 6 + .../app/adminapi/logic/order/OrderLogic.php | 209 +++++ .../app/adminapi/logic/tcm/DiagnosisLogic.php | 165 +++- .../adminapi/logic/tcm/PrescriptionLogic.php | 124 +++ .../validate/tcm/PrescriptionValidate.php | 36 + server/app/common/model/tcm/Prescription.php | 28 + .../add_doctor_signature_to_prescription.sql | 2 + .../migrations/create_tcm_prescription.sql | 33 + 27 files changed, 2906 insertions(+), 74 deletions(-) delete mode 100644 TUICallKit-Vue3/static/logo.png create mode 100644 admin/src/components/tcm-prescription/index.vue create mode 100644 admin/src/views/consumer/assistant/edit.vue create mode 100644 admin/src/views/consumer/assistant/index.vue create mode 100644 server/app/adminapi/controller/tcm/PrescriptionController.php create mode 100644 server/app/adminapi/logic/tcm/PrescriptionLogic.php create mode 100644 server/app/adminapi/validate/tcm/PrescriptionValidate.php create mode 100644 server/app/common/model/tcm/Prescription.php create mode 100644 server/database/migrations/add_doctor_signature_to_prescription.sql create mode 100644 server/database/migrations/create_tcm_prescription.sql diff --git a/TUICallKit-Vue3/debug/GenerateTestUserSig-es.js b/TUICallKit-Vue3/debug/GenerateTestUserSig-es.js index 7765ee04..e247f33a 100644 --- a/TUICallKit-Vue3/debug/GenerateTestUserSig-es.js +++ b/TUICallKit-Vue3/debug/GenerateTestUserSig-es.js @@ -6,7 +6,7 @@ import LibGenerateTestUserSig from './lib-generate-test-usersig-es.min.js'; * 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId, * 它是腾讯云用于区分客户的唯一标识。 */ -let SDKAPPID = 1600127710; +let SDKAPPID = 1600131325; /** @@ -28,7 +28,7 @@ const EXPIRETIME = 604800; * 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。 * 文档:https://cloud.tencent.com/document/product/647/17275#Server */ -let SECRETKEY = '8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d'; +let SECRETKEY = 'adc84842a817f6b9d124a1a15a6de4d0b3a940bef678820ed46d40db474c8ea4'; /* * Module: GenerateTestUserSig diff --git a/TUICallKit-Vue3/manifest.json b/TUICallKit-Vue3/manifest.json index 0035f6b0..5389584a 100644 --- a/TUICallKit-Vue3/manifest.json +++ b/TUICallKit-Vue3/manifest.json @@ -50,13 +50,13 @@ "quickapp" : {}, /* 小程序特有相关 */ "mp-weixin" : { - "appid" : "wx6b829b4ffce455b7", + "appid" : "wx79b9a0bfbfe7cbcd", "setting" : { "urlCheck" : false }, - "optimization" : { - "subPackages" : true - }, + "optimization" : { + "subPackages" : true + }, "usingComponents" : true }, "mp-alipay" : { diff --git a/TUICallKit-Vue3/static/logo.png b/TUICallKit-Vue3/static/logo.png deleted file mode 100644 index b5771e209bb677e2ebd5ff766ad5ee11790f305a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4023 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 SYs}WS&%*SCNx89m_=0.10.0" } }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/baseline-browser-mapping": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", @@ -5523,6 +5540,18 @@ "browserslist": "*" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5662,6 +5691,33 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/canvg/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, "node_modules/capital-case": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", @@ -6059,6 +6115,15 @@ "ms": "^2.1.1" } }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", @@ -6488,6 +6553,13 @@ "domelementtype": "1" } }, + "node_modules/dompurify": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.9.tgz", + "integrity": "sha512-i6mvVmWN4xo9LrhCOZrDgSs9noW6nOahbrmzjRbPF36YPyj5Ue5lgok0MHDWkG7xzpWFO2OYttXdzM7rJxHvNA==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true + }, "node_modules/domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -7517,6 +7589,12 @@ "reusify": "^1.0.4" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", @@ -8162,6 +8240,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -8967,6 +9058,24 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jspdf": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.2.tgz", + "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.5.4", + "html2canvas": "^1.0.0-rc.5" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -10104,6 +10213,13 @@ "dev": true, "license": "MIT" }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -10792,6 +10908,16 @@ ], "license": "MIT" }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -11162,6 +11288,16 @@ "rgb": "bin/rgb" } }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/rollup": { "version": "4.59.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", @@ -11943,6 +12079,16 @@ "dev": true, "license": "MIT" }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -12442,6 +12588,16 @@ "node": ">=0.10.0" } }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -12650,6 +12806,15 @@ "dev": true, "license": "MIT" }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -13673,6 +13838,15 @@ "dev": true, "license": "MIT" }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/admin/package.json b/admin/package.json index 2688ea87..5c54b340 100644 --- a/admin/package.json +++ b/admin/package.json @@ -25,6 +25,8 @@ "echarts": "^5.6.0", "element-plus": "^2.9.4", "highlight.js": "^11.11.1", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.2", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "nprogress": "^0.2.0", @@ -67,4 +69,4 @@ "vite-plugin-vue-setup-extend": "^0.4.0", "vue-tsc": "^2.2.2" } -} \ No newline at end of file +} diff --git a/admin/src/api/order.ts b/admin/src/api/order.ts index 37db80ad..ad6d5b20 100644 --- a/admin/src/api/order.ts +++ b/admin/src/api/order.ts @@ -5,6 +5,11 @@ export function orderLists(params: any) { return request.get({ url: '/order.order/lists', params }) } +// 订单统计(0退款,1挂号费,2问诊费,3药品费用,4首付,5尾款,6其他) +export function orderStats(params?: { order_type?: number; days?: number }) { + return request.get({ url: '/order.order/orderStats', params }) +} + // 订单详情 export function orderDetail(params: any) { return request.post({ url: '/order.order/detail', params }) diff --git a/admin/src/api/tcm.ts b/admin/src/api/tcm.ts index bae1f05d..92dba2c7 100644 --- a/admin/src/api/tcm.ts +++ b/admin/src/api/tcm.ts @@ -5,6 +5,11 @@ export function tcmDiagnosisLists(params: any) { return request.get({ url: '/tcm.diagnosis/lists', params }) } +// 医助理诊单统计(按部门、按人) +export function assistantDiagnosisStats(params?: { start_time?: string; end_time?: string; days?: number }) { + return request.get({ url: '/tcm.diagnosis/assistantDiagnosisStats', params }) +} + // 添加中医诊单 export function tcmDiagnosisAdd(params: any) { return request.post({ url: '/tcm.diagnosis/add', params }) @@ -137,3 +142,25 @@ export function getWechatExternalContact(params: any) { export function getMsgAuditPermitUsers() { return request.get({ url: '/tcm.diagnosis/getMsgAuditPermitUsers' }) } + +// ========== 中医处方单 ========== + +// 添加处方 +export function prescriptionAdd(params: any) { + return request.post({ url: '/tcm.prescription/add', params }) +} + +// 处方详情 +export function prescriptionDetail(params: { id: number }) { + return request.get({ url: '/tcm.prescription/detail', params }) +} + +// 根据诊单获取处方列表 +export function prescriptionListByDiagnosis(params: { diagnosis_id: number }) { + return request.get({ url: '/tcm.prescription/listByDiagnosis', params }) +} + +// 根据预约获取处方 +export function prescriptionGetByAppointment(params: { appointment_id: number }) { + return request.get({ url: '/tcm.prescription/getByAppointment', params }) +} diff --git a/admin/src/components/chat-dialog/index.vue b/admin/src/components/chat-dialog/index.vue index 3334535d..8f969d5b 100644 --- a/admin/src/components/chat-dialog/index.vue +++ b/admin/src/components/chat-dialog/index.vue @@ -1,15 +1,21 @@ @@ -444,8 +621,8 @@ body > div[data-reka-focus-guard] { z-index: 9999 !important; } -/* 确保聊天对话框内的弹出层也能正确显示 */ -.chat-dialog [data-reka-popper-content-wrapper] { +/* 确保聊天窗口内的弹出层也能正确显示 */ +.chat-floating-window [data-reka-popper-content-wrapper] { z-index: 9999 !important; } diff --git a/admin/src/components/tcm-prescription/index.vue b/admin/src/components/tcm-prescription/index.vue new file mode 100644 index 00000000..5e86d7d1 --- /dev/null +++ b/admin/src/components/tcm-prescription/index.vue @@ -0,0 +1,756 @@ + + + + + diff --git a/admin/src/views/consumer/assistant/edit.vue b/admin/src/views/consumer/assistant/edit.vue new file mode 100644 index 00000000..e19bfccd --- /dev/null +++ b/admin/src/views/consumer/assistant/edit.vue @@ -0,0 +1,442 @@ + + + + + diff --git a/admin/src/views/consumer/assistant/index.vue b/admin/src/views/consumer/assistant/index.vue new file mode 100644 index 00000000..d4c72f30 --- /dev/null +++ b/admin/src/views/consumer/assistant/index.vue @@ -0,0 +1,164 @@ + + + + + + diff --git a/admin/src/views/order/index.vue b/admin/src/views/order/index.vue index 6f77e5ff..18424eb1 100644 --- a/admin/src/views/order/index.vue +++ b/admin/src/views/order/index.vue @@ -509,7 +509,11 @@ const getOrderTypeText = (type: number) => { const typeMap: Record = { 1: '挂号费', 2: '问诊费', - 3: '药品费用' + 3: '药品费用', + 4: '首付费用', + 5: '尾款费用', + 6:'其他费用', + 7:'全部费用', } return typeMap[type] || '未知' } diff --git a/admin/src/views/tcm/appointment/list.vue b/admin/src/views/tcm/appointment/list.vue index 2a142aae..9d4750ee 100644 --- a/admin/src/views/tcm/appointment/list.vue +++ b/admin/src/views/tcm/appointment/list.vue @@ -190,6 +190,15 @@ > 视频二维码 + + 开方 + @@ -250,8 +259,8 @@ - - + + @@ -298,7 +307,7 @@ import { appointmentLists, cancelAppointment, completeAppointment, appointmentDe import { getCallSignature, generateMiniProgramQrcode } from '@/api/tcm' import feedback from '@/utils/feedback' import EditPopup from '../diagnosis/edit.vue' -import PrescriptionDrawer from './components/prescription-drawer.vue' +import TcmPrescription from '@/components/tcm-prescription/index.vue' import ChatDialog from '@/components/chat-dialog/index.vue' import useUserStore from '@/stores/modules/user' import { getWeappConfig } from '@/api/channel/weapp' @@ -392,7 +401,7 @@ const handleReset = () => { const detailVisible = ref(false) const detailData = ref(null) const editRef = ref() -const prescriptionDrawerRef = ref() +const prescriptionRef = ref() const chatDialogRef = ref() // 小程序二维码相关 @@ -525,6 +534,15 @@ const handleMiniProgramQRCode = async (row: any) => { } } +// 开处方 +const handlePrescription = (row: any) => { + if (!row.diagnosis_id && !row.patient_id) { + feedback.msgWarning('该预约缺少诊单信息,请先编辑患者') + return + } + prescriptionRef.value?.open(row) +} + // 重新生成二维码 const handleRegenerateQRCode = () => { if (currentQRCodeRow.value) { diff --git a/admin/src/views/tcm/diagnosis/index.vue b/admin/src/views/tcm/diagnosis/index.vue index 030db8da..5dc9f360 100644 --- a/admin/src/views/tcm/diagnosis/index.vue +++ b/admin/src/views/tcm/diagnosis/index.vue @@ -284,6 +284,10 @@ + + + + diff --git a/admin/src/views/workbench/index.vue b/admin/src/views/workbench/index.vue index bc2a5f9f..354e3a4c 100644 --- a/admin/src/views/workbench/index.vue +++ b/admin/src/views/workbench/index.vue @@ -1,6 +1,8 @@