From 079e50006da6a1dc1098c9e910643c6c5685ff57 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 6 Aug 2026 10:57:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/api/first_visit.ts | 84 +- .../views/first_visit/conversion/index.vue | 9 +- .../my_patients/components/OrderPanel.vue | 16 +- .../first_visit/wecom_promotion/index.vue | 718 ++++++++++++++---- admin/tsconfig.tsbuildinfo | 2 +- .../firstvisit/WecomPromotionController.php | 111 ++- .../lists/firstvisit/MyPatientOrderLists.php | 17 +- .../firstvisit/FirstVisitConversionLogic.php | 9 +- .../FirstVisitDoctorDashboardLogic.php | 4 +- .../WecomAcquisitionCustomerLogic.php | 156 ++++ .../logic/firstvisit/WecomPromotionLogic.php | 561 +++++++++++--- .../adminapi/logic/stats/ConversionLogic.php | 6 +- .../logic/stats/DoctorDailyStatsLogic.php | 2 +- .../adminapi/logic/stats/YejiStatsLogic.php | 12 + .../QywxExternalContactCallbackController.php | 21 +- .../QywxPromotionPublicController.php | 46 +- server/app/api/route/app.php | 4 +- .../QywxRetryCustomerAcquisitionEvents.php | 34 + .../QywxCustomerAcquisitionApiService.php | 249 ++++++ ...QywxCustomerAcquisitionCustomerService.php | 428 +++++++++++ .../QywxCustomerAcquisitionLinkService.php | 42 + .../qywx/QywxPromotionRedirectService.php | 12 +- server/config/console.php | 2 + server/config/qywx_customer_acquisition.php | 20 + server/docs/qywx_promotion.md | 55 +- .../{.pnpm-CJoARskO.js => .pnpm-BadRMC3e.js} | 2 +- .../{403-CJQqqpQf.js => 403-BO38Hcmq.js} | 2 +- .../{404-RUybHbR2.js => 404-K-jkMp_g.js} | 2 +- ...CdTEhu7V.js => call-engine-js-DFqo23EQ.js} | 2 +- .../{chat-CrjClXJK.js => chat-C6eYQUo-.js} | 2 +- ...LDsqG.js => chat-uikit-engine-TY6XO9dW.js} | 2 +- ....js => AppointmentRecordPanel-B9Nz73xJ.js} | 2 +- ...C3j1dd3l.js => AssignLogPanel-CuOtAPIs.js} | 2 +- ...s => AssistantWatchCallDialog-CmfBwKdN.js} | 2 +- ...0YE6xkU.js => BloodRecordList-0iEXPrf6.js} | 2 +- ...lQsXwr4.js => CallRecordPanel-D6KCBWP2.js} | 2 +- ...D2s7UFGp.js => CaseRecordList-B1zlt73W.js} | 2 +- ...ix-BUdiASbV.js => DailyMatrix-HwuqJUur.js} | 2 +- ...LnXaX.js => DiagnosisTodoList-NjTpgjTU.js} | 2 +- ...BsVtIq_I.js => DietRecordList-CqZxRaJ4.js} | 2 +- ...WpH5.js => ExerciseRecordList-BvOfqWiP.js} | 2 +- ...ancaoSubmissionReconcileButton-fN_nCFoE.js | 1 + ...ancaoSubmissionReconcileButton-ugRDYCgb.js | 1 - ...e_type_script_setup_true_lang-LIiWe8wu.js} | 2 +- ...Yw183.js => ImChatRecordPanel-CxBgOjX5.js} | 2 +- ...0JHdy.js => MediaSourceSelect-Ce8Yqir9.js} | 2 +- ...e_type_script_setup_true_lang-CWbovTuC.js} | 2 +- ...-CMkfv_eo.js => MessageBubble-C6QTCM2w.js} | 2 +- ...e-BYMN03c5.js => NoteTimeline-DtLw_8ng.js} | 2 +- ...5CG69lE.js => OrderActionHost-CybqU_Ht.js} | 2 +- .../admin/assets/OrderPanel-B7lsGnMg.js | 1 - .../admin/assets/OrderPanel-CU62QZ1F.js | 1 + .../admin/assets/OrderPanel-D388bBXd.css | 1 - .../admin/assets/OrderPanel-DGauxOwy.css | 1 + ...dTWpuxk.js => PatientCaseCard-D4O_HF73.js} | 2 +- ...-olqqX_.js => PatientInfoCard-CsI9iQp2.js} | 2 +- ...yQBqmV.js => PatientOrderList-DZvWD3Q_.js} | 2 +- ...PrescriptionOrderDetailDrawer-Ooi-LGtp.js} | 2 +- ...-kZpKFcV6.js => ProgressPanel-C31A60in.js} | 2 +- ....js => RecordingPlaybackBlock-W5bdjS_P.js} | 2 +- ...u1.js => RecordingVideoPlayer-ActCwTef.js} | 4 +- ...anel-nETbLlZo.js => SendPanel-CVtA92Gg.js} | 2 +- ...uhA2vse3.js => TrackingMatrix-BlAGYt7g.js} | 2 +- ...0j.js => TrackingNoteTimeline-Blav0Fge.js} | 2 +- .../admin/assets/account-adjust-BFqVwWDz.js | 1 - .../admin/assets/account-adjust-ueC9xLxv.js | 1 + ...e_type_script_setup_true_lang-UMSPjaUQ.js} | 2 +- ...t-ruRugF1E.js => account_cost-CSJwgJs9.js} | 2 +- .../{add-CLw5B07w.js => add-DZXGQ6KK.js} | 2 +- .../public/admin/assets/add-nav-CC8aPw3O.js | 1 + .../public/admin/assets/add-nav-CpGufPtX.js | 1 - ...e_type_script_setup_true_lang-D3OZX8cR.js} | 2 +- .../{admin-Dx8JIIIg.js => admin-CWK5kAG4.js} | 2 +- ...nt-BcQSmD46.js => appointment-BDzAv3Pw.js} | 2 +- ...rticle-DfNLL0Dd.js => article-DHOuLFy5.js} | 2 +- .../{asset-C29uTWNM.js => asset-Cvh1U-8l.js} | 2 +- server/public/admin/assets/attr--JAopRM3.js | 1 - server/public/admin/assets/attr-5e3NuWTq.js | 1 - server/public/admin/assets/attr-BTe3Ude5.js | 1 + server/public/admin/assets/attr-Bt4Dp5gf.js | 1 + server/public/admin/assets/attr-BvPSviuw.js | 1 - server/public/admin/assets/attr-C7u3zghd.js | 1 - server/public/admin/assets/attr-CH-5muNK.js | 1 + server/public/admin/assets/attr-COrCaDqe.js | 1 - .../{attr-B_5ee6kQ.js => attr-CSkG8GSj.js} | 2 +- .../{attr-Cz_-CGg8.js => attr-CaS4-vjx.js} | 2 +- server/public/admin/assets/attr-Cg46awUw.js | 1 - server/public/admin/assets/attr-CiTmp4L4.js | 1 + server/public/admin/assets/attr-CqesTH-L.js | 1 + server/public/admin/assets/attr-D2GjZzGW.js | 1 - server/public/admin/assets/attr-DK2MSZKg.js | 1 - server/public/admin/assets/attr-DQ7f_S-8.js | 1 + server/public/admin/assets/attr-DxDM15G5.js | 1 - server/public/admin/assets/attr-DzLBuTNI.js | 1 + server/public/admin/assets/attr-XK6fv2F2.js | 1 - server/public/admin/assets/attr-ZlEa-swb.js | 1 + server/public/admin/assets/attr-qi7IpYEB.js | 1 + server/public/admin/assets/attr-sIse0Y9c.js | 1 + .../admin/assets/attr-setting-Ce1ykgas.js | 1 - .../admin/assets/attr-setting-CxDtFImS.js | 1 + ...e_type_script_setup_true_lang-_vdeZ3_G.js} | 2 +- ...e_type_script_setup_true_lang-BZOVOw6C.js} | 2 +- ...e_type_script_setup_true_lang-B_X-6joR.js} | 2 +- ...e_type_script_setup_true_lang-B_eBI6xm.js} | 2 +- ...e_type_script_setup_true_lang-C3rhWyvi.js} | 2 +- ...e_type_script_setup_true_lang-CETYhEN2.js} | 2 +- ...e_type_script_setup_true_lang-CR3MAcLK.js} | 2 +- ...e_type_script_setup_true_lang-CZpwv8m7.js} | 2 +- ...e_type_script_setup_true_lang-Ck9fwFyC.js} | 2 +- ...e_type_script_setup_true_lang-DU_nXh8M.js} | 2 +- ...e_type_script_setup_true_lang-XYrW2c3f.js} | 2 +- server/public/admin/assets/auth-BGDXIY0q.js | 1 - server/public/admin/assets/auth-htFYIgFq.js | 1 + ...e_type_script_setup_true_lang-gZXLDDfP.js} | 2 +- ...hLWUALs.js => balance_details-tsKf3yDs.js} | 2 +- ...QcxxCM.js => bind-work-wechat-DTbhAiDh.js} | 2 +- .../{cache-CQODi2sl.js => cache-DYMdALFE.js} | 2 +- ...hZzLxWL.js => change-password-CQOogv2N.js} | 2 +- .../{code-UG1DxRDr.js => code-CLmYMSFp.js} | 2 +- .../admin/assets/code-preview-BnWt__uk.js | 1 - .../admin/assets/code-preview-DBLmflzG.js | 1 + ...e_type_script_setup_true_lang-WFCEXLkg.js} | 2 +- ...i.js => commission-settlement-D37eqnPm.js} | 2 +- ...{config-BNWFe0PX.js => config-Dz1B211u.js} | 2 +- ...sumer-B68tuDoj.js => consumer-CizaIFhC.js} | 2 +- .../public/admin/assets/content-BKXs3H1I.js | 1 + .../public/admin/assets/content-BMc9ocvM.js | 1 - .../public/admin/assets/content-BSA-9TuL.js | 1 + .../public/admin/assets/content-Bb4fUglk.js | 1 + .../public/admin/assets/content-BoXnqfCB.js | 1 - ...ontent-CobUYz5t.js => content-BrPzGkcF.js} | 2 +- .../public/admin/assets/content-C2vy62ef.js | 1 - ...ontent-BNnMMGWZ.js => content-CLYr3Xvj.js} | 2 +- .../public/admin/assets/content-CR4nROqA.js | 1 - ...ontent-D9LroEig.js => content-CVm2jRFT.js} | 2 +- ...ontent-BWlqOjJD.js => content-CYOEh4RL.js} | 2 +- ...ontent-B-B36d3B.js => content-D87zRUIO.js} | 2 +- ...ontent-Cr2e03eq.js => content-DIMJxn9q.js} | 2 +- ...ontent-BpsV3Yt7.js => content-DdIAx6E1.js} | 2 +- .../public/admin/assets/content-DypemqH1.js | 1 + .../public/admin/assets/content-M_brQuto.js | 1 + .../public/admin/assets/content-_u2fBNk6.js | 1 + .../public/admin/assets/content-aNEmqiLB.js | 1 - .../public/admin/assets/content-pO0I5PKE.js | 1 - ...e_type_script_setup_true_lang-BUyFKrza.js} | 2 +- ...e_type_script_setup_true_lang-C8DdB-3S.js} | 2 +- ...e_type_script_setup_true_lang-D07ajdkx.js} | 2 +- ...e_type_script_setup_true_lang-DTQ6DjhZ.js} | 2 +- ...e_type_script_setup_true_lang-DrPQyt1L.js} | 2 +- .../public/admin/assets/cost-edit-DmtTpZMF.js | 1 + .../public/admin/assets/cost-edit-RNaqgVgQ.js | 1 - ...e_type_script_setup_true_lang-Sedw8aio.js} | 2 +- .../admin/assets/data-table-DistU6Kr.js | 1 + .../admin/assets/data-table-VFuKkKTm.js | 1 - ...e_type_script_setup_true_lang-JN0eAlZK.js} | 2 +- .../{dayjs-HJJmW-S4.js => dayjs-Dr2Em-pV.js} | 2 +- ...ion-BlMAHrYB.js => decoration-0oah8UE6.js} | 2 +- ...CPRGZ5aq.js => decoration-img-B0LkMFfS.js} | 2 +- ...-DVqL0DDw.js => default_reply-DzOJoIa2.js} | 2 +- ...ent-BqJEXUDT.js => department-BV5thVv_.js} | 2 +- ...ji-2Au33FtJ.js => dept-tongji-DRYCxRDn.js} | 2 +- ...{detail-DVUz0IY8.js => detail-BbPEk4oY.js} | 2 +- ...{detail-BJCfEyAY.js => detail-BhBAugZq.js} | 2 +- .../{dict-CLVB2ofZ.js => dict-Bkt3kigV.js} | 2 +- ...{doctor-htXSGAHr.js => doctor-DpsaODfP.js} | 2 +- .../{edit-DOIRXGVL.js => edit-B6sVFSO0.js} | 2 +- server/public/admin/assets/edit-BOz-_eIK.js | 1 - .../{edit-BLjggR7f.js => edit-BUY4nuSs.js} | 2 +- server/public/admin/assets/edit-Bbibmq_9.js | 1 + server/public/admin/assets/edit-Bge6oLmU.js | 1 - server/public/admin/assets/edit-BnkTNtIw.js | 1 + .../{edit-Bm9ww5Lo.js => edit-C-RhpfoE.js} | 2 +- server/public/admin/assets/edit-C2FQBShJ.js | 1 + server/public/admin/assets/edit-CDzDJ0sU.js | 1 + .../{edit-BNO1Id5O.js => edit-CV2QVuks.js} | 2 +- .../{edit-Q7o21Gu0.js => edit-CWgufoaK.js} | 2 +- server/public/admin/assets/edit-CcF8waMq.js | 1 + server/public/admin/assets/edit-ChdEc1nS.js | 1 - server/public/admin/assets/edit-CliwpAKM.js | 1 - .../{edit-DjvVvzxj.js => edit-DCfr5oGz.js} | 2 +- server/public/admin/assets/edit-DJKLNr6v.js | 1 - .../{edit-Bp71eyD0.js => edit-DOv7YvQO.js} | 2 +- server/public/admin/assets/edit-DP4pC6dN.js | 1 - .../{edit-2LynddIK.js => edit-DPa0p94T.js} | 2 +- server/public/admin/assets/edit-DYtw3xla.js | 1 - server/public/admin/assets/edit-DZkp38OM.js | 1 + .../{edit-BWgggNYE.js => edit-DZyrwdX2.js} | 2 +- server/public/admin/assets/edit-DaH1MKxa.js | 1 + server/public/admin/assets/edit-DwyGOo1w.js | 1 + server/public/admin/assets/edit-DxLZlhpt.js | 1 - server/public/admin/assets/edit-FE5Yiazn.js | 1 - server/public/admin/assets/edit-FuNcspvI.js | 1 + server/public/admin/assets/edit-U6tuCedw.js | 1 + server/public/admin/assets/edit-jue2EUe-.js | 1 - server/public/admin/assets/edit-mk8dkLiI.js | 1 - server/public/admin/assets/edit-uZApmkPg.js | 1 + ...e_type_script_setup_true_lang-BrbzahBo.js} | 2 +- ...e_type_script_setup_true_lang-C3WdWCyR.js} | 2 +- ...e_type_script_setup_true_lang-CZGVjdFg.js} | 2 +- ...e_type_script_setup_true_lang-D-P3uHxR.js} | 2 +- ...e_type_script_setup_true_lang-D6Q-6YLq.js} | 2 +- ...e_type_script_setup_true_lang-DllswV0U.js} | 2 +- ...e_type_script_setup_true_lang-DsaOmIfe.js} | 2 +- ...e_type_script_setup_true_lang-KX7QzRLl.js} | 2 +- ...e_type_script_setup_true_lang-X717NiIB.js} | 2 +- ...e_type_script_setup_true_lang-sS83YgIZ.js} | 2 +- ...e_name_articleColumnEdit_lang-C1veEZuS.js} | 2 +- ...nt-aHKz90ZP.js => environment-DDXhE8Sz.js} | 2 +- .../{error-C_WBAqz-.js => error-DNemHh_Y.js} | 2 +- .../{fans-puY-LupI.js => fans-BXH31mGf.js} | 2 +- .../{file-Dg-5v8cj.js => file-BfbRb1wZ.js} | 2 +- .../{file-BeSvV4hj.js => file-DsgRDekF.js} | 2 +- ...{filing-DGifF5iI.js => filing-CdeiXA1f.js} | 2 +- ...inance-aeayAZ7g.js => finance-BfXmLxJQ.js} | 2 +- .../admin/assets/first_visit-CR3YrUl5.js | 1 - .../admin/assets/first_visit-gXLj_1UM.js | 1 + ...y-CHmj69Q3.js => follow_reply-D6KvV9CD.js} | 2 +- ...e_type_script_setup_true_lang-CCCJtBtz.js} | 2 +- .../admin/assets/getExposeType-CWAjpevD.js | 1 + .../admin/assets/getExposeType-DJHJf2-C.js | 1 - ...{guahao-Bwf2pyhq.js => guahao-BYrVmmNz.js} | 2 +- .../assets/{h5-DB3cro00.js => h5-CBNljwcW.js} | 2 +- .../assets/{h5-DLuCXrzT.js => h5-D4D-jQQb.js} | 2 +- .../{icon-CjPsV4fv.js => icon-e3vKDudu.js} | 2 +- ... => im-business-message-parse-DoOLrDi4.js} | 2 +- .../{index-CpjF0HgU.js => index-2bLCfTRE.js} | 4 +- .../{index-DF5HTs0Y.js => index-5TmaMR02.js} | 2 +- .../{index-BQhM24P6.js => index-6SMGEHwP.js} | 2 +- .../{index-kKoe5bi4.js => index-A4a0LiMP.js} | 2 +- .../{index-DVPhupGr.js => index-AjwJTgsH.js} | 2 +- server/public/admin/assets/index-BA90KXLS.css | 1 + .../{index-DeJ9uby8.js => index-BGckjafR.js} | 2 +- .../{index-DqNQ7gKq.js => index-BLlfEUTL.js} | 2 +- .../{index-CfDlwT2y.js => index-BNYVM0wQ.js} | 2 +- .../{index-pAoMWPEi.js => index-BPdhodTi.js} | 6 +- server/public/admin/assets/index-BS1HfYb9.css | 1 - .../{index-DOlUrQY9.js => index-BTPkHWgf.js} | 4 +- .../{index-CEgafCld.js => index-BZRpIq1o.js} | 2 +- .../{index-BF5upMih.js => index-BdymNFYl.js} | 2 +- .../{index-DjVEBiwK.js => index-BoArz6Am.js} | 2 +- .../{index-DPTA43cr.js => index-BpFrgymC.js} | 2 +- .../{index-C1rt2efZ.js => index-BpoQfAzJ.js} | 2 +- .../{index-DuiNazZf.js => index-BvNrMdi2.js} | 4 +- .../{index-DyygwEaV.js => index-BvfnP6Ij.js} | 2 +- server/public/admin/assets/index-Bx9MraCI.js | 1 - .../{index-Bzjo5NhU.js => index-C-ImygGV.js} | 2 +- .../{index-XB57w_Bh.js => index-CIbGsXW2.js} | 2 +- .../{index-0im0Afgh.js => index-CKJths3X.js} | 2 +- .../{index-CbZl4M7O.js => index-CRHhozQt.js} | 2 +- .../{index-DOzKdc-2.js => index-CTA27ScJ.js} | 2 +- .../{index-CSs5pIQ9.js => index-CbxiEXmO.js} | 2 +- server/public/admin/assets/index-CkW0jPgD.js | 1 + .../{index-DtPx_s2e.js => index-CtonjL9b.js} | 2 +- .../{index-BMCqAfx2.js => index-CzUCAsRe.js} | 2 +- .../{index-CCIYRCQK.js => index-D1_EsVza.js} | 2 +- .../{index-BiRrjMB3.js => index-D4xgBI3i.js} | 2 +- .../{index-kAN25EgC.js => index-DC5ozazT.js} | 2 +- server/public/admin/assets/index-DCmYS1w6.css | 1 - .../{index-BHJsdjLt.js => index-DEzN457R.js} | 2 +- .../{index-B_UIsrKZ.js => index-DF1xYfC8.js} | 2 +- .../{index-BJmMHEYT.js => index-DG2_EQKT.js} | 2 +- .../{index-AWsHUhuJ.js => index-DIOXlzAH.js} | 2 +- server/public/admin/assets/index-DKk_-CYN.js | 3 + .../{index-D0Lm15RC.js => index-DNEYsr8a.js} | 4 +- .../{index-pOzDs5Ek.js => index-DP_2jise.js} | 2 +- .../{index-QIAECMPl.js => index-DRYmlJEW.js} | 2 +- .../{index-Dkq210NI.js => index-DTy5bvh3.js} | 2 +- .../{index-DaExJbbG.js => index-DVUXgc9X.js} | 2 +- .../{index-BbRXnnPV.js => index-D_0EVJEx.js} | 2 +- .../{index-DNTJxKLO.js => index-Dbjk5Xrj.js} | 2 +- .../{index-k3oPIR0H.js => index-Dd_hUJ5C.js} | 2 +- server/public/admin/assets/index-DkrzCwgm.js | 1 - .../{index-vwMTrNXz.js => index-Do7fAtr3.js} | 4 +- .../{index-BXqadihb.js => index-Dp_d9hDy.js} | 4 +- .../{index-Dfv4XWWY.js => index-Dq47Nj-z.js} | 2 +- .../{index-CUNzAym1.js => index-DsaRlYT2.js} | 2 +- server/public/admin/assets/index-Dwih6JqK.css | 1 + .../{index-DmCL_BRd.js => index-Dy4Bn4m3.js} | 2 +- .../{index-d8aPggOs.js => index-DyLyEbja.js} | 2 +- .../{index-Do-cFro_.js => index-H0J7MmTd.js} | 2 +- .../{index-BNczEIn4.js => index-Q24oG8C1.js} | 2 +- .../{index-yXUxbsK7.js => index-T4NTfW9v.js} | 2 +- .../{index-CvWXUesg.js => index-VEyOoZ0z.js} | 2 +- .../{index-DRGZ_eW0.js => index-e-vlke2B.js} | 4 +- .../{index-CkLc7foa.js => index-hbr3K8qJ.js} | 2 +- .../{index-DGRqux-9.js => index-jn7AqtXG.js} | 2 +- .../{index-D5Jc-H2r.js => index-tq0qQpEX.js} | 2 +- ...e_type_script_setup_true_lang-BZQ0jmei.js} | 2 +- ...e_type_script_setup_true_lang-BhTBtKLt.js} | 2 +- ...e_type_script_setup_true_lang-CL1DOFtW.js} | 2 +- ...e_type_script_setup_true_lang-DIUUHLou.js} | 2 +- ...e_type_script_setup_true_lang-QSNac8Ky.js} | 2 +- ...e_vue_type_style_index_0_lang-DBiOExXq.js} | 2 +- ...ex_h5-Ho89j9qD.js => index_h5-D4KajoBy.js} | 4 +- ...on-CVaGzPK_.js => information-DXx6EEkW.js} | 2 +- ...ournal--sjozm7W.js => journal-CwpKK-he.js} | 2 +- ...-FDpVWTzl.js => keyword_reply-BgbNmBpn.js} | 2 +- .../{link-B81UBe09.js => link-4wYrEoTg.js} | 2 +- .../{list-BoHchEYn.js => list-6eJIrxpY.js} | 4 +- .../{list-Dajvp8QT.js => list-C1Aoj7T1.js} | 2 +- ...ist_h5-Bsp221S9.js => list_h5-B2bCJmXP.js} | 4 +- .../{login-BXIHroXn.js => login-DijFGH_w.js} | 2 +- ...D_UFOcgV.js => login_register-zg4qg3uW.js} | 2 +- ...icine-CBY86QwP.js => medicine-CJhU79GG.js} | 2 +- ...icine-DY96Irod.js => medicine-DWFWaQZr.js} | 2 +- .../{menu-DeKGRJeu.js => menu-BFHAmkr7.js} | 2 +- .../{menu-IDxrpo4T.js => menu-Blkq1YLw.js} | 2 +- .../{menu-CWZaMyiH.js => menu-rbHpfaNe.js} | 2 +- .../public/admin/assets/menu-set-D0e7AIfw.js | 1 + .../public/admin/assets/menu-set-utX8-9qB.js | 1 - ...e_type_script_setup_true_lang-KCrGFDT0.js} | 2 +- ...essage-Cjkjxje_.js => message-ll07W0Rg.js} | 2 +- .../admin/assets/mobile-style-C5NbpFVF.js | 1 + .../admin/assets/mobile-style-C8-CuEfo.js | 1 - ...e_type_script_setup_true_lang-Dyyn3P2a.js} | 2 +- ...{mubiao-CziH_Dq1.js => mubiao-C8VCibkT.js} | 2 +- ...z5FHYB.js => mubiao-dept-card-CufvWIcd.js} | 2 +- ...b2RQvo.js => mubiao-dept-node-_1UCXiHt.js} | 2 +- ...a-attr-slvv9nrZ.js => oa-attr-C3-Wcl5A.js} | 2 +- .../admin/assets/oa-menu-form-DJrd9EPt.js | 1 + .../admin/assets/oa-menu-form-DiDsgnjn.js | 1 - .../assets/oa-menu-form-edit-B4vkwgvF.js | 1 - .../assets/oa-menu-form-edit-CGTB-nDr.js | 1 + ...e_type_script_setup_true_lang-BCJ0xcAe.js} | 2 +- ...e_type_script_setup_true_lang-BiQ5Tx4S.js} | 2 +- ...phone-BpcOZx7X.js => oa-phone-CtbFiRqE.js} | 2 +- ...g-D-neyqXt.js => open_setting-yvLFjXhN.js} | 2 +- .../{order-dJNw2NOS.js => order-D0gQz8L7.js} | 2 +- ...ist-ywNlV6uR.js => order_list-BjdCjrhS.js} | 4 +- ...-Dm5kmLjH.js => order_list_h5-DRjLLTLw.js} | 4 +- ...rflow-xvFSiEuk.js => overflow-Bxb5MUPA.js} | 2 +- ...{paiban-ByGzchtb.js => paiban-wv8n9WXL.js} | 2 +- ...atient-CS5NmE93.js => patient-Ch_UV86r.js} | 2 +- ...l-bREQXkN8.js => patient-call-viVyQjhI.js} | 2 +- .../{pay-m7RGSHX4.js => pay-Cyq4d4Gt.js} | 2 +- .../assets/{pc-BE39GDze.js => pc-DvrgZFPD.js} | 2 +- .../admin/assets/pc_details-Bkxl9s46.js | 1 - .../admin/assets/pc_details-SJ_8PwZ5.js | 1 + .../{perm-DNF01X-C.js => perm-DsEdVTDW.js} | 2 +- ...{picker-BtisB09w.js => picker-BTjkKuWn.js} | 2 +- ...{picker-_oSJRmY0.js => picker-CCYShZB-.js} | 2 +- ...e_type_script_setup_true_lang-CrnhHeAv.js} | 2 +- ...-DrkzbCwz.js => popover_input-Dctr-wRD.js} | 2 +- .../{post-CMFQc-kV.js => post-BhzMeoOl.js} | 2 +- ...XlD.js => prescription-drawer-DR8kJf_3.js} | 2 +- ...review-gfUSM4uC.js => preview-Cgcnbb8N.js} | 2 +- ...-pc-CfYfMQpf.js => preview-pc-mVGIxfyg.js} | 2 +- ...gress-CdWjsCG9.js => progress-CZ-gPvfc.js} | 2 +- ...tocol-CtdxYLYj.js => protocol-B0TbdCMn.js} | 2 +- .../{qywx-M2UUVZSL.js => qywx-ClvYIHrq.js} | 2 +- ...donly-Bv1_b0m2.js => readonly-_4oi3Leh.js} | 2 +- ...VBPJwzn.js => recharge_record-m47C7QQb.js} | 2 +- .../admin/assets/refund-log-DSfLjEbL.js | 1 + .../admin/assets/refund-log-w05_QVJs.js | 1 - ...e_type_script_setup_true_lang-BFQ8aEFb.js} | 2 +- ...-Dfko4h25.js => refund_record-C7wWj8w7.js} | 2 +- .../admin/assets/relations-add-BLJx5j3W.js | 1 + .../admin/assets/relations-add-D0zts60z.js | 1 - ...e_type_script_setup_true_lang-CWmstW34.js} | 2 +- ...text-CKRbpxy0.js => rich_text-dMEfV67Z.js} | 2 +- .../{role-CsixMFTg.js => role-uLKWDV2d.js} | 2 +- ...{roster-BIWTi81c.js => roster-CXf_JGt9.js} | 2 +- ...ect-DH51Zio_.js => rtc-detect-BahOTccE.js} | 2 +- ...yJgyLB.js => self_input_stats-Bqe53Spd.js} | 2 +- ...etting-JV-KMG6c.js => setting-CD1kGv_x.js} | 2 +- .../{setup-aOcE1PBr.js => setup-ByHqORVj.js} | 2 +- ...ics-Cdnmoa-6.js => statistics-6rXRzT91.js} | 2 +- .../{stats-ChxWF7cv.js => stats-Bv5uiH7P.js} | 2 +- .../{style-CnH8LuF9.js => style-BQKEwl42.js} | 2 +- ...{tabbar-CMaYws0P.js => tabbar-BOqpsnb0.js} | 2 +- .../{tcm-BBytqd3B.js => tcm-BDu8-eLA.js} | 2 +- ...r-DT4Ucyjj.js => theme-picker-BRwhEmiv.js} | 2 +- ...> tim-profanity-filter-plugin-DM0QTuQO.js} | 2 +- ...84ral.js => tim-upload-plugin-BUYgI52i.js} | 2 +- ...{tongji-B8B8RLKU.js => tongji-jONiKaTE.js} | 2 +- ...{upload-CPwRjp20.js => upload-Dwnz2Z8w.js} | 2 +- ...DzyuIpSA.js => useDictOptions-wq5puhZD.js} | 2 +- ...UzFn8.js => useListTimeFilter-BiBQquVM.js} | 2 +- ...ckFn-CCoJkZZt.js => useLockFn-q1SV9nuT.js} | 2 +- ...f.js => useMediaSourceOptions-ByztCjHF.js} | 2 +- ...nuOa-DUar-BHF.js => useMenuOa-CQopDBmB.js} | 2 +- ...ging-DKtm3XdH.js => usePaging-DMqUvFG-.js} | 2 +- .../{user-ChwTv-Rh.js => user-B6OMuuUC.js} | 2 +- .../{weapp-BlqOmU5l.js => weapp-0QzKWvKR.js} | 2 +- .../{weapp-DW2TbfPE.js => weapp-BJhVJMzf.js} | 2 +- ...ebsite-C07ff7gg.js => website-ClrkKLFi.js} | 2 +- .../{wx_oa-BKhVBZCv.js => wx_oa-XX2NYgn-.js} | 2 +- .../{yeji-C7o7REJ8.js => yeji-BZ4k2XdF.js} | 2 +- .../public/admin/assets/yeji-edit-Cw08tFhe.js | 1 + .../public/admin/assets/yeji-edit-D-uxtVth.js | 1 - ...e_type_script_setup_true_lang-BZL9OmXb.js} | 2 +- server/public/admin/index.html | 4 +- .../add_first_visit_wecom_promotion.sql | 21 +- .../upgrade_qywx_customer_acquisition_api.sql | 15 + ...de_qywx_customer_acquisition_customers.sql | 66 ++ .../FirstVisitEffectiveAmountFilterTest.php | 33 + .../QywxCustomerAcquisitionApiServiceTest.php | 97 +++ ...QywxCustomerAcquisitionRetryPolicyTest.php | 40 + ...AcquisitionCustomerStatisticsSmokeTest.php | 144 ++++ .../tests/WecomPromotionOverviewSmokeTest.php | 58 ++ 400 files changed, 3046 insertions(+), 714 deletions(-) create mode 100644 server/app/adminapi/logic/firstvisit/WecomAcquisitionCustomerLogic.php create mode 100644 server/app/command/QywxRetryCustomerAcquisitionEvents.php create mode 100644 server/app/common/service/qywx/QywxCustomerAcquisitionApiService.php create mode 100644 server/app/common/service/qywx/QywxCustomerAcquisitionCustomerService.php create mode 100644 server/app/common/service/qywx/QywxCustomerAcquisitionLinkService.php create mode 100644 server/config/qywx_customer_acquisition.php rename server/public/admin/assets/{.pnpm-CJoARskO.js => .pnpm-BadRMC3e.js} (99%) rename server/public/admin/assets/{403-CJQqqpQf.js => 403-BO38Hcmq.js} (75%) rename server/public/admin/assets/{404-RUybHbR2.js => 404-K-jkMp_g.js} (58%) rename server/public/admin/assets/@tencentcloud/{call-engine-js-CdTEhu7V.js => call-engine-js-DFqo23EQ.js} (99%) rename server/public/admin/assets/@tencentcloud/{chat-CrjClXJK.js => chat-C6eYQUo-.js} (99%) rename server/public/admin/assets/@tencentcloud/{chat-uikit-engine-DxXLDsqG.js => chat-uikit-engine-TY6XO9dW.js} (99%) rename server/public/admin/assets/{AppointmentRecordPanel-C3Mdy2cU.js => AppointmentRecordPanel-B9Nz73xJ.js} (96%) rename server/public/admin/assets/{AssignLogPanel-C3j1dd3l.js => AssignLogPanel-CuOtAPIs.js} (95%) rename server/public/admin/assets/{AssistantWatchCallDialog-CD0oRc7D.js => AssistantWatchCallDialog-CmfBwKdN.js} (96%) rename server/public/admin/assets/{BloodRecordList-C0YE6xkU.js => BloodRecordList-0iEXPrf6.js} (97%) rename server/public/admin/assets/{CallRecordPanel-BlQsXwr4.js => CallRecordPanel-D6KCBWP2.js} (91%) rename server/public/admin/assets/{CaseRecordList-D2s7UFGp.js => CaseRecordList-B1zlt73W.js} (93%) rename server/public/admin/assets/{DailyMatrix-BUdiASbV.js => DailyMatrix-HwuqJUur.js} (97%) rename server/public/admin/assets/{DiagnosisTodoList-DU_LnXaX.js => DiagnosisTodoList-NjTpgjTU.js} (95%) rename server/public/admin/assets/{DietRecordList-BsVtIq_I.js => DietRecordList-CqZxRaJ4.js} (91%) rename server/public/admin/assets/{ExerciseRecordList-CPedWpH5.js => ExerciseRecordList-BvOfqWiP.js} (90%) create mode 100644 server/public/admin/assets/GancaoSubmissionReconcileButton-fN_nCFoE.js delete mode 100644 server/public/admin/assets/GancaoSubmissionReconcileButton-ugRDYCgb.js rename server/public/admin/assets/{GancaoSubmissionReconcileButton.vue_vue_type_script_setup_true_lang-C23w1g-E.js => GancaoSubmissionReconcileButton.vue_vue_type_script_setup_true_lang-LIiWe8wu.js} (96%) rename server/public/admin/assets/{ImChatRecordPanel-6_fYw183.js => ImChatRecordPanel-CxBgOjX5.js} (94%) rename server/public/admin/assets/{MediaSourceSelect-CvI0JHdy.js => MediaSourceSelect-Ce8Yqir9.js} (53%) rename server/public/admin/assets/{MediaSourceSelect.vue_vue_type_script_setup_true_lang-iYm8xAAz.js => MediaSourceSelect.vue_vue_type_script_setup_true_lang-CWbovTuC.js} (91%) rename server/public/admin/assets/{MessageBubble-CMkfv_eo.js => MessageBubble-C6QTCM2w.js} (96%) rename server/public/admin/assets/{NoteTimeline-BYMN03c5.js => NoteTimeline-DtLw_8ng.js} (91%) rename server/public/admin/assets/{OrderActionHost-D5CG69lE.js => OrderActionHost-CybqU_Ht.js} (98%) delete mode 100644 server/public/admin/assets/OrderPanel-B7lsGnMg.js create mode 100644 server/public/admin/assets/OrderPanel-CU62QZ1F.js delete mode 100644 server/public/admin/assets/OrderPanel-D388bBXd.css create mode 100644 server/public/admin/assets/OrderPanel-DGauxOwy.css rename server/public/admin/assets/{PatientCaseCard-CdTWpuxk.js => PatientCaseCard-D4O_HF73.js} (98%) rename server/public/admin/assets/{PatientInfoCard-x-olqqX_.js => PatientInfoCard-CsI9iQp2.js} (96%) rename server/public/admin/assets/{PatientOrderList-NRyQBqmV.js => PatientOrderList-DZvWD3Q_.js} (94%) rename server/public/admin/assets/{PrescriptionOrderDetailDrawer-ApCGWZ0o.js => PrescriptionOrderDetailDrawer-Ooi-LGtp.js} (99%) rename server/public/admin/assets/{ProgressPanel-kZpKFcV6.js => ProgressPanel-C31A60in.js} (96%) rename server/public/admin/assets/{RecordingPlaybackBlock-D_ZAVM_W.js => RecordingPlaybackBlock-W5bdjS_P.js} (92%) rename server/public/admin/assets/{RecordingVideoPlayer-BdmuK8u1.js => RecordingVideoPlayer-ActCwTef.js} (95%) rename server/public/admin/assets/{SendPanel-nETbLlZo.js => SendPanel-CVtA92Gg.js} (98%) rename server/public/admin/assets/{TrackingMatrix-uhA2vse3.js => TrackingMatrix-BlAGYt7g.js} (98%) rename server/public/admin/assets/{TrackingNoteTimeline-BIxCAk0j.js => TrackingNoteTimeline-Blav0Fge.js} (93%) delete mode 100644 server/public/admin/assets/account-adjust-BFqVwWDz.js create mode 100644 server/public/admin/assets/account-adjust-ueC9xLxv.js rename server/public/admin/assets/{account-adjust.vue_vue_type_script_setup_true_lang-C7A7XOyZ.js => account-adjust.vue_vue_type_script_setup_true_lang-UMSPjaUQ.js} (94%) rename server/public/admin/assets/{account_cost-ruRugF1E.js => account_cost-CSJwgJs9.js} (90%) rename server/public/admin/assets/{add-CLw5B07w.js => add-DZXGQ6KK.js} (99%) create mode 100644 server/public/admin/assets/add-nav-CC8aPw3O.js delete mode 100644 server/public/admin/assets/add-nav-CpGufPtX.js rename server/public/admin/assets/{add-nav.vue_vue_type_script_setup_true_lang-1RdLHUAJ.js => add-nav.vue_vue_type_script_setup_true_lang-D3OZX8cR.js} (90%) rename server/public/admin/assets/{admin-Dx8JIIIg.js => admin-CWK5kAG4.js} (84%) rename server/public/admin/assets/{appointment-BcQSmD46.js => appointment-BDzAv3Pw.js} (85%) rename server/public/admin/assets/{article-DfNLL0Dd.js => article-DHOuLFy5.js} (93%) rename server/public/admin/assets/{asset-C29uTWNM.js => asset-Cvh1U-8l.js} (90%) delete mode 100644 server/public/admin/assets/attr--JAopRM3.js delete mode 100644 server/public/admin/assets/attr-5e3NuWTq.js create mode 100644 server/public/admin/assets/attr-BTe3Ude5.js create mode 100644 server/public/admin/assets/attr-Bt4Dp5gf.js delete mode 100644 server/public/admin/assets/attr-BvPSviuw.js delete mode 100644 server/public/admin/assets/attr-C7u3zghd.js create mode 100644 server/public/admin/assets/attr-CH-5muNK.js delete mode 100644 server/public/admin/assets/attr-COrCaDqe.js rename server/public/admin/assets/{attr-B_5ee6kQ.js => attr-CSkG8GSj.js} (61%) rename server/public/admin/assets/{attr-Cz_-CGg8.js => attr-CaS4-vjx.js} (89%) delete mode 100644 server/public/admin/assets/attr-Cg46awUw.js create mode 100644 server/public/admin/assets/attr-CiTmp4L4.js create mode 100644 server/public/admin/assets/attr-CqesTH-L.js delete mode 100644 server/public/admin/assets/attr-D2GjZzGW.js delete mode 100644 server/public/admin/assets/attr-DK2MSZKg.js create mode 100644 server/public/admin/assets/attr-DQ7f_S-8.js delete mode 100644 server/public/admin/assets/attr-DxDM15G5.js create mode 100644 server/public/admin/assets/attr-DzLBuTNI.js delete mode 100644 server/public/admin/assets/attr-XK6fv2F2.js create mode 100644 server/public/admin/assets/attr-ZlEa-swb.js create mode 100644 server/public/admin/assets/attr-qi7IpYEB.js create mode 100644 server/public/admin/assets/attr-sIse0Y9c.js delete mode 100644 server/public/admin/assets/attr-setting-Ce1ykgas.js create mode 100644 server/public/admin/assets/attr-setting-CxDtFImS.js rename server/public/admin/assets/{attr-setting.vue_vue_type_script_setup_true_lang-DDp138og.js => attr-setting.vue_vue_type_script_setup_true_lang-_vdeZ3_G.js} (88%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-14i9ZtFy.js => attr.vue_vue_type_script_setup_true_lang-BZOVOw6C.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-C991mJZb.js => attr.vue_vue_type_script_setup_true_lang-B_X-6joR.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-xkpL7agD.js => attr.vue_vue_type_script_setup_true_lang-B_eBI6xm.js} (91%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-DEUuv3T9.js => attr.vue_vue_type_script_setup_true_lang-C3rhWyvi.js} (92%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-B9i_Csmx.js => attr.vue_vue_type_script_setup_true_lang-CETYhEN2.js} (92%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-nmpJC7wW.js => attr.vue_vue_type_script_setup_true_lang-CR3MAcLK.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-D7SebzRa.js => attr.vue_vue_type_script_setup_true_lang-CZpwv8m7.js} (93%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-BDicSE3X.js => attr.vue_vue_type_script_setup_true_lang-Ck9fwFyC.js} (70%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-CbeXAM_5.js => attr.vue_vue_type_script_setup_true_lang-DU_nXh8M.js} (70%) rename server/public/admin/assets/{attr.vue_vue_type_script_setup_true_lang-CgrUv7Vh.js => attr.vue_vue_type_script_setup_true_lang-XYrW2c3f.js} (70%) delete mode 100644 server/public/admin/assets/auth-BGDXIY0q.js create mode 100644 server/public/admin/assets/auth-htFYIgFq.js rename server/public/admin/assets/{auth.vue_vue_type_script_setup_true_lang-DESqRVn1.js => auth.vue_vue_type_script_setup_true_lang-gZXLDDfP.js} (89%) rename server/public/admin/assets/{balance_details-3hLWUALs.js => balance_details-tsKf3yDs.js} (88%) rename server/public/admin/assets/{bind-work-wechat-ikQcxxCM.js => bind-work-wechat-DTbhAiDh.js} (95%) rename server/public/admin/assets/{cache-CQODi2sl.js => cache-DYMdALFE.js} (88%) rename server/public/admin/assets/{change-password-DhZzLxWL.js => change-password-CQOogv2N.js} (90%) rename server/public/admin/assets/{code-UG1DxRDr.js => code-CLmYMSFp.js} (92%) delete mode 100644 server/public/admin/assets/code-preview-BnWt__uk.js create mode 100644 server/public/admin/assets/code-preview-DBLmflzG.js rename server/public/admin/assets/{code-preview.vue_vue_type_script_setup_true_lang-CNYIqW0Z.js => code-preview.vue_vue_type_script_setup_true_lang-WFCEXLkg.js} (91%) rename server/public/admin/assets/{commission-settlement-BF7xBhLi.js => commission-settlement-D37eqnPm.js} (99%) rename server/public/admin/assets/{config-BNWFe0PX.js => config-Dz1B211u.js} (92%) rename server/public/admin/assets/{consumer-B68tuDoj.js => consumer-CizaIFhC.js} (81%) create mode 100644 server/public/admin/assets/content-BKXs3H1I.js delete mode 100644 server/public/admin/assets/content-BMc9ocvM.js create mode 100644 server/public/admin/assets/content-BSA-9TuL.js create mode 100644 server/public/admin/assets/content-Bb4fUglk.js delete mode 100644 server/public/admin/assets/content-BoXnqfCB.js rename server/public/admin/assets/{content-CobUYz5t.js => content-BrPzGkcF.js} (81%) delete mode 100644 server/public/admin/assets/content-C2vy62ef.js rename server/public/admin/assets/{content-BNnMMGWZ.js => content-CLYr3Xvj.js} (84%) delete mode 100644 server/public/admin/assets/content-CR4nROqA.js rename server/public/admin/assets/{content-D9LroEig.js => content-CVm2jRFT.js} (70%) rename server/public/admin/assets/{content-BWlqOjJD.js => content-CYOEh4RL.js} (86%) rename server/public/admin/assets/{content-B-B36d3B.js => content-D87zRUIO.js} (72%) rename server/public/admin/assets/{content-Cr2e03eq.js => content-DIMJxn9q.js} (85%) rename server/public/admin/assets/{content-BpsV3Yt7.js => content-DdIAx6E1.js} (81%) create mode 100644 server/public/admin/assets/content-DypemqH1.js create mode 100644 server/public/admin/assets/content-M_brQuto.js create mode 100644 server/public/admin/assets/content-_u2fBNk6.js delete mode 100644 server/public/admin/assets/content-aNEmqiLB.js delete mode 100644 server/public/admin/assets/content-pO0I5PKE.js rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-DUGOcjwM.js => content.vue_vue_type_script_setup_true_lang-BUyFKrza.js} (79%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-B5D1fxZJ.js => content.vue_vue_type_script_setup_true_lang-C8DdB-3S.js} (88%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-DF8pWGsr.js => content.vue_vue_type_script_setup_true_lang-D07ajdkx.js} (81%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-RYMnsKiH.js => content.vue_vue_type_script_setup_true_lang-DTQ6DjhZ.js} (85%) rename server/public/admin/assets/{content.vue_vue_type_script_setup_true_lang-D410UMxO.js => content.vue_vue_type_script_setup_true_lang-DrPQyt1L.js} (81%) create mode 100644 server/public/admin/assets/cost-edit-DmtTpZMF.js delete mode 100644 server/public/admin/assets/cost-edit-RNaqgVgQ.js rename server/public/admin/assets/{cost-edit.vue_vue_type_script_setup_true_lang-CDQeNeR4.js => cost-edit.vue_vue_type_script_setup_true_lang-Sedw8aio.js} (91%) create mode 100644 server/public/admin/assets/data-table-DistU6Kr.js delete mode 100644 server/public/admin/assets/data-table-VFuKkKTm.js rename server/public/admin/assets/{data-table.vue_vue_type_script_setup_true_lang-BCUqEfNH.js => data-table.vue_vue_type_script_setup_true_lang-JN0eAlZK.js} (89%) rename server/public/admin/assets/{dayjs-HJJmW-S4.js => dayjs-Dr2Em-pV.js} (99%) rename server/public/admin/assets/{decoration-BlMAHrYB.js => decoration-0oah8UE6.js} (87%) rename server/public/admin/assets/{decoration-img-CPRGZ5aq.js => decoration-img-B0LkMFfS.js} (84%) rename server/public/admin/assets/{default_reply-DVqL0DDw.js => default_reply-DzOJoIa2.js} (84%) rename server/public/admin/assets/{department-BqJEXUDT.js => department-BV5thVv_.js} (86%) rename server/public/admin/assets/{dept-tongji-2Au33FtJ.js => dept-tongji-DRYCxRDn.js} (95%) rename server/public/admin/assets/{detail-DVUz0IY8.js => detail-BbPEk4oY.js} (89%) rename server/public/admin/assets/{detail-BJCfEyAY.js => detail-BhBAugZq.js} (95%) rename server/public/admin/assets/{dict-CLVB2ofZ.js => dict-Bkt3kigV.js} (92%) rename server/public/admin/assets/{doctor-htXSGAHr.js => doctor-DpsaODfP.js} (95%) rename server/public/admin/assets/{edit-DOIRXGVL.js => edit-B6sVFSO0.js} (93%) delete mode 100644 server/public/admin/assets/edit-BOz-_eIK.js rename server/public/admin/assets/{edit-BLjggR7f.js => edit-BUY4nuSs.js} (95%) create mode 100644 server/public/admin/assets/edit-Bbibmq_9.js delete mode 100644 server/public/admin/assets/edit-Bge6oLmU.js create mode 100644 server/public/admin/assets/edit-BnkTNtIw.js rename server/public/admin/assets/{edit-Bm9ww5Lo.js => edit-C-RhpfoE.js} (86%) create mode 100644 server/public/admin/assets/edit-C2FQBShJ.js create mode 100644 server/public/admin/assets/edit-CDzDJ0sU.js rename server/public/admin/assets/{edit-BNO1Id5O.js => edit-CV2QVuks.js} (94%) rename server/public/admin/assets/{edit-Q7o21Gu0.js => edit-CWgufoaK.js} (93%) create mode 100644 server/public/admin/assets/edit-CcF8waMq.js delete mode 100644 server/public/admin/assets/edit-ChdEc1nS.js delete mode 100644 server/public/admin/assets/edit-CliwpAKM.js rename server/public/admin/assets/{edit-DjvVvzxj.js => edit-DCfr5oGz.js} (93%) delete mode 100644 server/public/admin/assets/edit-DJKLNr6v.js rename server/public/admin/assets/{edit-Bp71eyD0.js => edit-DOv7YvQO.js} (95%) delete mode 100644 server/public/admin/assets/edit-DP4pC6dN.js rename server/public/admin/assets/{edit-2LynddIK.js => edit-DPa0p94T.js} (93%) delete mode 100644 server/public/admin/assets/edit-DYtw3xla.js create mode 100644 server/public/admin/assets/edit-DZkp38OM.js rename server/public/admin/assets/{edit-BWgggNYE.js => edit-DZyrwdX2.js} (96%) create mode 100644 server/public/admin/assets/edit-DaH1MKxa.js create mode 100644 server/public/admin/assets/edit-DwyGOo1w.js delete mode 100644 server/public/admin/assets/edit-DxLZlhpt.js delete mode 100644 server/public/admin/assets/edit-FE5Yiazn.js create mode 100644 server/public/admin/assets/edit-FuNcspvI.js create mode 100644 server/public/admin/assets/edit-U6tuCedw.js delete mode 100644 server/public/admin/assets/edit-jue2EUe-.js delete mode 100644 server/public/admin/assets/edit-mk8dkLiI.js create mode 100644 server/public/admin/assets/edit-uZApmkPg.js rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-BV7vCkiB.js => edit.vue_vue_type_script_setup_true_lang-BrbzahBo.js} (95%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CGlwQqki.js => edit.vue_vue_type_script_setup_true_lang-C3WdWCyR.js} (94%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-BWbLL0jz.js => edit.vue_vue_type_script_setup_true_lang-CZGVjdFg.js} (95%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CHQ29HIF.js => edit.vue_vue_type_script_setup_true_lang-D-P3uHxR.js} (94%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CS6UGr9J.js => edit.vue_vue_type_script_setup_true_lang-D6Q-6YLq.js} (92%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-Bl79T1Pj.js => edit.vue_vue_type_script_setup_true_lang-DllswV0U.js} (94%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-bOz_RmVE.js => edit.vue_vue_type_script_setup_true_lang-DsaOmIfe.js} (91%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-Cqt6xvcf.js => edit.vue_vue_type_script_setup_true_lang-KX7QzRLl.js} (96%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-Bc8ty9Xa.js => edit.vue_vue_type_script_setup_true_lang-X717NiIB.js} (95%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_lang-CeFglv9N.js => edit.vue_vue_type_script_setup_true_lang-sS83YgIZ.js} (96%) rename server/public/admin/assets/{edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-f0wcuDWu.js => edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-C1veEZuS.js} (93%) rename server/public/admin/assets/{environment-aHKz90ZP.js => environment-DDXhE8Sz.js} (92%) rename server/public/admin/assets/{error-C_WBAqz-.js => error-DNemHh_Y.js} (85%) rename server/public/admin/assets/{fans-puY-LupI.js => fans-BXH31mGf.js} (89%) rename server/public/admin/assets/{file-Dg-5v8cj.js => file-BfbRb1wZ.js} (95%) rename server/public/admin/assets/{file-BeSvV4hj.js => file-DsgRDekF.js} (83%) rename server/public/admin/assets/{filing-DGifF5iI.js => filing-CdeiXA1f.js} (88%) rename server/public/admin/assets/{finance-aeayAZ7g.js => finance-BfXmLxJQ.js} (95%) delete mode 100644 server/public/admin/assets/first_visit-CR3YrUl5.js create mode 100644 server/public/admin/assets/first_visit-gXLj_1UM.js rename server/public/admin/assets/{follow_reply-CHmj69Q3.js => follow_reply-D6KvV9CD.js} (86%) rename server/public/admin/assets/{footer.vue_vue_type_script_setup_true_lang-DS-Zk4w7.js => footer.vue_vue_type_script_setup_true_lang-CCCJtBtz.js} (63%) create mode 100644 server/public/admin/assets/getExposeType-CWAjpevD.js delete mode 100644 server/public/admin/assets/getExposeType-DJHJf2-C.js rename server/public/admin/assets/{guahao-Bwf2pyhq.js => guahao-BYrVmmNz.js} (97%) rename server/public/admin/assets/{h5-DB3cro00.js => h5-CBNljwcW.js} (92%) rename server/public/admin/assets/{h5-DLuCXrzT.js => h5-D4D-jQQb.js} (98%) rename server/public/admin/assets/{icon-CjPsV4fv.js => icon-e3vKDudu.js} (91%) rename server/public/admin/assets/{im-business-message-parse-DTpJoEdY.js => im-business-message-parse-DoOLrDi4.js} (97%) rename server/public/admin/assets/{index-CpjF0HgU.js => index-2bLCfTRE.js} (86%) rename server/public/admin/assets/{index-DF5HTs0Y.js => index-5TmaMR02.js} (98%) rename server/public/admin/assets/{index-BQhM24P6.js => index-6SMGEHwP.js} (84%) rename server/public/admin/assets/{index-kKoe5bi4.js => index-A4a0LiMP.js} (82%) rename server/public/admin/assets/{index-DVPhupGr.js => index-AjwJTgsH.js} (52%) create mode 100644 server/public/admin/assets/index-BA90KXLS.css rename server/public/admin/assets/{index-DeJ9uby8.js => index-BGckjafR.js} (98%) rename server/public/admin/assets/{index-DqNQ7gKq.js => index-BLlfEUTL.js} (86%) rename server/public/admin/assets/{index-CfDlwT2y.js => index-BNYVM0wQ.js} (96%) rename server/public/admin/assets/{index-pAoMWPEi.js => index-BPdhodTi.js} (83%) delete mode 100644 server/public/admin/assets/index-BS1HfYb9.css rename server/public/admin/assets/{index-DOlUrQY9.js => index-BTPkHWgf.js} (82%) rename server/public/admin/assets/{index-CEgafCld.js => index-BZRpIq1o.js} (90%) rename server/public/admin/assets/{index-BF5upMih.js => index-BdymNFYl.js} (94%) rename server/public/admin/assets/{index-DjVEBiwK.js => index-BoArz6Am.js} (91%) rename server/public/admin/assets/{index-DPTA43cr.js => index-BpFrgymC.js} (87%) rename server/public/admin/assets/{index-C1rt2efZ.js => index-BpoQfAzJ.js} (98%) rename server/public/admin/assets/{index-DuiNazZf.js => index-BvNrMdi2.js} (92%) rename server/public/admin/assets/{index-DyygwEaV.js => index-BvfnP6Ij.js} (97%) delete mode 100644 server/public/admin/assets/index-Bx9MraCI.js rename server/public/admin/assets/{index-Bzjo5NhU.js => index-C-ImygGV.js} (98%) rename server/public/admin/assets/{index-XB57w_Bh.js => index-CIbGsXW2.js} (98%) rename server/public/admin/assets/{index-0im0Afgh.js => index-CKJths3X.js} (96%) rename server/public/admin/assets/{index-CbZl4M7O.js => index-CRHhozQt.js} (90%) rename server/public/admin/assets/{index-DOzKdc-2.js => index-CTA27ScJ.js} (88%) rename server/public/admin/assets/{index-CSs5pIQ9.js => index-CbxiEXmO.js} (94%) create mode 100644 server/public/admin/assets/index-CkW0jPgD.js rename server/public/admin/assets/{index-DtPx_s2e.js => index-CtonjL9b.js} (94%) rename server/public/admin/assets/{index-BMCqAfx2.js => index-CzUCAsRe.js} (90%) rename server/public/admin/assets/{index-CCIYRCQK.js => index-D1_EsVza.js} (98%) rename server/public/admin/assets/{index-BiRrjMB3.js => index-D4xgBI3i.js} (98%) rename server/public/admin/assets/{index-kAN25EgC.js => index-DC5ozazT.js} (97%) delete mode 100644 server/public/admin/assets/index-DCmYS1w6.css rename server/public/admin/assets/{index-BHJsdjLt.js => index-DEzN457R.js} (98%) rename server/public/admin/assets/{index-B_UIsrKZ.js => index-DF1xYfC8.js} (71%) rename server/public/admin/assets/{index-BJmMHEYT.js => index-DG2_EQKT.js} (97%) rename server/public/admin/assets/{index-AWsHUhuJ.js => index-DIOXlzAH.js} (91%) create mode 100644 server/public/admin/assets/index-DKk_-CYN.js rename server/public/admin/assets/{index-D0Lm15RC.js => index-DNEYsr8a.js} (97%) rename server/public/admin/assets/{index-pOzDs5Ek.js => index-DP_2jise.js} (93%) rename server/public/admin/assets/{index-QIAECMPl.js => index-DRYmlJEW.js} (85%) rename server/public/admin/assets/{index-Dkq210NI.js => index-DTy5bvh3.js} (90%) rename server/public/admin/assets/{index-DaExJbbG.js => index-DVUXgc9X.js} (62%) rename server/public/admin/assets/{index-BbRXnnPV.js => index-D_0EVJEx.js} (92%) rename server/public/admin/assets/{index-DNTJxKLO.js => index-Dbjk5Xrj.js} (94%) rename server/public/admin/assets/{index-k3oPIR0H.js => index-Dd_hUJ5C.js} (84%) delete mode 100644 server/public/admin/assets/index-DkrzCwgm.js rename server/public/admin/assets/{index-vwMTrNXz.js => index-Do7fAtr3.js} (89%) rename server/public/admin/assets/{index-BXqadihb.js => index-Dp_d9hDy.js} (87%) rename server/public/admin/assets/{index-Dfv4XWWY.js => index-Dq47Nj-z.js} (86%) rename server/public/admin/assets/{index-CUNzAym1.js => index-DsaRlYT2.js} (94%) create mode 100644 server/public/admin/assets/index-Dwih6JqK.css rename server/public/admin/assets/{index-DmCL_BRd.js => index-Dy4Bn4m3.js} (84%) rename server/public/admin/assets/{index-d8aPggOs.js => index-DyLyEbja.js} (96%) rename server/public/admin/assets/{index-Do-cFro_.js => index-H0J7MmTd.js} (91%) rename server/public/admin/assets/{index-BNczEIn4.js => index-Q24oG8C1.js} (99%) rename server/public/admin/assets/{index-yXUxbsK7.js => index-T4NTfW9v.js} (91%) rename server/public/admin/assets/{index-CvWXUesg.js => index-VEyOoZ0z.js} (79%) rename server/public/admin/assets/{index-DRGZ_eW0.js => index-e-vlke2B.js} (81%) rename server/public/admin/assets/{index-CkLc7foa.js => index-hbr3K8qJ.js} (69%) rename server/public/admin/assets/{index-DGRqux-9.js => index-jn7AqtXG.js} (70%) rename server/public/admin/assets/{index-D5Jc-H2r.js => index-tq0qQpEX.js} (93%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-CI_v6sRz.js => index.vue_vue_type_script_setup_true_lang-BZQ0jmei.js} (92%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-BZrtzFNp.js => index.vue_vue_type_script_setup_true_lang-BhTBtKLt.js} (92%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-B7tcYsgo.js => index.vue_vue_type_script_setup_true_lang-CL1DOFtW.js} (93%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-Cnz3-b3d.js => index.vue_vue_type_script_setup_true_lang-DIUUHLou.js} (96%) rename server/public/admin/assets/{index.vue_vue_type_script_setup_true_lang-rPwCQIWi.js => index.vue_vue_type_script_setup_true_lang-QSNac8Ky.js} (97%) rename server/public/admin/assets/{index.vue_vue_type_style_index_0_lang-CXxZd-mu.js => index.vue_vue_type_style_index_0_lang-DBiOExXq.js} (86%) rename server/public/admin/assets/{index_h5-Ho89j9qD.js => index_h5-D4KajoBy.js} (92%) rename server/public/admin/assets/{information-CVaGzPK_.js => information-DXx6EEkW.js} (91%) rename server/public/admin/assets/{journal--sjozm7W.js => journal-CwpKK-he.js} (89%) rename server/public/admin/assets/{keyword_reply-FDpVWTzl.js => keyword_reply-BgbNmBpn.js} (87%) rename server/public/admin/assets/{link-B81UBe09.js => link-4wYrEoTg.js} (60%) rename server/public/admin/assets/{list-BoHchEYn.js => list-6eJIrxpY.js} (90%) rename server/public/admin/assets/{list-Dajvp8QT.js => list-C1Aoj7T1.js} (96%) rename server/public/admin/assets/{list_h5-Bsp221S9.js => list_h5-B2bCJmXP.js} (90%) rename server/public/admin/assets/{login-BXIHroXn.js => login-DijFGH_w.js} (95%) rename server/public/admin/assets/{login_register-D_UFOcgV.js => login_register-zg4qg3uW.js} (95%) rename server/public/admin/assets/{medicine-CBY86QwP.js => medicine-CJhU79GG.js} (81%) rename server/public/admin/assets/{medicine-DY96Irod.js => medicine-DWFWaQZr.js} (98%) rename server/public/admin/assets/{menu-DeKGRJeu.js => menu-BFHAmkr7.js} (86%) rename server/public/admin/assets/{menu-IDxrpo4T.js => menu-Blkq1YLw.js} (83%) rename server/public/admin/assets/{menu-CWZaMyiH.js => menu-rbHpfaNe.js} (66%) create mode 100644 server/public/admin/assets/menu-set-D0e7AIfw.js delete mode 100644 server/public/admin/assets/menu-set-utX8-9qB.js rename server/public/admin/assets/{menu-set.vue_vue_type_script_setup_true_lang-D79ZNkE-.js => menu-set.vue_vue_type_script_setup_true_lang-KCrGFDT0.js} (92%) rename server/public/admin/assets/{message-Cjkjxje_.js => message-ll07W0Rg.js} (87%) create mode 100644 server/public/admin/assets/mobile-style-C5NbpFVF.js delete mode 100644 server/public/admin/assets/mobile-style-C8-CuEfo.js rename server/public/admin/assets/{mobile-style.vue_vue_type_script_setup_true_lang-B7VuZU7Y.js => mobile-style.vue_vue_type_script_setup_true_lang-Dyyn3P2a.js} (96%) rename server/public/admin/assets/{mubiao-CziH_Dq1.js => mubiao-C8VCibkT.js} (96%) rename server/public/admin/assets/{mubiao-dept-card-f1z5FHYB.js => mubiao-dept-card-CufvWIcd.js} (97%) rename server/public/admin/assets/{mubiao-dept-node-mJb2RQvo.js => mubiao-dept-node-_1UCXiHt.js} (95%) rename server/public/admin/assets/{oa-attr-slvv9nrZ.js => oa-attr-C3-Wcl5A.js} (82%) create mode 100644 server/public/admin/assets/oa-menu-form-DJrd9EPt.js delete mode 100644 server/public/admin/assets/oa-menu-form-DiDsgnjn.js delete mode 100644 server/public/admin/assets/oa-menu-form-edit-B4vkwgvF.js create mode 100644 server/public/admin/assets/oa-menu-form-edit-CGTB-nDr.js rename server/public/admin/assets/{oa-menu-form-edit.vue_vue_type_script_setup_true_lang-XnXylScb.js => oa-menu-form-edit.vue_vue_type_script_setup_true_lang-BCJ0xcAe.js} (85%) rename server/public/admin/assets/{oa-menu-form.vue_vue_type_script_setup_true_lang-Bi1xOV2K.js => oa-menu-form.vue_vue_type_script_setup_true_lang-BiQ5Tx4S.js} (95%) rename server/public/admin/assets/{oa-phone-BpcOZx7X.js => oa-phone-CtbFiRqE.js} (86%) rename server/public/admin/assets/{open_setting-D-neyqXt.js => open_setting-yvLFjXhN.js} (93%) rename server/public/admin/assets/{order-dJNw2NOS.js => order-D0gQz8L7.js} (96%) rename server/public/admin/assets/{order_list-ywNlV6uR.js => order_list-BjdCjrhS.js} (98%) rename server/public/admin/assets/{order_list_h5-Dm5kmLjH.js => order_list_h5-DRjLLTLw.js} (98%) rename server/public/admin/assets/{overflow-xvFSiEuk.js => overflow-Bxb5MUPA.js} (74%) rename server/public/admin/assets/{paiban-ByGzchtb.js => paiban-wv8n9WXL.js} (94%) rename server/public/admin/assets/{patient-CS5NmE93.js => patient-Ch_UV86r.js} (88%) rename server/public/admin/assets/{patient-call-bREQXkN8.js => patient-call-viVyQjhI.js} (95%) rename server/public/admin/assets/{pay-m7RGSHX4.js => pay-Cyq4d4Gt.js} (85%) rename server/public/admin/assets/{pc-BE39GDze.js => pc-DvrgZFPD.js} (90%) delete mode 100644 server/public/admin/assets/pc_details-Bkxl9s46.js create mode 100644 server/public/admin/assets/pc_details-SJ_8PwZ5.js rename server/public/admin/assets/{perm-DNF01X-C.js => perm-DsEdVTDW.js} (67%) rename server/public/admin/assets/{picker-BtisB09w.js => picker-BTjkKuWn.js} (94%) rename server/public/admin/assets/{picker-_oSJRmY0.js => picker-CCYShZB-.js} (97%) rename server/public/admin/assets/{picker.vue_vue_type_script_setup_true_lang-DLQ75ZkE.js => picker.vue_vue_type_script_setup_true_lang-CrnhHeAv.js} (95%) rename server/public/admin/assets/{popover_input-DrkzbCwz.js => popover_input-Dctr-wRD.js} (89%) rename server/public/admin/assets/{post-CMFQc-kV.js => post-BhzMeoOl.js} (86%) rename server/public/admin/assets/{prescription-drawer-B3MRZXlD.js => prescription-drawer-DR8kJf_3.js} (97%) rename server/public/admin/assets/{preview-gfUSM4uC.js => preview-Cgcnbb8N.js} (60%) rename server/public/admin/assets/{preview-pc-CfYfMQpf.js => preview-pc-mVGIxfyg.js} (53%) rename server/public/admin/assets/{progress-CdWjsCG9.js => progress-CZ-gPvfc.js} (98%) rename server/public/admin/assets/{protocol-CtdxYLYj.js => protocol-B0TbdCMn.js} (78%) rename server/public/admin/assets/{qywx-M2UUVZSL.js => qywx-ClvYIHrq.js} (98%) rename server/public/admin/assets/{readonly-Bv1_b0m2.js => readonly-_4oi3Leh.js} (80%) rename server/public/admin/assets/{recharge_record-BVBPJwzn.js => recharge_record-m47C7QQb.js} (88%) create mode 100644 server/public/admin/assets/refund-log-DSfLjEbL.js delete mode 100644 server/public/admin/assets/refund-log-w05_QVJs.js rename server/public/admin/assets/{refund-log.vue_vue_type_script_setup_true_lang-nd4J89fb.js => refund-log.vue_vue_type_script_setup_true_lang-BFQ8aEFb.js} (92%) rename server/public/admin/assets/{refund_record-Dfko4h25.js => refund_record-C7wWj8w7.js} (92%) create mode 100644 server/public/admin/assets/relations-add-BLJx5j3W.js delete mode 100644 server/public/admin/assets/relations-add-D0zts60z.js rename server/public/admin/assets/{relations-add.vue_vue_type_script_setup_true_lang-azBjdxpd.js => relations-add.vue_vue_type_script_setup_true_lang-CWmstW34.js} (93%) rename server/public/admin/assets/{rich_text-CKRbpxy0.js => rich_text-dMEfV67Z.js} (59%) rename server/public/admin/assets/{role-CsixMFTg.js => role-uLKWDV2d.js} (83%) rename server/public/admin/assets/{roster-BIWTi81c.js => roster-CXf_JGt9.js} (98%) rename server/public/admin/assets/{rtc-detect-DH51Zio_.js => rtc-detect-BahOTccE.js} (99%) rename server/public/admin/assets/{self_input_stats-BbyJgyLB.js => self_input_stats-Bqe53Spd.js} (91%) rename server/public/admin/assets/{setting-JV-KMG6c.js => setting-CD1kGv_x.js} (91%) rename server/public/admin/assets/{setup-aOcE1PBr.js => setup-ByHqORVj.js} (67%) rename server/public/admin/assets/{statistics-Cdnmoa-6.js => statistics-6rXRzT91.js} (88%) rename server/public/admin/assets/{stats-ChxWF7cv.js => stats-Bv5uiH7P.js} (97%) rename server/public/admin/assets/{style-CnH8LuF9.js => style-BQKEwl42.js} (76%) rename server/public/admin/assets/{tabbar-CMaYws0P.js => tabbar-BOqpsnb0.js} (66%) rename server/public/admin/assets/{tcm-BBytqd3B.js => tcm-BDu8-eLA.js} (99%) rename server/public/admin/assets/{theme-picker-DT4Ucyjj.js => theme-picker-BRwhEmiv.js} (86%) rename server/public/admin/assets/{tim-profanity-filter-plugin-CjWF3_I9.js => tim-profanity-filter-plugin-DM0QTuQO.js} (99%) rename server/public/admin/assets/{tim-upload-plugin-BV384ral.js => tim-upload-plugin-BUYgI52i.js} (99%) rename server/public/admin/assets/{tongji-B8B8RLKU.js => tongji-jONiKaTE.js} (97%) rename server/public/admin/assets/{upload-CPwRjp20.js => upload-Dwnz2Z8w.js} (90%) rename server/public/admin/assets/{useDictOptions-DzyuIpSA.js => useDictOptions-wq5puhZD.js} (69%) rename server/public/admin/assets/{useListTimeFilter-nHNUzFn8.js => useListTimeFilter-BiBQquVM.js} (96%) rename server/public/admin/assets/{useLockFn-CCoJkZZt.js => useLockFn-q1SV9nuT.js} (71%) rename server/public/admin/assets/{useMediaSourceOptions-ClefnqOf.js => useMediaSourceOptions-ByztCjHF.js} (81%) rename server/public/admin/assets/{useMenuOa-DUar-BHF.js => useMenuOa-CQopDBmB.js} (89%) rename server/public/admin/assets/{usePaging-DKtm3XdH.js => usePaging-DMqUvFG-.js} (90%) rename server/public/admin/assets/{user-ChwTv-Rh.js => user-B6OMuuUC.js} (82%) rename server/public/admin/assets/{weapp-BlqOmU5l.js => weapp-0QzKWvKR.js} (68%) rename server/public/admin/assets/{weapp-DW2TbfPE.js => weapp-BJhVJMzf.js} (93%) rename server/public/admin/assets/{website-C07ff7gg.js => website-ClrkKLFi.js} (91%) rename server/public/admin/assets/{wx_oa-BKhVBZCv.js => wx_oa-XX2NYgn-.js} (93%) rename server/public/admin/assets/{yeji-C7o7REJ8.js => yeji-BZ4k2XdF.js} (99%) create mode 100644 server/public/admin/assets/yeji-edit-Cw08tFhe.js delete mode 100644 server/public/admin/assets/yeji-edit-D-uxtVth.js rename server/public/admin/assets/{yeji-edit.vue_vue_type_script_setup_true_lang-CGpuUW-z.js => yeji-edit.vue_vue_type_script_setup_true_lang-BZL9OmXb.js} (96%) create mode 100644 server/sql/1.9.20260805/upgrade_qywx_customer_acquisition_api.sql create mode 100644 server/sql/1.9.20260805/upgrade_qywx_customer_acquisition_customers.sql create mode 100644 server/tests/FirstVisitEffectiveAmountFilterTest.php create mode 100644 server/tests/QywxCustomerAcquisitionApiServiceTest.php create mode 100644 server/tests/QywxCustomerAcquisitionRetryPolicyTest.php create mode 100644 server/tests/WecomAcquisitionCustomerStatisticsSmokeTest.php create mode 100644 server/tests/WecomPromotionOverviewSmokeTest.php diff --git a/admin/src/api/first_visit.ts b/admin/src/api/first_visit.ts index 9e677b3bf..ef3f66669 100644 --- a/admin/src/api/first_visit.ts +++ b/admin/src/api/first_visit.ts @@ -126,7 +126,7 @@ export function myPatientCancelAppointment(params: { id: number }) { } export interface FirstVisitConversionParams { - time_type: 'today' | 'week' | 'month' | 'quarter' | 'year' + time_type: 'today' | 'yesterday' | 'week' | 'month' | 'quarter' | 'year' dept_id?: number assistant_id?: number } @@ -173,14 +173,6 @@ export function wecomPromotionOverview() { return request.get({ url: '/firstvisit.wecomPromotion/overview' }) } -export function wecomPromotionAuthorizationUrl() { - return request.post({ url: '/firstvisit.wecomPromotion/authorizationUrl' }) -} - -export function wecomPromotionVerifyAccount(params: { id: number }) { - return request.post({ url: '/firstvisit.wecomPromotion/verifyAccount', params }) -} - export function wecomPromotionSavePool(params: Record) { return request.post({ url: '/firstvisit.wecomPromotion/savePool', params }) } @@ -193,6 +185,22 @@ export function wecomPromotionSaveLink(params: Record) { return request.post({ url: '/firstvisit.wecomPromotion/saveLink', params }) } +export function wecomPromotionCheckApiPermission() { + return request.post({ url: '/firstvisit.wecomPromotion/checkApiPermission' }) +} + +export function wecomPromotionSyncRemoteLinks(params: { pool_id: number }) { + return request.post({ url: '/firstvisit.wecomPromotion/syncRemoteLinks', params, timeout: 120000 }) +} + +export function wecomPromotionRemoteLinkDetail(params: { id: number }) { + return request.get({ url: '/firstvisit.wecomPromotion/remoteLinkDetail', params }) +} + +export function wecomPromotionDeleteRemoteLink(params: { id: number }) { + return request.post({ url: '/firstvisit.wecomPromotion/deleteRemoteLink', params }) +} + export function wecomPromotionToggleLink(params: { id: number; status: number }) { return request.post({ url: '/firstvisit.wecomPromotion/toggleLink', params }) } @@ -200,3 +208,61 @@ export function wecomPromotionToggleLink(params: { id: number; status: number }) export function wecomPromotionDeleteLink(params: { id: number }) { return request.post({ url: '/firstvisit.wecomPromotion/deleteLink', params }) } + +export type WecomPromotionCustomerChatStatus = '' | 'messaged' | 'silent' | 'unknown' + +export interface WecomPromotionCustomerStatsParams { + page_no: number + page_size: number + promotion_link_id?: number + userid?: string + chat_status?: 0 | 1 | 2 +} + +export interface WecomPromotionCustomerStatsSummary { + customer_count: number + messaged_customer_count: number + message_customer_rate: number + received_message_count: number + message_count_known_count: number +} + +export interface WecomPromotionCustomerStatRow { + id?: number + external_userid_masked?: string + customer_id_masked?: string + customer_name_masked?: string + link_id?: number | string + link_name?: string + member_id?: number + member_name?: string + department_name?: string + dept_name?: string + has_messaged?: boolean | number + chat_status?: 0 | 1 | 2 + message_count_known?: boolean | number + received_message_count?: number + last_synced_at?: string + last_message_at?: string +} + +export interface WecomPromotionCustomerStatsResult { + summary?: Partial + lists?: WecomPromotionCustomerStatRow[] + total?: number + link_options?: Array<{ id: number | string; name: string }> + member_options?: Array<{ id: number; name: string; department_name?: string; dept_name?: string }> + meta?: { last_synced_at?: string } +} + +/** 获客客户消息统计:服务端继续按当前角色和部门数据范围收窄。 */ +export function wecomPromotionCustomerStats(params: WecomPromotionCustomerStatsParams) { + return request.get( + { url: '/firstvisit.wecomPromotion/customerStatistics', params, timeout: 120000 }, + { ignoreCancelToken: true } + ) +} + +export function wecomPromotionSyncCustomers(params: { promotion_link_id?: number } = {}) { + return request.post({ url: '/firstvisit.wecomPromotion/syncCustomers', params, timeout: 120000 }) +} diff --git a/admin/src/views/first_visit/conversion/index.vue b/admin/src/views/first_visit/conversion/index.vue index c2e125965..27123a093 100644 --- a/admin/src/views/first_visit/conversion/index.vue +++ b/admin/src/views/first_visit/conversion/index.vue @@ -67,7 +67,7 @@

