From a78035690881915706f85215243bc12fcae7b201 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 1 Apr 2026 09:46:25 +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 --- TUICallKit-Vue3/App.vue | 1 - TUICallKit-Vue3/TUIKit/pages/chat/chat.vue | 55 +- admin/src/api/tcm.ts | 9 + .../chat-dialog/ChatMessageItem.vue | 109 + admin/src/components/chat-dialog/index.vue | 246 +- .../src/components/tcm-prescription/index.vue | 29 +- admin/src/config/index.ts | 6 +- admin/src/styles/var.css | 5 +- admin/src/utils/call-video-screenshot.ts | 186 +- admin/src/utils/diagnosis-sync-events.ts | 9 + admin/src/utils/im-business-message-parse.ts | 106 + admin/src/utils/im-call-hangup-detect.ts | 67 + .../src/views/consumer/prescription/index.vue | 1144 +++++- admin/src/views/doctor/tongji.vue | 27 + .../components/prescription-drawer.vue | 5 +- admin/src/views/tcm/appointment/list.vue | 80 +- admin/src/views/tcm/diagnosis/add.vue | 13 +- admin/src/views/tcm/diagnosis/appointment.vue | 77 +- .../components/AppointmentRecordPanel.vue | 175 + .../diagnosis/components/AssignLogPanel.vue | 48 + .../components/ImChatRecordPanel.vue | 105 +- admin/src/views/tcm/diagnosis/detail.vue | 3 + admin/src/views/tcm/diagnosis/edit.vue | 134 +- admin/src/views/tcm/diagnosis/index.vue | 99 +- admin/tsconfig.tsbuildinfo | 2 +- server/.env.trtc.example | 28 +- server/.gitignore | 1 + server/app/AppService.php | 3 +- .../controller/tcm/DiagnosisController.php | 21 +- .../controller/tcm/PrescriptionController.php | 37 +- .../lists/doctor/AppointmentLists.php | 39 +- .../adminapi/lists/doctor/StatisticsLists.php | 150 +- .../app/adminapi/lists/order/OrderLists.php | 2 + .../app/adminapi/lists/tcm/DiagnosisLists.php | 61 +- .../adminapi/lists/tcm/PrescriptionLists.php | 104 +- .../logic/doctor/AppointmentLogic.php | 41 +- .../app/adminapi/logic/tcm/DiagnosisLogic.php | 373 +- .../adminapi/logic/tcm/PrescriptionLogic.php | 361 +- .../validate/tcm/DiagnosisValidate.php | 6 +- .../validate/tcm/PrescriptionValidate.php | 28 +- server/app/api/controller/TcmController.php | 29 +- server/app/api/controller/TrtcController.php | 86 +- .../command/UpdateAppointmentStatus.php | 12 +- server/app/common/model/tcm/Diagnosis.php | 4 + .../common/model/tcm/DiagnosisAssignLog.php | 15 + .../service/TrtcCloudRecordingService.php | 196 +- .../wechat/WechatWorkAppMessageService.php | 192 + server/config/project.php | 3 + server/config/trtc.php | 40 +- ...26_03_30_diagnosis_current_medications.sql | 3 + ...drop_unique_appointment_include_status.sql | 5 + ...03_30_prescription_visible_roles_audit.sql | 8 + .../2026_03_31_tcm_diagnosis_assign_log.sql | 15 + .../{403-DW1_sgYp.js => 403-azrHJWuR.js} | 2 +- .../{404-CoCyoZNZ.js => 404-B9wuU9kq.js} | 2 +- ...-vue-BZWa1PtL.js => icons-vue-DLqm99Vy.js} | 2 +- ...idaUQ0g.js => chat-uikit-vue3-CXQYzAFr.js} | 2 +- ... => uikit-base-component-vue3-DdfqV_bd.js} | 2 +- ...s => AssistantWatchCallDialog-CVbfXl18.js} | 2 +- ...fbgT7OE.js => BloodRecordList-_pHLR2zA.js} | 2 +- ...VdwR5lH.js => CallRecordPanel-CqxE5FF6.js} | 2 +- ...fH0NvT1s.js => CaseRecordList-rGH8PFhE.js} | 2 +- .../assets/ImChatRecordPanel-5tIzrca7.css | 1 - .../assets/ImChatRecordPanel-BJbHCDAO.js | 1 - .../assets/ImChatRecordPanel-BXaTtVuW.css | 1 + .../assets/ImChatRecordPanel-C9VRjToe.js | 1 + ...DQZqcz5V.js => account-adjust-X_mAyJGX.js} | 2 +- ...e_type_script_setup_true_lang-G1VH3QkR.js} | 2 +- server/public/admin/assets/add-DCFfuQFK.css | 1 + server/public/admin/assets/add-DS13bYfa.js | 1 - server/public/admin/assets/add-dw0jZ_Rg.js | 1 + ...dd-nav-C8xhQkgQ.js => add-nav-Cd1CrcnZ.js} | 2 +- ...e_type_script_setup_true_lang-CEl0QgUO.js} | 2 +- server/public/admin/assets/add-pVDollJh.css | 1 - .../{admin-BMIezRnl.js => admin-CFISPn04.js} | 2 +- .../admin/assets/appointment-D3JUnvzM.js | 1 - .../admin/assets/appointment-D5eA2a3y.js | 1 + .../admin/assets/appointment-DaNLu7BE.css | 1 + .../admin/assets/appointment-SNxQwhyU.css | 1 - ...rticle-DY_XmIG_.js => article-DrP7QuTz.js} | 2 +- .../{attr-Bxc8qygI.js => attr-D2SGbo7H.js} | 2 +- .../{attr-BBJX7H1A.js => attr-DD4j2xak.js} | 2 +- .../{attr-gGzo7k0L.js => attr-DV-0vCM1.js} | 2 +- .../{attr-xbDjx_Vq.js => attr-DwTlXGpB.js} | 2 +- .../{attr-BY9jfYhT.js => attr-G4xrVaB8.js} | 2 +- .../{attr-1Bb5Trbj.js => attr-VSpJlSNm.js} | 2 +- .../{attr-CD7uQMce.js => attr-csXs7XXM.js} | 2 +- .../{attr-CqUZBhLL.js => attr-kgRo75GS.js} | 2 +- .../admin/assets/attr-setting-55pQkV8t.js | 1 + .../admin/assets/attr-setting-CpYdQB8K.js | 1 - ...e_type_script_setup_true_lang-hSwyPtds.js} | 2 +- .../{attr-CbzVhtlF.js => attr-vQSmZfjT.js} | 2 +- ...e_type_script_setup_true_lang-BqhkmADK.js} | 2 +- ...e_type_script_setup_true_lang-Ch07OD9M.js} | 2 +- ...e_type_script_setup_true_lang-DtXa6ZoY.js} | 2 +- ...e_type_script_setup_true_lang-UvTgYZBe.js} | 2 +- ...e_type_script_setup_true_lang-UygRyGe-.js} | 2 +- ...e_type_script_setup_true_lang-imdF5haE.js} | 2 +- ...e_type_script_setup_true_lang-pALzINLE.js} | 2 +- .../{auth-CQn8qQ3S.js => auth-Bmk6rF4V.js} | 2 +- ...e_type_script_setup_true_lang-in0U3QZ2.js} | 2 +- ...giMANj3.js => balance_details-CnrFCXqS.js} | 2 +- .../{cache-o13U930m.js => cache-C0tKp-8G.js} | 2 +- ...Y9zJ9Fe.js => change-password-Q8YYXRss.js} | 2 +- .../{code-DNcWay1I.js => code-l7cAQmxF.js} | 2 +- ...w-BJPvUC-H.js => code-preview-BAa0sgZX.js} | 2 +- ...e_type_script_setup_true_lang-C52TzcZ3.js} | 2 +- ...{config-iIQ4_J4E.js => config-D6xc_tCI.js} | 2 +- ...sumer-CvHJ0H-m.js => consumer-nrk_z9Az.js} | 2 +- ...ontent-B-OY0Fip.js => content-Bg71dW-X.js} | 2 +- ...ontent--4OBC6SQ.js => content-CBuwhDTM.js} | 2 +- ...ontent-BAdM3Y1S.js => content-CSap1UrZ.js} | 2 +- ...ontent-DkqQVpYv.js => content-CaA0cebc.js} | 2 +- ...ontent-xNuMUsY_.js => content-Cd32gWWA.js} | 2 +- ...ontent-CocqCGQP.js => content-CflfDnDy.js} | 2 +- ...ontent-j89rjdA5.js => content-CkfJ8oP7.js} | 2 +- ...ontent-CdPmnECn.js => content-CqPqyOfD.js} | 2 +- ...ontent-m_vOy1uc.js => content-CvNsHrtD.js} | 2 +- ...ontent-DUqu7HTs.js => content-DZpzFmih.js} | 2 +- ...ontent-C1unOedU.js => content-DdqKD3x7.js} | 2 +- ...ontent-DG35jhj7.js => content-cQZpM26o.js} | 2 +- ...ontent-23JyHSLE.js => content-yelxRv61.js} | 2 +- ...e_type_script_setup_true_lang-BHrCuz_g.js} | 2 +- ...e_type_script_setup_true_lang-BVOpODOj.js} | 2 +- ...e_type_script_setup_true_lang-BlED0m-a.js} | 2 +- ...e_type_script_setup_true_lang-CsCo8K9F.js} | 2 +- ...e_type_script_setup_true_lang-DjmvG7sA.js} | 2 +- ...ble--jh5XpwR.js => data-table-essfWN_T.js} | 2 +- ...e_type_script_setup_true_lang-Cs_89McF.js} | 2 +- ...ion-DUxk9vfB.js => decoration-CoS5u1Kg.js} | 2 +- ...YoVl0vAG.js => decoration-img-DsnbJJ7z.js} | 2 +- ...-BTOnshVi.js => default_reply-mqrmmIBI.js} | 2 +- ...ent-CzYgy4sl.js => department-BhSY7sFR.js} | 2 +- ...{detail-C0SSUmHp.js => detail-B4mgFpym.js} | 2 +- ...{detail-Cr79r6b8.js => detail-CUnngXKH.js} | 2 +- ...ue_type_script_setup_true_lang-D5tnqc3Q.js | 1 - ...ue_type_script_setup_true_lang-hw83m8kU.js | 1 + .../assets/diagnosis-sync-events-Bb57o6Fi.js | 1 + .../{dict-D-TwGFqw.js => dict-D7eNYVuL.js} | 2 +- ...{doctor-B06wExqo.js => doctor-Cfph0mCT.js} | 2 +- .../{edit-Jz4g3-SQ.js => edit-Bwk7umhA.js} | 2 +- .../{edit-D8IQUOa2.js => edit-By9f08ZQ.js} | 2 +- .../{edit-BN3rtRED.js => edit-C-8SsWrx.js} | 2 +- .../{edit-BHir9HgG.js => edit-CHlDB29t.js} | 2 +- .../{edit-Bx70E9z9.js => edit-CJjYJiGQ.js} | 2 +- .../{edit-CNkR4CiA.js => edit-CLox2AvP.js} | 2 +- .../{edit-wpz935JQ.js => edit-CShNBt-0.js} | 2 +- .../{edit-BFoXshDg.js => edit-CTa-3Ugh.js} | 2 +- .../{edit-CpRvNfMo.js => edit-CXEGgwsC.js} | 2 +- .../{edit-DQiRko-4.js => edit-CgN4SiPw.js} | 2 +- server/public/admin/assets/edit-Cgw0krat.css | 1 - .../{edit-BJL_FByd.js => edit-D1g9sl4H.js} | 2 +- server/public/admin/assets/edit-D41NQbYU.js | 1 + .../{edit-BP3SUfzx.js => edit-D8f3l8Vd.js} | 2 +- server/public/admin/assets/edit-DCb9lqL7.js | 1 - .../{edit-BjO007Bd.js => edit-DFu5nsQK.js} | 2 +- .../{edit-CvKb7CHk.js => edit-DJyLbhsj.js} | 2 +- server/public/admin/assets/edit-DWGBDvgK.css | 1 + .../{edit-BEXf_aIq.js => edit-D_XAPapr.js} | 2 +- .../{edit-DygzpwE1.js => edit-DvIUNs9m.js} | 2 +- .../{edit-CxW5ob32.js => edit-ZwGF7Qwp.js} | 2 +- .../{edit-8uvAB4sK.js => edit-v-BUFcnj.js} | 2 +- ...e_type_script_setup_true_lang-BFDzl0IC.js} | 2 +- ...e_type_script_setup_true_lang-BgHRdxNq.js} | 2 +- ...e_type_script_setup_true_lang-Cm_pZlMF.js} | 2 +- ...e_type_script_setup_true_lang-DDoVH0HH.js} | 2 +- ...e_type_script_setup_true_lang-DPYC5Rx2.js} | 2 +- ...e_type_script_setup_true_lang-DPwE5XBw.js} | 2 +- ...e_type_script_setup_true_lang-DQq0glJV.js} | 2 +- ...e_type_script_setup_true_lang-KJebBlnn.js} | 2 +- ...e_type_script_setup_true_lang-O1ufMR-S.js} | 2 +- ...e_type_script_setup_true_lang-rpcnoWUW.js} | 2 +- ...e_name_articleColumnEdit_lang-DwGubjD9.js} | 2 +- ...s-D9NzL5HE.js => element-plus-8nG574Ul.js} | 2 +- ...nt-Cn98ezRq.js => environment-C94BglpE.js} | 2 +- .../{error-Db2Vny7j.js => error-BgLNs39O.js} | 2 +- .../{fans-f_ajT7Sh.js => fans-DTRaAjyg.js} | 2 +- .../{file-CN1tAtxC.js => file-C-q-2S_r.js} | 2 +- .../{file-BtSeeESa.js => file-CL1V_Cod.js} | 2 +- ...{filing-B-vRSlmE.js => filing-DqsCq--v.js} | 2 +- ...inance-BJvY9o10.js => finance-ChtrSqTA.js} | 2 +- ...y-B6_0ELhj.js => follow_reply-CSxcOapf.js} | 2 +- ...e_type_script_setup_true_lang-DUYzOzj0.js} | 2 +- .../assets/{h5-CMVplkrQ.js => h5-C3mOH_uk.js} | 2 +- .../assets/{h5-DGgfZxai.js => h5-IPOWfWji.js} | 2 +- .../{icon-Ch_T7ed_.js => icon-FU_yQNDF.js} | 2 +- .../im-business-message-parse-CV1kBVNe.js | 1 + server/public/admin/assets/index-8X2WLoAj.js | 1 + .../{index-Bljh0RwR.js => index-B5zu_09P.js} | 2 +- server/public/admin/assets/index-B6G7FDxw.js | 1 - .../{index-B6pdMwNI.js => index-B6dw73fn.js} | 2 +- server/public/admin/assets/index-BCYK8MiP.js | 1 + .../{index-CppXRPrX.js => index-BM19PjE0.js} | 2 +- .../{index-DVQsQhmm.js => index-BQUP6noT.js} | 2 +- server/public/admin/assets/index-BcNZlVny.css | 1 + server/public/admin/assets/index-Bkqewz7r.css | 1 - server/public/admin/assets/index-Bw6nwob3.css | 1 + .../{index-tCaYDRqd.js => index-BxbzMY43.js} | 2 +- server/public/admin/assets/index-C2ep5Cm2.js | 9 + .../{index-DtYA-GNQ.js => index-C8_Xu8g4.js} | 2 +- .../{index-Bnu9eplB.js => index-CB73Fqp1.js} | 2 +- .../{index-CeRunl6G.js => index-CDzKRxne.js} | 2 +- server/public/admin/assets/index-CF9lVMTJ.js | 2 - .../{index-BfAXCEzW.js => index-CHcdk0sq.js} | 2 +- .../{index-DsNp8zDX.js => index-CRXwqobF.js} | 2 +- .../{index-CuLktP6o.js => index-C_MdKPSE.js} | 2 +- .../{index-D0msafKT.js => index-Ca2QmrEC.js} | 2 +- server/public/admin/assets/index-CjLwTVKR.js | 1 + .../{index-C8u4nWCV.js => index-CoHeUAzb.js} | 2 +- .../{index-CntOVWqF.js => index-Cqv8fPyC.js} | 2 +- .../{index-CnOMF8Y8.js => index-CrJL_Vil.js} | 2 +- server/public/admin/assets/index-D-aKuspE.css | 1 - .../{index-epy6JK8p.js => index-D0lFf8Hm.js} | 2 +- .../{index-CQpwKU6_.js => index-D2oPUBzF.js} | 2 +- .../{index-CncrZRx0.js => index-D3ssYs77.js} | 2 +- .../{index-l9o66tt_.js => index-D4E_KNst.js} | 2 +- server/public/admin/assets/index-D54sWaXv.js | 9 - server/public/admin/assets/index-D7xMgpR9.css | 1 - server/public/admin/assets/index-DATgZK-V.css | 1 - server/public/admin/assets/index-DCeN-Afc.css | 1 + .../{index-IyxDPWA8.js => index-DEBKEqbJ.js} | 2 +- server/public/admin/assets/index-DJWfyoG2.css | 1 + server/public/admin/assets/index-DKWTTvx4.js | 1 - .../{index-wQPX7dBB.js => index-DL2R2dPV.js} | 2 +- server/public/admin/assets/index-DRN-bMfN.js | 1 - server/public/admin/assets/index-DSta_kR_.css | 1 + .../{index-Br0mFYru.js => index-DaZqvIRk.js} | 2 +- .../{index-CoHdIPpO.js => index-DhKyiggV.js} | 2 +- .../{index-C7x4Ys3S.js => index-Djqht8qq.js} | 2 +- .../{index-VURuR0CW.js => index-DoB-K0TP.js} | 2 +- .../{index-XhJ9lk_U.js => index-DwBN4Vy9.js} | 2 +- .../{index-VEyykEXn.js => index-DxCWmT7m.js} | 2 +- .../{index-2CLAYJwu.js => index-Iu9ODeSy.js} | 2 +- .../{index-CG0FWRHm.js => index-L3pwh1Vb.js} | 2 +- .../{index-D3b95Tp8.js => index-QhD8xgF4.js} | 2 +- .../{index-15KGDuZB.js => index-WnDLPB0x.js} | 2 +- .../{index-DxSAJtqr.js => index-hFX-_JmZ.js} | 2 +- server/public/admin/assets/index-niZYYMuG.js | 2 + server/public/admin/assets/index-sBCDZ4UG.css | 1 - .../{index-ZSORn78F.js => index-sLrxCWyF.js} | 2 +- ...e_type_script_setup_true_lang-Bm3qXg2y.js} | 2 +- ...e_type_script_setup_true_lang-BnjXGEKw.js} | 2 +- ...e_type_script_setup_true_lang-BzplHlAP.js} | 2 +- ...e_type_script_setup_true_lang-DaV3Y2dz.js} | 2 +- ...e_type_script_setup_true_lang-DoXxnlIX.js} | 2 +- ...e_vue_type_style_index_0_lang-DIEXJboB.js} | 2 +- .../public/admin/assets/index_h5-ChdPLuS9.js | 1 - .../public/admin/assets/index_h5-iMCdDx_O.js | 1 + ...on-DwceT5pi.js => information-D6NB97Uq.js} | 2 +- ...ournal-D9s-Haqv.js => journal-BVUXeiwg.js} | 2 +- ...-DobedZmg.js => keyword_reply-CrIREdi3.js} | 2 +- .../{link-C8znZ4AI.js => link-BfgeP0sA.js} | 2 +- server/public/admin/assets/list-Bz6SgJU4.js | 2 - server/public/admin/assets/list-C0118wO3.js | 2 + .../{list-Calq2EGt.js => list-Cf1gdG0C.js} | 2 +- server/public/admin/assets/list-DL91jLcw.css | 1 - server/public/admin/assets/list-avooxPze.css | 1 + .../{login-NDNsiBLl.js => login-Bj5ZVxgV.js} | 2 +- ...D4GUDoCO.js => login_register-DQcQN1ZJ.js} | 2 +- ...icine-KV4C6nBq.js => medicine-CNUfJm-R.js} | 2 +- ...icine-DCPqyS0z.js => medicine-h613R37S.js} | 2 +- .../{menu-DSzTNpDd.js => menu-CB1BBIm6.js} | 2 +- .../{menu-Ye8eiVX9.js => menu-DTjnIiYh.js} | 2 +- .../{menu-Bas3Z9V_.js => menu-DjZJwqFA.js} | 2 +- ...u-set-BPnz5UzE.js => menu-set-EWCwgAyB.js} | 2 +- ...e_type_script_setup_true_lang-D5n7wiBc.js} | 2 +- ...essage-BkkOoDet.js => message-C1n5MJUM.js} | 2 +- ...e-Df3CBUK8.js => mobile-style-pGC7PTRj.js} | 2 +- ...e_type_script_setup_true_lang-Cwef-TcY.js} | 2 +- ...a-attr-Dldxna-7.js => oa-attr-BuRxRV7P.js} | 2 +- ...m-Dgy2yyz3.js => oa-menu-form-CZB9NOrB.js} | 2 +- ...2GNJ1.js => oa-menu-form-edit-GJeNGr8t.js} | 2 +- ...e_type_script_setup_true_lang-C1gD8QA7.js} | 2 +- ...e_type_script_setup_true_lang-Q83w-rw5.js} | 2 +- ...phone-eYECQoAa.js => oa-phone-B0ULKH1t.js} | 2 +- ...g-BFq225PF.js => open_setting-D1RlwC9_.js} | 2 +- .../{order-B9Y8pnvT.js => order-CDWHSeln.js} | 2 +- ...rflow-ZrGLDayF.js => overflow-Ci3stkaO.js} | 2 +- ...{paiban-DJYQeKqV.js => paiban-Bc3VVL2i.js} | 2 +- ...l-BHbRq_Qx.js => patient-call-BHMZetcO.js} | 2 +- .../{pay-BwE5i2u2.js => pay-BLpOyZOm.js} | 2 +- .../assets/{pc-BUOIi683.js => pc-D-qPa0n5.js} | 2 +- ...ils-CrmKRVOJ.js => pc_details-BaHiQDdh.js} | 2 +- .../{perm-XrsFgwn6.js => perm-D4RGC01-.js} | 2 +- ...{picker-bP9cmZy8.js => picker-DDyyE4Hw.js} | 2 +- ...{picker-DnoOFo57.js => picker-anRkbqwm.js} | 2 +- ...e_type_script_setup_true_lang-BFk_axfX.js} | 2 +- ...-CtpYBxSp.js => popover_input-DyVYA-y1.js} | 2 +- .../{post-_2UF5NOx.js => post-CK-j3tkD.js} | 2 +- .../assets/prescription-drawer-CcxeMqmL.js | 1 + .../assets/prescription-drawer-De30ZOLb.js | 1 - .../assets/prescription-drawer-DvCgNGAR.css | 1 - .../assets/prescription-drawer-uMED861l.css | 1 + ...review-BVBwBsJT.js => preview-B1X2NYga.js} | 2 +- ...-pc-DIR45YxH.js => preview-pc-L-RTAzIZ.js} | 2 +- ...tocol-DUXaXMte.js => protocol-CLHFDJPp.js} | 2 +- ...b-oGaNW.js => recharge_record-BK8EkgRC.js} | 2 +- ...log-71ypO5hs.js => refund-log-BIrx2PQQ.js} | 2 +- ...e_type_script_setup_true_lang-DrcJQVCA.js} | 2 +- ...-DhJ_jfof.js => refund_record-Bf_ARQR1.js} | 2 +- ...-5udQcZ2C.js => relations-add-Cd9BuBFN.js} | 2 +- ...e_type_script_setup_true_lang-BMHAeIjc.js} | 2 +- ...text-CuANvB7M.js => rich_text-aTtv769P.js} | 2 +- .../{role-BUivZ6pi.js => role-BmH2pKEX.js} | 2 +- ...{roster-DZSwCv8_.js => roster-DeZgJfhX.js} | 2 +- ...etting-zpMdApNs.js => setting-8-etgdVX.js} | 2 +- .../{setup-Dr7rMptP.js => setup-DU33g8i4.js} | 2 +- ...ics-vwde5SXl.js => statistics-C7KPj8n_.js} | 2 +- .../{style-BttLBeyr.js => style-CjSUCqt_.js} | 2 +- ...{tabbar-Y55zDHfh.js => tabbar-lvtHcfth.js} | 2 +- .../{tcm-9dTydv5E.js => tcm-DsWVWJMK.js} | 2 +- ...r-YEf3h7Wa.js => theme-picker-CINw_tws.js} | 2 +- server/public/admin/assets/tongji-BUK_wxgU.js | 1 + server/public/admin/assets/tongji-BnIC7erq.js | 1 - .../public/admin/assets/tongji-iDv5_-U9.css | 1 - .../public/admin/assets/tongji-qftPQn42.css | 1 + ...t3H.js => tuikit-atomicx-vue3-CZgu16-k.js} | 38 +- ...{upload-Coqe2kod.js => upload-0S8RSc05.js} | 2 +- ...GtFLBTkE.js => useDictOptions-ilx0zkz5.js} | 2 +- ...nuOa-CtbnwA1M.js => useMenuOa-DYdcrRvC.js} | 2 +- .../{user-BRB-k5Ky.js => user-cKwDU8-p.js} | 2 +- .../{weapp-MCvt4kBr.js => weapp-IWwwkHEl.js} | 2 +- .../{weapp-CeP6qMK3.js => weapp-KeXW0u7y.js} | 2 +- ...ebsite-CbFpGD4c.js => website-DOSEHUum.js} | 2 +- .../{wx_oa-DY7zAxJ4.js => wx_oa-x62xb7vn.js} | 2 +- server/public/admin/index.html | 8 +- server/public/cacert.pem | 3529 +++++++++++++++++ server/public/uploads/index.html | 0 server/route/app.php | 3 +- server/sql/doctor_appointment.sql | 2 +- server/sql/tcm_diagnosis.sql | 1 + .../Common/Http/HttpConnection.php | 21 + 332 files changed, 7845 insertions(+), 866 deletions(-) create mode 100644 admin/src/components/chat-dialog/ChatMessageItem.vue create mode 100644 admin/src/utils/diagnosis-sync-events.ts create mode 100644 admin/src/utils/im-business-message-parse.ts create mode 100644 admin/src/utils/im-call-hangup-detect.ts create mode 100644 admin/src/views/tcm/diagnosis/components/AppointmentRecordPanel.vue create mode 100644 admin/src/views/tcm/diagnosis/components/AssignLogPanel.vue create mode 100644 server/app/common/model/tcm/DiagnosisAssignLog.php create mode 100644 server/app/common/service/wechat/WechatWorkAppMessageService.php create mode 100644 server/database/migrations/2026_03_30_diagnosis_current_medications.sql create mode 100644 server/database/migrations/2026_03_30_drop_unique_appointment_include_status.sql create mode 100644 server/database/migrations/2026_03_30_prescription_visible_roles_audit.sql create mode 100644 server/database/migrations/2026_03_31_tcm_diagnosis_assign_log.sql rename server/public/admin/assets/{403-DW1_sgYp.js => 403-azrHJWuR.js} (85%) rename server/public/admin/assets/{404-CoCyoZNZ.js => 404-B9wuU9kq.js} (78%) rename server/public/admin/assets/@element-plus/{icons-vue-BZWa1PtL.js => icons-vue-DLqm99Vy.js} (99%) rename server/public/admin/assets/@tencentcloud/{chat-uikit-vue3-BidaUQ0g.js => chat-uikit-vue3-CXQYzAFr.js} (86%) rename server/public/admin/assets/@tencentcloud/{uikit-base-component-vue3-k0EAtVKz.js => uikit-base-component-vue3-DdfqV_bd.js} (99%) rename server/public/admin/assets/{AssistantWatchCallDialog-BdjfATWm.js => AssistantWatchCallDialog-CVbfXl18.js} (94%) rename server/public/admin/assets/{BloodRecordList-TfbgT7OE.js => BloodRecordList-_pHLR2zA.js} (91%) rename server/public/admin/assets/{CallRecordPanel-CVdwR5lH.js => CallRecordPanel-CqxE5FF6.js} (71%) rename server/public/admin/assets/{CaseRecordList-fH0NvT1s.js => CaseRecordList-rGH8PFhE.js} (90%) delete mode 100644 server/public/admin/assets/ImChatRecordPanel-5tIzrca7.css delete mode 100644 server/public/admin/assets/ImChatRecordPanel-BJbHCDAO.js create mode 100644 server/public/admin/assets/ImChatRecordPanel-BXaTtVuW.css create mode 100644 server/public/admin/assets/ImChatRecordPanel-C9VRjToe.js rename server/public/admin/assets/{account-adjust-DQZqcz5V.js => account-adjust-X_mAyJGX.js} (81%) rename server/public/admin/assets/{account-adjust.vue_vue_type_script_setup_true_lang-Bk6Hmcnz.js => account-adjust.vue_vue_type_script_setup_true_lang-G1VH3QkR.js} (91%) create mode 100644 server/public/admin/assets/add-DCFfuQFK.css delete mode 100644 server/public/admin/assets/add-DS13bYfa.js create mode 100644 server/public/admin/assets/add-dw0jZ_Rg.js rename server/public/admin/assets/{add-nav-C8xhQkgQ.js => add-nav-Cd1CrcnZ.js} (66%) rename server/public/admin/assets/{add-nav.vue_vue_type_script_setup_true_lang-xpiil8I7.js => add-nav.vue_vue_type_script_setup_true_lang-CEl0QgUO.js} (90%) delete mode 100644 server/public/admin/assets/add-pVDollJh.css rename server/public/admin/assets/{admin-BMIezRnl.js => admin-CFISPn04.js} (84%) delete mode 100644 server/public/admin/assets/appointment-D3JUnvzM.js create mode 100644 server/public/admin/assets/appointment-D5eA2a3y.js create mode 100644 server/public/admin/assets/appointment-DaNLu7BE.css delete mode 100644 server/public/admin/assets/appointment-SNxQwhyU.css rename server/public/admin/assets/{article-DY_XmIG_.js => article-DrP7QuTz.js} (93%) rename server/public/admin/assets/{attr-Bxc8qygI.js => attr-D2SGbo7H.js} (73%) rename server/public/admin/assets/{attr-BBJX7H1A.js => attr-DD4j2xak.js} (63%) rename server/public/admin/assets/{attr-gGzo7k0L.js => attr-DV-0vCM1.js} (63%) rename server/public/admin/assets/{attr-xbDjx_Vq.js => attr-DwTlXGpB.js} (90%) rename server/public/admin/assets/{attr-BY9jfYhT.js => attr-G4xrVaB8.js} (65%) rename server/public/admin/assets/{attr-1Bb5Trbj.js => attr-VSpJlSNm.js} (64%) rename server/public/admin/assets/{attr-CD7uQMce.js => attr-csXs7XXM.js} (63%) rename server/public/admin/assets/{attr-CqUZBhLL.js => attr-kgRo75GS.js} (61%) create mode 100644 server/public/admin/assets/attr-setting-55pQkV8t.js delete mode 100644 server/public/admin/assets/attr-setting-CpYdQB8K.js rename server/public/admin/assets/{attr-setting.vue_vue_type_script_setup_true_lang-Bmr7Rk4a.js => attr-setting.vue_vue_type_script_setup_true_lang-hSwyPtds.js} (89%) rename server/public/admin/assets/{attr-CbzVhtlF.js => attr-vQSmZfjT.js} (64%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-oQY2_nYa.js => attr.vue_vue_type_script_setup_true_lang-BqhkmADK.js} (94%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-Dncc5li2.js => attr.vue_vue_type_script_setup_true_lang-Ch07OD9M.js} (92%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-CnLPtdIt.js => attr.vue_vue_type_script_setup_true_lang-DtXa6ZoY.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-DegvffGY.js => attr.vue_vue_type_script_setup_true_lang-UvTgYZBe.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-CK9aFMyu.js => attr.vue_vue_type_script_setup_true_lang-UygRyGe-.js} (92%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-B6TZIs14.js => attr.vue_vue_type_script_setup_true_lang-imdF5haE.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-BAENXUoY.js => attr.vue_vue_type_script_setup_true_lang-pALzINLE.js} (93%) rename server/public/admin/assets/{auth-CQn8qQ3S.js => auth-Bmk6rF4V.js} (71%) rename server/public/admin/assets/{auth.vue_vue_type_script_setup_true_lang-DT4oDhyD.js => auth.vue_vue_type_script_setup_true_lang-in0U3QZ2.js} (92%) rename server/public/admin/assets/{balance_details-ngiMANj3.js => balance_details-CnrFCXqS.js} (90%) rename server/public/admin/assets/{cache-o13U930m.js => cache-C0tKp-8G.js} (91%) rename server/public/admin/assets/{change-password-BY9zJ9Fe.js => change-password-Q8YYXRss.js} (91%) rename server/public/admin/assets/{code-DNcWay1I.js => code-l7cAQmxF.js} (92%) rename server/public/admin/assets/{code-preview-BJPvUC-H.js => code-preview-BAa0sgZX.js} (81%) rename server/public/admin/assets/{code-preview.vue_vue_type_script_setup_true_lang-C1LWiuWp.js => code-preview.vue_vue_type_script_setup_true_lang-C52TzcZ3.js} (91%) rename server/public/admin/assets/{config-iIQ4_J4E.js => config-D6xc_tCI.js} (92%) rename server/public/admin/assets/{consumer-CvHJ0H-m.js => consumer-nrk_z9Az.js} (81%) rename server/public/admin/assets/{content-B-OY0Fip.js => content-Bg71dW-X.js} (89%) rename server/public/admin/assets/{content--4OBC6SQ.js => content-CBuwhDTM.js} (81%) rename server/public/admin/assets/{content-BAdM3Y1S.js => content-CSap1UrZ.js} (90%) rename server/public/admin/assets/{content-DkqQVpYv.js => content-CaA0cebc.js} (81%) rename server/public/admin/assets/{content-xNuMUsY_.js => content-Cd32gWWA.js} (90%) rename server/public/admin/assets/{content-CocqCGQP.js => content-CflfDnDy.js} (88%) rename server/public/admin/assets/{content-j89rjdA5.js => content-CkfJ8oP7.js} (90%) rename server/public/admin/assets/{content-CdPmnECn.js => content-CqPqyOfD.js} (88%) rename server/public/admin/assets/{content-m_vOy1uc.js => content-CvNsHrtD.js} (90%) rename server/public/admin/assets/{content-DUqu7HTs.js => content-DZpzFmih.js} (86%) rename server/public/admin/assets/{content-C1unOedU.js => content-DdqKD3x7.js} (81%) rename server/public/admin/assets/{content-DG35jhj7.js => content-cQZpM26o.js} (81%) rename server/public/admin/assets/{content-23JyHSLE.js => content-yelxRv61.js} (66%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-BKjJdNTm.js => content.vue_vue_type_script_setup_true_lang-BHrCuz_g.js} (90%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-CtD0Jigs.js => content.vue_vue_type_script_setup_true_lang-BVOpODOj.js} (91%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-C8UnjQbm.js => content.vue_vue_type_script_setup_true_lang-BlED0m-a.js} (91%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-CO4uVuMf.js => content.vue_vue_type_script_setup_true_lang-CsCo8K9F.js} (86%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-Bi66yjjs.js => content.vue_vue_type_script_setup_true_lang-DjmvG7sA.js} (93%) rename server/public/admin/assets/{data-table--jh5XpwR.js => data-table-essfWN_T.js} (78%) rename server/public/admin/assets/{data-table.vue_vue_type_script_setup_true_lang-B5h0h6Oo.js => data-table.vue_vue_type_script_setup_true_lang-Cs_89McF.js} (87%) rename server/public/admin/assets/{decoration-DUxk9vfB.js => decoration-CoS5u1Kg.js} (87%) rename server/public/admin/assets/{decoration-img-YoVl0vAG.js => decoration-img-DsnbJJ7z.js} (90%) rename server/public/admin/assets/{default_reply-BTOnshVi.js => default_reply-mqrmmIBI.js} (89%) rename server/public/admin/assets/{department-CzYgy4sl.js => department-BhSY7sFR.js} (85%) rename server/public/admin/assets/{detail-C0SSUmHp.js => detail-B4mgFpym.js} (77%) rename server/public/admin/assets/{detail-Cr79r6b8.js => detail-CUnngXKH.js} (90%) delete mode 100644 server/public/admin/assets/detail.vue_vue_type_script_setup_true_lang-D5tnqc3Q.js create mode 100644 server/public/admin/assets/detail.vue_vue_type_script_setup_true_lang-hw83m8kU.js create mode 100644 server/public/admin/assets/diagnosis-sync-events-Bb57o6Fi.js rename server/public/admin/assets/{dict-D-TwGFqw.js => dict-D7eNYVuL.js} (92%) rename server/public/admin/assets/{doctor-B06wExqo.js => doctor-Cfph0mCT.js} (92%) rename server/public/admin/assets/{edit-Jz4g3-SQ.js => edit-Bwk7umhA.js} (72%) rename server/public/admin/assets/{edit-D8IQUOa2.js => edit-By9f08ZQ.js} (78%) rename server/public/admin/assets/{edit-BN3rtRED.js => edit-C-8SsWrx.js} (72%) rename server/public/admin/assets/{edit-BHir9HgG.js => edit-CHlDB29t.js} (61%) rename server/public/admin/assets/{edit-Bx70E9z9.js => edit-CJjYJiGQ.js} (72%) rename server/public/admin/assets/{edit-CNkR4CiA.js => edit-CLox2AvP.js} (93%) rename server/public/admin/assets/{edit-wpz935JQ.js => edit-CShNBt-0.js} (87%) rename server/public/admin/assets/{edit-BFoXshDg.js => edit-CTa-3Ugh.js} (80%) rename server/public/admin/assets/{edit-CpRvNfMo.js => edit-CXEGgwsC.js} (96%) rename server/public/admin/assets/{edit-DQiRko-4.js => edit-CgN4SiPw.js} (72%) delete mode 100644 server/public/admin/assets/edit-Cgw0krat.css rename server/public/admin/assets/{edit-BJL_FByd.js => edit-D1g9sl4H.js} (94%) create mode 100644 server/public/admin/assets/edit-D41NQbYU.js rename server/public/admin/assets/{edit-BP3SUfzx.js => edit-D8f3l8Vd.js} (72%) delete mode 100644 server/public/admin/assets/edit-DCb9lqL7.js rename server/public/admin/assets/{edit-BjO007Bd.js => edit-DFu5nsQK.js} (70%) rename server/public/admin/assets/{edit-CvKb7CHk.js => edit-DJyLbhsj.js} (78%) create mode 100644 server/public/admin/assets/edit-DWGBDvgK.css rename server/public/admin/assets/{edit-BEXf_aIq.js => edit-D_XAPapr.js} (93%) rename server/public/admin/assets/{edit-DygzpwE1.js => edit-DvIUNs9m.js} (72%) rename server/public/admin/assets/{edit-CxW5ob32.js => edit-ZwGF7Qwp.js} (94%) rename server/public/admin/assets/{edit-8uvAB4sK.js => edit-v-BUFcnj.js} (92%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-vD92uUJD.js => edit.vue_vue_type_script_setup_true_lang-BFDzl0IC.js} (94%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CQcohUcJ.js => edit.vue_vue_type_script_setup_true_lang-BgHRdxNq.js} (92%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-j_6t3kKn.js => edit.vue_vue_type_script_setup_true_lang-Cm_pZlMF.js} (92%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-Pa9a3ILH.js => edit.vue_vue_type_script_setup_true_lang-DDoVH0HH.js} (89%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-D1R4v-zW.js => edit.vue_vue_type_script_setup_true_lang-DPYC5Rx2.js} (97%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-OIPWGaTN.js => edit.vue_vue_type_script_setup_true_lang-DPwE5XBw.js} (93%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CBs4YKEa.js => edit.vue_vue_type_script_setup_true_lang-DQq0glJV.js} (95%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CI95db1F.js => edit.vue_vue_type_script_setup_true_lang-KJebBlnn.js} (91%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-9bE4jCGp.js => edit.vue_vue_type_script_setup_true_lang-O1ufMR-S.js} (95%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-B69kZeOW.js => edit.vue_vue_type_script_setup_true_lang-rpcnoWUW.js} (95%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-BCFSBFF9.js => edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-DwGubjD9.js} (90%) rename server/public/admin/assets/{element-plus-D9NzL5HE.js => element-plus-8nG574Ul.js} (99%) rename server/public/admin/assets/{environment-Cn98ezRq.js => environment-C94BglpE.js} (93%) rename server/public/admin/assets/{error-Db2Vny7j.js => error-BgLNs39O.js} (90%) rename server/public/admin/assets/{fans-f_ajT7Sh.js => fans-DTRaAjyg.js} (89%) rename server/public/admin/assets/{file-CN1tAtxC.js => file-C-q-2S_r.js} (86%) rename server/public/admin/assets/{file-BtSeeESa.js => file-CL1V_Cod.js} (95%) rename server/public/admin/assets/{filing-B-vRSlmE.js => filing-DqsCq--v.js} (88%) rename server/public/admin/assets/{finance-BJvY9o10.js => finance-ChtrSqTA.js} (90%) rename server/public/admin/assets/{follow_reply-B6_0ELhj.js => follow_reply-CSxcOapf.js} (88%) rename server/public/admin/assets/{footer.vue_vue_type_script_setup_true_lang-CdSeqiEZ.js => footer.vue_vue_type_script_setup_true_lang-DUYzOzj0.js} (89%) rename server/public/admin/assets/{h5-CMVplkrQ.js => h5-C3mOH_uk.js} (91%) rename server/public/admin/assets/{h5-DGgfZxai.js => h5-IPOWfWji.js} (98%) rename server/public/admin/assets/{icon-Ch_T7ed_.js => icon-FU_yQNDF.js} (92%) create mode 100644 server/public/admin/assets/im-business-message-parse-CV1kBVNe.js create mode 100644 server/public/admin/assets/index-8X2WLoAj.js rename server/public/admin/assets/{index-Bljh0RwR.js => index-B5zu_09P.js} (91%) delete mode 100644 server/public/admin/assets/index-B6G7FDxw.js rename server/public/admin/assets/{index-B6pdMwNI.js => index-B6dw73fn.js} (93%) create mode 100644 server/public/admin/assets/index-BCYK8MiP.js rename server/public/admin/assets/{index-CppXRPrX.js => index-BM19PjE0.js} (92%) rename server/public/admin/assets/{index-DVQsQhmm.js => index-BQUP6noT.js} (93%) create mode 100644 server/public/admin/assets/index-BcNZlVny.css delete mode 100644 server/public/admin/assets/index-Bkqewz7r.css create mode 100644 server/public/admin/assets/index-Bw6nwob3.css rename server/public/admin/assets/{index-tCaYDRqd.js => index-BxbzMY43.js} (97%) create mode 100644 server/public/admin/assets/index-C2ep5Cm2.js rename server/public/admin/assets/{index-DtYA-GNQ.js => index-C8_Xu8g4.js} (86%) rename server/public/admin/assets/{index-Bnu9eplB.js => index-CB73Fqp1.js} (91%) rename server/public/admin/assets/{index-CeRunl6G.js => index-CDzKRxne.js} (90%) delete mode 100644 server/public/admin/assets/index-CF9lVMTJ.js rename server/public/admin/assets/{index-BfAXCEzW.js => index-CHcdk0sq.js} (86%) rename server/public/admin/assets/{index-DsNp8zDX.js => index-CRXwqobF.js} (90%) rename server/public/admin/assets/{index-CuLktP6o.js => index-C_MdKPSE.js} (91%) rename server/public/admin/assets/{index-D0msafKT.js => index-Ca2QmrEC.js} (78%) create mode 100644 server/public/admin/assets/index-CjLwTVKR.js rename server/public/admin/assets/{index-C8u4nWCV.js => index-CoHeUAzb.js} (83%) rename server/public/admin/assets/{index-CntOVWqF.js => index-Cqv8fPyC.js} (88%) rename server/public/admin/assets/{index-CnOMF8Y8.js => index-CrJL_Vil.js} (90%) delete mode 100644 server/public/admin/assets/index-D-aKuspE.css rename server/public/admin/assets/{index-epy6JK8p.js => index-D0lFf8Hm.js} (94%) rename server/public/admin/assets/{index-CQpwKU6_.js => index-D2oPUBzF.js} (86%) rename server/public/admin/assets/{index-CncrZRx0.js => index-D3ssYs77.js} (85%) rename server/public/admin/assets/{index-l9o66tt_.js => index-D4E_KNst.js} (97%) delete mode 100644 server/public/admin/assets/index-D54sWaXv.js delete mode 100644 server/public/admin/assets/index-D7xMgpR9.css delete mode 100644 server/public/admin/assets/index-DATgZK-V.css create mode 100644 server/public/admin/assets/index-DCeN-Afc.css rename server/public/admin/assets/{index-IyxDPWA8.js => index-DEBKEqbJ.js} (93%) create mode 100644 server/public/admin/assets/index-DJWfyoG2.css delete mode 100644 server/public/admin/assets/index-DKWTTvx4.js rename server/public/admin/assets/{index-wQPX7dBB.js => index-DL2R2dPV.js} (90%) delete mode 100644 server/public/admin/assets/index-DRN-bMfN.js create mode 100644 server/public/admin/assets/index-DSta_kR_.css rename server/public/admin/assets/{index-Br0mFYru.js => index-DaZqvIRk.js} (92%) rename server/public/admin/assets/{index-CoHdIPpO.js => index-DhKyiggV.js} (93%) rename server/public/admin/assets/{index-C7x4Ys3S.js => index-Djqht8qq.js} (83%) rename server/public/admin/assets/{index-VURuR0CW.js => index-DoB-K0TP.js} (91%) rename server/public/admin/assets/{index-XhJ9lk_U.js => index-DwBN4Vy9.js} (74%) rename server/public/admin/assets/{index-VEyykEXn.js => index-DxCWmT7m.js} (86%) rename server/public/admin/assets/{index-2CLAYJwu.js => index-Iu9ODeSy.js} (92%) rename server/public/admin/assets/{index-CG0FWRHm.js => index-L3pwh1Vb.js} (63%) rename server/public/admin/assets/{index-D3b95Tp8.js => index-QhD8xgF4.js} (97%) rename server/public/admin/assets/{index-15KGDuZB.js => index-WnDLPB0x.js} (87%) rename server/public/admin/assets/{index-DxSAJtqr.js => index-hFX-_JmZ.js} (94%) create mode 100644 server/public/admin/assets/index-niZYYMuG.js delete mode 100644 server/public/admin/assets/index-sBCDZ4UG.css rename server/public/admin/assets/{index-ZSORn78F.js => index-sLrxCWyF.js} (88%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-DUX2T7zX.js => index.vue_vue_type_script_setup_true_lang-Bm3qXg2y.js} (94%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-_izKWNxN.js => index.vue_vue_type_script_setup_true_lang-BnjXGEKw.js} (93%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-DRfyLF6z.js => index.vue_vue_type_script_setup_true_lang-BzplHlAP.js} (96%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-DNZxpZG_.js => index.vue_vue_type_script_setup_true_lang-DaV3Y2dz.js} (93%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-BhRcef9A.js => index.vue_vue_type_script_setup_true_lang-DoXxnlIX.js} (92%) rename server/public/admin/assets/{index.vue_vue_type_style_index_0_lang-HF9M4lSn.js => index.vue_vue_type_style_index_0_lang-DIEXJboB.js} (96%) delete mode 100644 server/public/admin/assets/index_h5-ChdPLuS9.js create mode 100644 server/public/admin/assets/index_h5-iMCdDx_O.js rename server/public/admin/assets/{information-DwceT5pi.js => information-D6NB97Uq.js} (91%) rename server/public/admin/assets/{journal-D9s-Haqv.js => journal-BVUXeiwg.js} (89%) rename server/public/admin/assets/{keyword_reply-DobedZmg.js => keyword_reply-CrIREdi3.js} (89%) rename server/public/admin/assets/{link-C8znZ4AI.js => link-BfgeP0sA.js} (75%) delete mode 100644 server/public/admin/assets/list-Bz6SgJU4.js create mode 100644 server/public/admin/assets/list-C0118wO3.js rename server/public/admin/assets/{list-Calq2EGt.js => list-Cf1gdG0C.js} (90%) delete mode 100644 server/public/admin/assets/list-DL91jLcw.css create mode 100644 server/public/admin/assets/list-avooxPze.css rename server/public/admin/assets/{login-NDNsiBLl.js => login-Bj5ZVxgV.js} (96%) rename server/public/admin/assets/{login_register-D4GUDoCO.js => login_register-DQcQN1ZJ.js} (94%) rename server/public/admin/assets/{medicine-KV4C6nBq.js => medicine-CNUfJm-R.js} (81%) rename server/public/admin/assets/{medicine-DCPqyS0z.js => medicine-h613R37S.js} (97%) rename server/public/admin/assets/{menu-DSzTNpDd.js => menu-CB1BBIm6.js} (76%) rename server/public/admin/assets/{menu-Ye8eiVX9.js => menu-DTjnIiYh.js} (90%) rename server/public/admin/assets/{menu-Bas3Z9V_.js => menu-DjZJwqFA.js} (86%) rename server/public/admin/assets/{menu-set-BPnz5UzE.js => menu-set-EWCwgAyB.js} (66%) rename server/public/admin/assets/{menu-set.vue_vue_type_script_setup_true_lang-BvgIclzg.js => menu-set.vue_vue_type_script_setup_true_lang-D5n7wiBc.js} (92%) rename server/public/admin/assets/{message-BkkOoDet.js => message-C1n5MJUM.js} (87%) rename server/public/admin/assets/{mobile-style-Df3CBUK8.js => mobile-style-pGC7PTRj.js} (82%) rename server/public/admin/assets/{mobile-style.vue_vue_type_script_setup_true_lang-BAQjUg0p.js => mobile-style.vue_vue_type_script_setup_true_lang-Cwef-TcY.js} (95%) rename server/public/admin/assets/{oa-attr-Dldxna-7.js => oa-attr-BuRxRV7P.js} (82%) rename server/public/admin/assets/{oa-menu-form-Dgy2yyz3.js => oa-menu-form-CZB9NOrB.js} (82%) rename server/public/admin/assets/{oa-menu-form-edit-BVv2GNJ1.js => oa-menu-form-edit-GJeNGr8t.js} (75%) rename server/public/admin/assets/{oa-menu-form-edit.vue_vue_type_script_setup_true_lang-BO8VfV0O.js => oa-menu-form-edit.vue_vue_type_script_setup_true_lang-C1gD8QA7.js} (90%) rename server/public/admin/assets/{oa-menu-form.vue_vue_type_script_setup_true_lang-C2q0xh_7.js => oa-menu-form.vue_vue_type_script_setup_true_lang-Q83w-rw5.js} (95%) rename server/public/admin/assets/{oa-phone-eYECQoAa.js => oa-phone-B0ULKH1t.js} (90%) rename server/public/admin/assets/{open_setting-BFq225PF.js => open_setting-D1RlwC9_.js} (92%) rename server/public/admin/assets/{order-B9Y8pnvT.js => order-CDWHSeln.js} (95%) rename server/public/admin/assets/{overflow-ZrGLDayF.js => overflow-Ci3stkaO.js} (88%) rename server/public/admin/assets/{paiban-DJYQeKqV.js => paiban-Bc3VVL2i.js} (93%) rename server/public/admin/assets/{patient-call-BHbRq_Qx.js => patient-call-BHMZetcO.js} (97%) rename server/public/admin/assets/{pay-BwE5i2u2.js => pay-BLpOyZOm.js} (85%) rename server/public/admin/assets/{pc-BUOIi683.js => pc-D-qPa0n5.js} (89%) rename server/public/admin/assets/{pc_details-CrmKRVOJ.js => pc_details-BaHiQDdh.js} (61%) rename server/public/admin/assets/{perm-XrsFgwn6.js => perm-D4RGC01-.js} (67%) rename server/public/admin/assets/{picker-bP9cmZy8.js => picker-DDyyE4Hw.js} (96%) rename server/public/admin/assets/{picker-DnoOFo57.js => picker-anRkbqwm.js} (94%) rename server/public/admin/assets/{picker.vue_vue_type_script_setup_true_lang-B2-wlvub.js => picker.vue_vue_type_script_setup_true_lang-BFk_axfX.js} (96%) rename server/public/admin/assets/{popover_input-CtpYBxSp.js => popover_input-DyVYA-y1.js} (89%) rename server/public/admin/assets/{post-_2UF5NOx.js => post-CK-j3tkD.js} (86%) create mode 100644 server/public/admin/assets/prescription-drawer-CcxeMqmL.js delete mode 100644 server/public/admin/assets/prescription-drawer-De30ZOLb.js delete mode 100644 server/public/admin/assets/prescription-drawer-DvCgNGAR.css create mode 100644 server/public/admin/assets/prescription-drawer-uMED861l.css rename server/public/admin/assets/{preview-BVBwBsJT.js => preview-B1X2NYga.js} (64%) rename server/public/admin/assets/{preview-pc-DIR45YxH.js => preview-pc-L-RTAzIZ.js} (60%) rename server/public/admin/assets/{protocol-DUXaXMte.js => protocol-CLHFDJPp.js} (84%) rename server/public/admin/assets/{recharge_record-Bb-oGaNW.js => recharge_record-BK8EkgRC.js} (90%) rename server/public/admin/assets/{refund-log-71ypO5hs.js => refund-log-BIrx2PQQ.js} (81%) rename server/public/admin/assets/{refund-log.vue_vue_type_script_setup_true_lang-DTLqbvkn.js => refund-log.vue_vue_type_script_setup_true_lang-DrcJQVCA.js} (92%) rename server/public/admin/assets/{refund_record-DhJ_jfof.js => refund_record-Bf_ARQR1.js} (92%) rename server/public/admin/assets/{relations-add-5udQcZ2C.js => relations-add-Cd9BuBFN.js} (74%) rename server/public/admin/assets/{relations-add.vue_vue_type_script_setup_true_lang-DYXB2MAX.js => relations-add.vue_vue_type_script_setup_true_lang-BMHAeIjc.js} (91%) rename server/public/admin/assets/{rich_text-CuANvB7M.js => rich_text-aTtv769P.js} (77%) rename server/public/admin/assets/{role-BUivZ6pi.js => role-BmH2pKEX.js} (83%) rename server/public/admin/assets/{roster-DZSwCv8_.js => roster-DeZgJfhX.js} (98%) rename server/public/admin/assets/{setting-zpMdApNs.js => setting-8-etgdVX.js} (92%) rename server/public/admin/assets/{setup-Dr7rMptP.js => setup-DU33g8i4.js} (79%) rename server/public/admin/assets/{statistics-vwde5SXl.js => statistics-C7KPj8n_.js} (88%) rename server/public/admin/assets/{style-BttLBeyr.js => style-CjSUCqt_.js} (81%) rename server/public/admin/assets/{tabbar-Y55zDHfh.js => tabbar-lvtHcfth.js} (76%) rename server/public/admin/assets/{tcm-9dTydv5E.js => tcm-DsWVWJMK.js} (68%) rename server/public/admin/assets/{theme-picker-YEf3h7Wa.js => theme-picker-CINw_tws.js} (87%) create mode 100644 server/public/admin/assets/tongji-BUK_wxgU.js delete mode 100644 server/public/admin/assets/tongji-BnIC7erq.js delete mode 100644 server/public/admin/assets/tongji-iDv5_-U9.css create mode 100644 server/public/admin/assets/tongji-qftPQn42.css rename server/public/admin/assets/{tuikit-atomicx-vue3-BHPlbt3H.js => tuikit-atomicx-vue3-CZgu16-k.js} (83%) rename server/public/admin/assets/{upload-Coqe2kod.js => upload-0S8RSc05.js} (90%) rename server/public/admin/assets/{useDictOptions-GtFLBTkE.js => useDictOptions-ilx0zkz5.js} (84%) rename server/public/admin/assets/{useMenuOa-CtbnwA1M.js => useMenuOa-DYdcrRvC.js} (92%) rename server/public/admin/assets/{user-BRB-k5Ky.js => user-cKwDU8-p.js} (82%) rename server/public/admin/assets/{weapp-MCvt4kBr.js => weapp-IWwwkHEl.js} (91%) rename server/public/admin/assets/{weapp-CeP6qMK3.js => weapp-KeXW0u7y.js} (68%) rename server/public/admin/assets/{website-CbFpGD4c.js => website-DOSEHUum.js} (91%) rename server/public/admin/assets/{wx_oa-DY7zAxJ4.js => wx_oa-x62xb7vn.js} (93%) create mode 100644 server/public/cacert.pem delete mode 100644 server/public/uploads/index.html diff --git a/TUICallKit-Vue3/App.vue b/TUICallKit-Vue3/App.vue index 73f8e7e9..c58b9fcc 100644 --- a/TUICallKit-Vue3/App.vue +++ b/TUICallKit-Vue3/App.vue @@ -15,7 +15,6 @@ const globalData = { let avatarUrl = ref(""); // 声明为响应式变量 uni.CallManager = new CallManager(); onLaunch(() => { - uni.login({ provider: 'weixin', success: function (loginRes) { diff --git a/TUICallKit-Vue3/TUIKit/pages/chat/chat.vue b/TUICallKit-Vue3/TUIKit/pages/chat/chat.vue index f94a6da7..5d510e11 100644 --- a/TUICallKit-Vue3/TUIKit/pages/chat/chat.vue +++ b/TUICallKit-Vue3/TUIKit/pages/chat/chat.vue @@ -241,6 +241,8 @@ import groupPlugin from '@tencentcloud/lite-chat/plugins/group'; import * as GenerateTestUserSig from "@/debug/GenerateTestUserSig-es.js"; import { TUICallKitAPI } from '@/TUICallKit/src/TUICallService/index'; +import { TUIStore } from '@/TUICallKit/src/TUICallService/CallService/index'; +import { StoreName, NAME, CallStatus } from '@/TUICallKit/src/TUICallService/const/index'; // CallManager 在 App.vue 已挂载到 uni.CallManager,勿在此重复 new,否则会丢失通话状态 const { proxy } = getCurrentInstance() const messages = ref([]); @@ -271,6 +273,10 @@ const { proxy } = getCurrentInstance() let targetUserID = ''; let currentUserID = ''; // 当前登录用户ID let scrollTimer = null; // 滚动定时器 + /** 微信小程序:从系统后台回前台时刷新 IM/TUICall,避免无法接通视频 */ + let unsubscribeWxAppShow = null; + let allowChatForegroundRelogin = false; + let foregroundReloginTimer = null; const CONFIRMATION_MESSAGE = `我已确认以下信息: 1、本人确认已在线下确诊; @@ -730,6 +736,22 @@ const { proxy } = getCurrentInstance() uni.$on('TUICall:callEnd', onVideoCallEnd); //uni.showToast({ title: '聊天已就绪', icon: 'success' }); + // #ifdef MP-WEIXIN + // 系统级前后台切换时页面 onShow 不一定等价于「回前台」,用 wx.onAppShow 刷新音视频信令链路 + if (typeof wx !== 'undefined' && wx.onAppShow) { + unsubscribeWxAppShow = wx.onAppShow(() => { + if (!allowChatForegroundRelogin) return; + const pages = getCurrentPages(); + const top = pages[pages.length - 1]; + if (!(top?.route || '').includes('pages/chat/chat')) return; + reloginAfterMiniProgramForeground(); + }); + } + setTimeout(() => { + allowChatForegroundRelogin = true; + }, 800); + // #endif + // 监听键盘高度变化 uni.onKeyboardHeightChange((res) => { keyboardHeight.value = res.height; @@ -765,6 +787,17 @@ const { proxy } = getCurrentInstance() }); onUnload(() => { + allowChatForegroundRelogin = false; + // #ifdef MP-WEIXIN + if (typeof unsubscribeWxAppShow === 'function') { + unsubscribeWxAppShow(); + unsubscribeWxAppShow = null; + } + // #endif + if (foregroundReloginTimer) { + clearTimeout(foregroundReloginTimer); + foregroundReloginTimer = null; + } uni.$off('TUICall:callStart', onVideoCallStart); uni.$off('TUICall:callEnd', onVideoCallEnd); stopDoctorWaitTimer(); @@ -1039,6 +1072,26 @@ const { proxy } = getCurrentInstance() chat.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, onMessageReceived); await initTUICallKitWithTim(chat); } + + /** 小程序切后台再回前台:拉取新 UserSig 并重登 IM、重绑 TUICallEngine(与发消息失败时的 relogin 一致) */ + async function reloginAfterMiniProgramForeground() { + if (!chat || !currentUserID) return; + if (foregroundReloginTimer) clearTimeout(foregroundReloginTimer); + foregroundReloginTimer = setTimeout(async () => { + foregroundReloginTimer = null; + // reloginIMChat 会先 IM logout 再 initTUICallKit;若非 IDLE,destroyed 会失败且 IM 已断开,故仅 IDLE 时刷新 + try { + const status = TUIStore?.getData?.(StoreName.CALL, NAME.CALL_STATUS); + if (status != null && status !== CallStatus.IDLE) { + console.warn('前台恢复: 通话未结束,跳过 IM/TUICall 重绑'); + return; + } + await reloginIMChat(); + } catch (e) { + console.warn('前台恢复后 IM/TUICall 刷新失败:', e); + } + }, 400); + } async function sendTextMessage() { if (!inputText.value.trim()) return; @@ -1353,7 +1406,7 @@ const { proxy } = getCurrentInstance() hideDoctorCardByCall(); } - function onVideoCallEnd() { + async function onVideoCallEnd() { hideDoctorCardByCall(); uni.showToast({ title: '视频通话已结束', icon: 'success' }); } diff --git a/admin/src/api/tcm.ts b/admin/src/api/tcm.ts index 9e6de6e7..bdd7d088 100644 --- a/admin/src/api/tcm.ts +++ b/admin/src/api/tcm.ts @@ -50,6 +50,10 @@ export function tcmDiagnosisAssign(params: any) { return request.post({ url: '/tcm.diagnosis/assign', params }) } +export function tcmDiagnosisAssignLogList(params: { id: number }) { + return request.get({ url: '/tcm.diagnosis/assignLogList', params }) +} + // 获取医助列表 export function getAssistants() { return request.get({ url: '/tcm.diagnosis/getAssistants' }) @@ -224,6 +228,11 @@ export function prescriptionVoid(params: { id: number }) { return request.post({ url: '/tcm.prescription/void', params }) } +/** 处方审核:action approve | reject(驳回同时作废处方) */ +export function prescriptionAudit(params: { id: number; action: 'approve' | 'reject'; remark?: string }) { + return request.post({ url: '/tcm.prescription/audit', params }) +} + // ========== 处方库 ========== // 处方库列表 diff --git a/admin/src/components/chat-dialog/ChatMessageItem.vue b/admin/src/components/chat-dialog/ChatMessageItem.vue new file mode 100644 index 00000000..ac44d342 --- /dev/null +++ b/admin/src/components/chat-dialog/ChatMessageItem.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/admin/src/components/chat-dialog/index.vue b/admin/src/components/chat-dialog/index.vue index 2b0ba0fe..0ee0a4dd 100644 --- a/admin/src/components/chat-dialog/index.vue +++ b/admin/src/components/chat-dialog/index.vue @@ -4,18 +4,34 @@ v-show="visible" ref="chatWindowRef" class="chat-floating-window" + :class="{ 'chat-floating-window--minimized': isMinimized }" :style="windowStyle" >
- 与 {{ patientName }} 聊天 - - - + 与 {{ patientName }} 聊天 +
+ + + + + + + 缩小 + + + + + + 展开 + + + +
-
+
{{ loadingText }} @@ -28,7 +44,7 @@
- + + + + + + + + + + + + +