部门订单量占比

-

当前范围内审核通过的接诊诊单

+

双审通过,并排除取消、拒收及退款

单位:单
@@ -85,7 +85,7 @@

部门金额占比

-

与诊单金额指标保持同一审核口径

+

仅统计未取消、未拒收且未退款的有效金额

单位:元
@@ -231,6 +231,7 @@ const query = reactive({ time_type: 'today', dept_id const deptTreeProps = { value: 'id', label: 'name', children: 'children' } const timeOptions = [ { label: '今日', value: 'today' }, + { label: '昨天', value: 'yesterday' }, { label: '本周', value: 'week' }, { label: '本月', value: 'month' }, { label: '本季度', value: 'quarter' }, @@ -240,8 +241,8 @@ const metricCards: Array<{ key: string; label: string; type: MetricType; hint: s { key: 'add_fans_count', label: '加粉数', type: 'count', hint: '企微新增客户' }, { key: 'total_open_count', label: '开口数', type: 'count', hint: '来源于个人业绩录入' }, { key: 'interview_count', label: '面诊', type: 'count', hint: '已完成挂号' }, - { key: 'completed_order_count', label: '接诊诊单', type: 'count', hint: '处方与支付审核通过' }, - { key: 'completed_order_amount', label: '诊单金额', type: 'money', hint: '与接诊诊单同口径' }, + { key: 'completed_order_count', label: '接诊诊单', type: 'count', hint: '双审通过,排除取消、拒收及退款' }, + { key: 'completed_order_amount', label: '诊单金额', type: 'money', hint: '仅统计有效诊单金额' }, { key: 'avg_unit_price', label: '平均客单价', type: 'money', hint: '诊单金额 / 接诊诊单' }, { key: 'account_cost', label: '现金成本', type: 'money', hint: '当前范围内实际投放成本' }, { key: 'roi', label: 'ROI', type: 'ratio', hint: '诊单金额 / 投放成本' } diff --git a/admin/src/views/first_visit/my_patients/components/OrderPanel.vue b/admin/src/views/first_visit/my_patients/components/OrderPanel.vue index 469df149f..6b24d6d51 100644 --- a/admin/src/views/first_visit/my_patients/components/OrderPanel.vue +++ b/admin/src/views/first_visit/my_patients/components/OrderPanel.vue @@ -52,9 +52,9 @@
- 订单金额 + 有效订单金额 ¥{{ money(summary.amount) }} - 当前筛选 + 排除取消、拒收及退款
待审核 @@ -98,8 +98,11 @@
- - + +