更新
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
# 企业微信成员范围同步修复
|
||||
|
||||
## 原因与处理
|
||||
|
||||
截图中的“待移出”来自本地禁用状态与上次企微范围不一致。批量修改原来只写入同步队列,依赖后台分钟任务;单独保存忽略了同步器的 `noop`/未完成状态。另有两个一致性缺陷:同步期间配置版本变化后仍返回 synced;周期重算可能将超时租约或尚未应用的版本直接视为完成。
|
||||
|
||||
本次修改:
|
||||
|
||||
- 新增 POST `/firstvisit.wecomPromotion/syncMemberRange`,只向当前有权限操作的方案推送完整可用成员名单,再回读确认。不使用会导入其他链接的 `syncRemoteLinks`。
|
||||
- 批量保存后由页面最多 2 并发调用专用同步接口,等待每个方案结果,不以后台任务启动为本次修改立即生效的前提。
|
||||
- 单独保存、批量保存、手动同步均返回明确的 `synced` / `pending` / `failed` / `blocked` 状态。保存本地成功与远端确认分开显示。
|
||||
- 已下线成员从推送名单排除,部门范围清空;回读仍含旧成员或部门时判失败,不能标同步成功。
|
||||
- 同步完成时检查租约、令牌、配置版本。过期工作不能覆盖新确认快照;变更未完成时继续排队。
|
||||
- 同样的开关状态再次批量保存仍会重算,以修复之前留下的待同步任务。
|
||||
- 页面新增“同步成员范围”按钮和批量失败结果重试,并展示当前计划、上次确认的远端范围与具体同步错误。
|
||||
|
||||
## 部署与现有方案
|
||||
|
||||
本次修改源代码,未部署,未读取业务数据库或调用真实企业微信修改接口。不新增表结构或权限菜单,沿用获客助手页面和方案操作范围权限;需将 admin 构建及 server 修改一起部署。已有队列表仍按原项目要求安装。
|
||||
|
||||
部署后,对已经出现“待移出”的方案点击“同步成员范围”;只有显示“企微成员范围已确认同步”,才能认为当前计划已经由企业微信回读确认。批量重新保存也会主动同步各方案。后台分钟任务仍用于上限、有效期和失败补偿。
|
||||
|
||||
## 验证记录
|
||||
|
||||
见 [前端验证](frontend.md) 与 [隔离数据库验证](backend-tests.md)。所有测试使用虚构数据,未向真实企业微信发送请求。
|
||||
|
||||
生产构建通过(Vite,2 分 4 秒),输出到任务临时目录,未覆盖线上目录。完整输出保留在 `build.log`;仍有既有的大体积分包警告。前端 7 项回归与后端 24 个场景、52 个断言均通过。全量类型检查仍有其他模块的已有报错,详情见前端验证记录。
|
||||
|
||||
浏览器隔离验证已通过:使用实际 Vue 页面和本地 API 替身,初始仅“测试许可”上线、“测试旧医助”仍在远端快照中。手动同步成功后,页面显示仅许可在企微范围,旧医助变为“未在企微范围”;模拟接口失败后,页面保留旧医助“待移出(仍在企微)”,展示具体错误和“重试同步”。验证页及临时服务已关闭。复现入口为 `ui-preview.mjs`,使用本机回环地址和虚构数据。
|
||||
@@ -0,0 +1,31 @@
|
||||
PASS only XuKe is sent and both remote range dimensions are verified
|
||||
PASS GET mismatch rejects old user and remains retryable
|
||||
PASS GET mismatch rejects department expansion and remains retryable
|
||||
PASS transport failure preserves last confirmed snapshot and retry
|
||||
PASS active sync lease cannot be reported as synced or stolen
|
||||
PASS version change during GET reports pending and resyncs
|
||||
PASS lease expiry during GET cannot commit success
|
||||
PASS superseded lease cannot overwrite newer worker snapshot
|
||||
PASS reconcile keeps expired running lease pending despite matching cache
|
||||
PASS reconcile keeps unconfirmed version pending despite matching cache
|
||||
PASS reconcile removes cached departments even when users match
|
||||
PASS explicit retry repairs old pending without changing member switches
|
||||
PASS explicit retry repairs old failed backoff without changing member switches
|
||||
PASS explicit retry active lease returns pending without false success
|
||||
PASS explicit retry API failure remains failed with saved local state
|
||||
PASS no eligible member is blocked and never sends empty official range
|
||||
PASS explicit retry rejects pools outside operator scope
|
||||
PASS batch repeated offline selection requeues the unsynced remote range
|
||||
PASS batch disables both old assistants and queue confirms XuKe only
|
||||
PASS single offline with active worker reports pending then retries successfully
|
||||
PASS single and batch preserve at least one eligible assistant
|
||||
PASS shared operator can retry its own assigned pool
|
||||
PASS retry never revives deleting pool
|
||||
PASS retry never revives delete failed pool
|
||||
{
|
||||
"passed": 24,
|
||||
"failed": 0,
|
||||
"checks": 52,
|
||||
"failures": []
|
||||
}
|
||||
Disposable test database dropped.
|
||||
@@ -0,0 +1,31 @@
|
||||
# 企微成员范围同步回归验证
|
||||
|
||||
2026-09-09 验证通过:**24 个场景,52 个断言,0 失败**。
|
||||
|
||||
- 测试:`server/tests/WecomPromotionMemberSyncTest.php`
|
||||
- 启动脚本:`artifacts/wecom-member-sync/run-backend-tests.ps1`
|
||||
- 完整输出:`artifacts/wecom-member-sync/backend-test-output.log`
|
||||
- 环境:PHP 8.2.9、独立 MySQL 5.7.26、真实 Think ORM 与事务。
|
||||
|
||||
运行命令(仓库根目录):
|
||||
|
||||
```powershell
|
||||
& ./artifacts/wecom-member-sync/run-backend-tests.ps1
|
||||
```
|
||||
|
||||
启动脚本使用随机空闲回环端口、`--no-defaults` 和独立临时 datadir;测试另建随机 `wecom_member_test_*` 数据库。测试仅加载 vendor、框架辅助函数、未初始化的 `think\App` 及显式测试 DB 配置,不读取业务数据库配置或 `.env`。测试使用部署 SQL 中的真实建表定义,API fake 不访问企微。
|
||||
|
||||
验证覆盖:
|
||||
|
||||
1. 仅许可 `XuKe` 启用时,update 精确发送 `user_list=[XuKe]` 和 `department_list=[]`,随后 GET 校验并保存真实返回范围。
|
||||
2. GET 仍含旧医助或非空部门时失败,保留失败原因、原已确认版本和重试计划;本地下线状态保持不变。
|
||||
3. 接口异常保留原已确认远端快照及重试退避。
|
||||
4. 活跃租约不会被抢占或误报已同步;GET 期间版本变化、租约过期或被新工作接管均返回 pending;旧工作不能覆盖新快照。
|
||||
5. 重算不会把过期租约、未应用版本或残留部门误置为已同步。
|
||||
6. 显式重试可修复旧 pending、失败退避以及开关未变化的状态,并准确返回 synced / pending / failed / blocked。
|
||||
7. 实际批量下线两个旧医助后,真实队列服务仅同步 XuKe;重复选择已下线医助仍会重新排队。
|
||||
8. 实际单独下线遇到活跃工作时返回 pending,过期后可重试完成。
|
||||
9. 单独和批量下线都保持至少一名可用医助;空可用范围不会向企微发送空列表。
|
||||
10. 已分配共享操作人可重试自己的方案;无关账号被拒绝;删除中或删除失败的方案不会被同步操作复活。
|
||||
|
||||
最终运行已删除测试数据库、关闭临时 MySQL 进程并移除临时 datadir。未访问线上企微,也未验证真实租户接口权限或实际远端数据;该报告证明本地同步与状态机回归通过。
|
||||
@@ -0,0 +1,494 @@
|
||||
vite v6.4.2 building for production...
|
||||
|
||||
WARN
|
||||
(!) outDir D:\web\zyt\artifacts\wecom-member-sync\admin-build is not inside project root and will not be emptied.
|
||||
Use --emptyOutDir to override.
|
||||
|
||||
|
||||
transforming...
|
||||
✓ 4060 modules transformed.
|
||||
|
||||
WARN node_modules/.pnpm/tcplayer.js@5.3.4-beta.32/node_modules/tcplayer.js/dist/tcplayer.v5.3.4.min.js (3199:26): Use of eval in "node_modules/.pnpm/tcplayer.js@5.3.4-beta.32/node_modules/tcplayer.js/dist/tcplayer.v5.3.4.min.js" is strongly discouraged as it poses security risks and may cause issues with minification.
|
||||
|
||||
rendering chunks...
|
||||
computing gzip size...
|
||||
../artifacts/wecom-member-sync/admin-build/assets/default_avatar-C6VB7PGm.png 6.09 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/no_perms-jDxcYpYC.png 14.62 kB
|
||||
../artifacts/wecom-member-sync/admin-build/index.html 31.87 kB │ gzip: 16.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/login_bg-BkIjQ0FB.png 59.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/red3-NOuWP8DK.png 105.00 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pink3-BxZ4Y6CS.png 108.36 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/blue3-D3K9OqGO.png 108.98 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yellow3-C_qd9cqN.png 109.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/green3-CPorIQiC.png 109.99 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/purple3-BGd0LxTa.png 110.15 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/my_topbg-BiU0PleK.png 142.47 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/red2-Dw8p71sP.png 750.50 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/purple2-C0tQkldV.png 752.33 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/green2-C-VRKLSN.png 756.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yellow2-B-WtqITJ.png 762.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pink2-BpEp33zy.png 806.48 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/blue2-CRQPdLZd.png 806.81 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/red1-C6Y3UuNB.png 1,660.63 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yellow1-Ebw0T5sw.png 1,662.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pink1-BWNZrP7C.png 1,668.56 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/blue1-gLOo1H0w.png 1,676.54 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/purple1-BpMq9FWz.png 1,680.01 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/green1-h1zqes95.png 1,688.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CmFE2aZQ.css 0.04 kB │ gzip: 0.06 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CjSHFu-R.css 0.04 kB │ gzip: 0.06 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Oppei429.css 0.04 kB │ gzip: 0.06 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/CaseRecordList-Cl-c3q7S.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/DietRecordList-Cc-xUr2B.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/roster-CqNlv_rj.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/BloodRecordList-DhVK-Y_e.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-B3imPWFk.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/list-BluNBZln.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/ExerciseRecordList-DGtgtzou.css 0.05 kB │ gzip: 0.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-CObVTcPU.css 0.09 kB │ gzip: 0.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-D-D8bVPM.css 0.09 kB │ gzip: 0.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pc_details-nlJo1_D0.css 0.09 kB │ gzip: 0.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/AppointmentRecordPanel-DC22GDgn.css 0.09 kB │ gzip: 0.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/theme-picker-BsELUxM9.css 0.11 kB │ gzip: 0.09 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Cl-9UIip.css 0.13 kB │ gzip: 0.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/AssignLogPanel-DkQMoEkX.css 0.13 kB │ gzip: 0.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-DXAsZ7EV.css 0.13 kB │ gzip: 0.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-DaxRy47P.css 0.14 kB │ gzip: 0.14 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-CAJZpU7c.css 0.14 kB │ gzip: 0.12 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-DxNvUNZR.css 0.15 kB │ gzip: 0.15 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/useListTimeFilter-DI6SIumd.css 0.16 kB │ gzip: 0.14 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-C1NtFi7N.css 0.16 kB │ gzip: 0.11 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Bd3rHJ5J.css 0.18 kB │ gzip: 0.15 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/change-password-DRfsLJ26.css 0.19 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Dy_alH9u.css 0.19 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/decoration-img-C5XvHl9_.css 0.19 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/account_cost-fbCWUO9k.css 0.20 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-57RdOFNo.css 0.23 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/error-Cz3CexuM.css 0.24 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-D4atl_7z.css 0.25 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-lNortPsv.css 0.27 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/setting-CxqqGetv.css 0.27 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DX96drV3.css 0.28 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/menu-DYFusokT.css 0.29 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/OrderActionHost-DiqybThz.css 0.31 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bk2rMrqw.css 0.32 kB │ gzip: 0.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-D0f1Mn00.css 0.33 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/prescription-drawer-BjwiqvPc.css 0.35 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/bind-work-wechat-BX1gqwq1.css 0.35 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DhR2yeiO.css 0.39 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DoFDMZdP.css 0.40 kB │ gzip: 0.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DBNvK3ZK.css 0.45 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PatientOrderList-D8-uh2iu.css 0.45 kB │ gzip: 0.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/DiagnosisTodoList-D0SBmTHG.css 0.46 kB │ gzip: 0.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/CallRecordPanel-TsjZtTO8.css 0.47 kB │ gzip: 0.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C_LxAEkS.css 0.48 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/login-Bt4SvQsz.css 0.52 kB │ gzip: 0.28 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-sMbqkta2.css 0.55 kB │ gzip: 0.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/RecordingPlaybackBlock-B3KYFgvg.css 0.58 kB │ gzip: 0.26 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/medicine-DO6x6zrS.css 0.58 kB │ gzip: 0.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/preview-pc-BRQDo0AR.css 0.67 kB │ gzip: 0.36 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BzrSkGWL.css 0.67 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tabbar-DJsOahKR.css 0.69 kB │ gzip: 0.31 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/qywx-Dym8iFe0.css 0.74 kB │ gzip: 0.37 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/AssistantWatchCallDialog-BIPZRgaH.css 0.76 kB │ gzip: 0.38 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/picker-JBYDNsl5.css 0.84 kB │ gzip: 0.32 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-phone-CctIyraX.css 0.94 kB │ gzip: 0.34 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/preview-C7oaKmYo.css 0.98 kB │ gzip: 0.41 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bidrbn2Z.css 1.16 kB │ gzip: 0.51 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/TrackingNoteTimeline-B9T8pFso.css 1.18 kB │ gzip: 0.47 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/RecordingVideoPlayer-4DegHAwm.css 1.19 kB │ gzip: 0.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-55HtuLpn.css 1.21 kB │ gzip: 0.55 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PatientInfoCard-n6_UPo9e.css 1.32 kB │ gzip: 0.55 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/TrackingMatrix-zyxtXYPb.css 1.32 kB │ gzip: 0.44 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/SendPanel-DaGPWlQG.css 1.39 kB │ gzip: 0.50 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/picker-XZbUgFct.css 1.57 kB │ gzip: 0.50 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionOrderDetailDrawer-B4rggqa1.css 1.73 kB │ gzip: 0.71 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/ImChatRecordPanel-aX8zpWRQ.css 1.74 kB │ gzip: 0.59 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BYOmK9R5.css 1.93 kB │ gzip: 0.58 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-OgnT0gUo.css 1.98 kB │ gzip: 0.56 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/MessageBubble-BwtdPM6K.css 2.04 kB │ gzip: 0.60 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BmDW9vcs.css 2.44 kB │ gzip: 0.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PatientCaseCard-C3Mob6yG.css 2.49 kB │ gzip: 0.81 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tongji-C0VnzFxy.css 2.49 kB │ gzip: 0.77 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/dept-tongji-ky7rOYoi.css 2.67 kB │ gzip: 0.72 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/readonly-CdP3eZN0.css 2.69 kB │ gzip: 0.92 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/NoteTimeline-I2FSxX4s.css 2.74 kB │ gzip: 0.84 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/patient-call-k8V9hV2G.css 2.85 kB │ gzip: 0.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/DailyMatrix-DCZnxI8i.css 2.87 kB │ gzip: 0.85 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PaibanPanel-aqm8azGc.css 3.35 kB │ gzip: 0.88 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/paiban-BTUHWpUu.css 3.35 kB │ gzip: 0.88 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/appointment-gzuOW_Wp.css 3.43 kB │ gzip: 0.93 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionAiBatchGenerateDialog-CKkykmdr.css 3.45 kB │ gzip: 0.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/h5-BSFcFSny.css 3.52 kB │ gzip: 0.99 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bk7b_sL2.css 3.57 kB │ gzip: 0.96 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/add-ByXRFm8M.css 3.60 kB │ gzip: 0.87 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PromotionAutomationForm-BMhNCJa-.css 3.64 kB │ gzip: 1.03 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mubiao-B6IOi2bJ.css 3.78 kB │ gzip: 1.08 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/WelcomeMessageEditor-DD5mXWP2.css 4.41 kB │ gzip: 1.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionAiReportDialog-CV6AuHV3.css 4.46 kB │ gzip: 1.11 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CMsGEvq_.css 5.19 kB │ gzip: 1.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mubiao-dept-node-ChUPkaxq.css 5.47 kB │ gzip: 1.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/OrderPanel-BzElZPEq.css 5.67 kB │ gzip: 1.46 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DYEnq1RY.css 6.11 kB │ gzip: 1.70 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/list-q8oaox07.css 6.51 kB │ gzip: 1.45 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DtDaTXOB.css 7.01 kB │ gzip: 1.69 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mubiao-dept-card-naMqyghz.css 7.09 kB │ gzip: 1.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-AnyUcdTT.css 7.21 kB │ gzip: 1.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BqGStdXW.css 7.95 kB │ gzip: 2.30 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bw7BJ7QR.css 8.03 kB │ gzip: 1.99 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/progress-99NT9ysL.css 8.14 kB │ gzip: 1.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Cmf8QBsF.css 8.75 kB │ gzip: 1.78 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CSIcxqFk.css 8.85 kB │ gzip: 2.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-B_6Taw4k.css 8.97 kB │ gzip: 1.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-DOd7Lhrw.css 9.47 kB │ gzip: 2.05 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Dnn9ddtX.css 9.49 kB │ gzip: 2.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-D9Td5Y2a.css 9.52 kB │ gzip: 2.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/ProgressPanel-C_aSqDJh.css 10.10 kB │ gzip: 2.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-nUsN4URL.css 10.57 kB │ gzip: 2.04 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DV5JwFnL.css 11.95 kB │ gzip: 2.61 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Dc4ifSiV.css 13.65 kB │ gzip: 3.05 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/commission-settlement-Gy2UsUPr.css 15.55 kB │ gzip: 3.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/list_h5-jFsYJrxI.css 17.68 kB │ gzip: 3.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/order_list-CMCIYVRT.css 18.15 kB │ gzip: 3.76 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C6H7fmYO.css 18.86 kB │ gzip: 3.83 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/WecomFloatingWidgetBuilder-DRWt4rvh.css 19.20 kB │ gzip: 4.00 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index_h5-CWq8J0dT.css 19.54 kB │ gzip: 3.51 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yeji-7-gSVFmd.css 25.24 kB │ gzip: 4.60 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BSycZlsS.css 45.91 kB │ gzip: 9.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/order_list_h5-DB3qJv9G.css 48.13 kB │ gzip: 7.68 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/.pnpm-B3v8nGpq.css 723.50 kB │ gzip: 100.49 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/getExposeType-BhVtb25-.js 0.07 kB │ gzip: 0.09 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-qqeREw9s.js 0.13 kB │ gzip: 0.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-DcOELR-K.js 0.13 kB │ gzip: 0.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-tHefvLXa.js 0.13 kB │ gzip: 0.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/MediaSourceSelect-8A82adC4.js 0.14 kB │ gzip: 0.14 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/code-preview-DRmC7RiQ.js 0.16 kB │ gzip: 0.15 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-X53VrVRm.js 0.18 kB │ gzip: 0.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/refund-log-B9It8rlX.js 0.19 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/account-adjust-qMgPFEex.js 0.19 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Bl11rHMa.js 0.19 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-ne8NsUKb.js 0.19 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Dms_y08P.js 0.19 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-tYml8wxW.js 0.19 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/perm-Cs7Dcdwt.js 0.20 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/diabetes-discovery-display-B_wmGXQJ.js 0.20 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionOrderTimeDialog-Dqm-s38p.js 0.20 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/weapp-z86WO93x.js 0.20 kB │ gzip: 0.15 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/GancaoSubmissionReconcileButton-IPCTzvIw.js 0.21 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Ddgk3Vgk.js 0.21 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-CE55pahX.js 0.21 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-AvD9VAin.js 0.21 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-CboBRRXJ.js 0.21 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-DjOH93eC.js 0.21 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-C4ieP-Hx.js 0.21 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-Dxe0CJRt.js 0.21 kB │ gzip: 0.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-DG0CrN4I.js 0.22 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-awcvFaxy.js 0.22 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-DvEPH3sF.js 0.22 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-menu-form-_sZJZZlo.js 0.22 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/useLockFn-DZaCbVGv.js 0.22 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-DbL-VfLn.js 0.23 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/auth-CzTX0mcP.js 0.24 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-BVUVZ4z1.js 0.25 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/relations-add-Bbfd_-Kp.js 0.25 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mobile-style-DS1gdFbp.js 0.26 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-XEIomOE9.js 0.27 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/cost-edit-BOiGaL17.js 0.30 kB │ gzip: 0.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yeji-edit-F8OmljrO.js 0.30 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/404-cLkY5rts.js 0.31 kB │ gzip: 0.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/data-table-BybaVEqV.js 0.31 kB │ gzip: 0.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-menu-form-edit-CNLd_xiS.js 0.33 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/medicine-DHDpGXRz.js 0.35 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/consumer-FZiu13hZ.js 0.35 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/user-CVW3IWKF.js 0.37 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/role-BMscz-0E.js 0.39 kB │ gzip: 0.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/useDictOptions-B6OsldKP.js 0.42 kB │ gzip: 0.32 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-D4MbHviX.js 0.42 kB │ gzip: 0.32 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/admin-BG9sUQT0.js 0.42 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Czz9V8bo.js 0.44 kB │ gzip: 0.36 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pay-CLNugi0F.js 0.45 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/department-CNIAiYg7.js 0.46 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/menu-p4ALi4Sf.js 0.46 kB │ gzip: 0.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-uGlbGuas.js 0.47 kB │ gzip: 0.37 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-CWDxq6pQ.js 0.48 kB │ gzip: 0.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/post-C0FRzdXA.js 0.49 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/overflow-Bh-ERwlc.js 0.49 kB │ gzip: 0.37 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/decoration-CvKJtp9z.js 0.50 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/message-B01Piuuj.js 0.50 kB │ gzip: 0.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/403-WJpkLdIc.js 0.52 kB │ gzip: 0.44 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/footer.vue_vue_type_script_setup_true_lang-CJd2gVU1.js 0.53 kB │ gzip: 0.38 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-Bj_piHuB.js 0.54 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-DwQmZN66.js 0.54 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/add-nav-CxIe0DSN.js 0.54 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-C8KmKRfj.js 0.54 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/menu-set-C2QaR06b.js 0.54 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-CxOIVUbW.js 0.55 kB │ gzip: 0.26 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/patient-CAccvuDU.js 0.56 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/fans-ymq1y7mi.js 0.60 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-CRgmMBI6.js 0.60 kB │ gzip: 0.28 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-C65vISyn.js 0.61 kB │ gzip: 0.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-DepTsRMB.js 0.61 kB │ gzip: 0.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/diag-display-DCz_VAqj.js 0.61 kB │ gzip: 0.39 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content.vue_vue_type_script_setup_true_lang-BOyQbtb7.js 0.61 kB │ gzip: 0.41 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bgu1hGId.js 0.63 kB │ gzip: 0.43 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-BRVMaOaW.js 0.63 kB │ gzip: 0.32 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/link-D9GAHWRN.js 0.64 kB │ gzip: 0.44 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/asset-MS9grbtE.js 0.67 kB │ gzip: 0.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content.vue_vue_type_script_setup_true_lang-D2f7dQtt.js 0.69 kB │ gzip: 0.45 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/useMediaSourceOptions-B-KC30lN.js 0.70 kB │ gzip: 0.42 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content.vue_vue_type_script_setup_true_lang-CZ5ik_hN.js 0.70 kB │ gzip: 0.45 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/website-B8vbukz_.js 0.74 kB │ gzip: 0.24 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/menu-_vTr8Gju.js 0.76 kB │ gzip: 0.49 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/usePaging-oaNM6A9T.js 0.77 kB │ gzip: 0.47 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/self_input_stats-DN-gl7Ot.js 0.79 kB │ gzip: 0.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/decoration-img-D9zjI4VN.js 0.81 kB │ gzip: 0.50 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/dict-BeF70n9_.js 0.81 kB │ gzip: 0.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/code-IeXe1BXO.js 0.82 kB │ gzip: 0.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/blood-thresholds-CJ1fqMjh.js 0.83 kB │ gzip: 0.34 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-DhfW0oMX.js 0.84 kB │ gzip: 0.55 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content.vue_vue_type_script_setup_true_lang-B7uTRM6j.js 0.86 kB │ gzip: 0.55 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index.vue_vue_type_script_setup_true_lang-kAZgL5aN.js 0.86 kB │ gzip: 0.52 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index.vue_vue_type_script_setup_true_lang-CDLrQsa9.js 0.88 kB │ gzip: 0.51 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/error-DqXjSnDQ.js 0.89 kB │ gzip: 0.60 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/theme-picker-CJcYdGjg.js 0.92 kB │ gzip: 0.59 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/wecomOauthPostMessage-C_e6VGrO.js 0.95 kB │ gzip: 0.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index.vue_vue_type_script_setup_true_lang-Cmgm_Z5P.js 0.98 kB │ gzip: 0.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/wx_oa-BX1EksXU.js 1.04 kB │ gzip: 0.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/article-C_uwRm-g.js 1.07 kB │ gzip: 0.26 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-setting.vue_vue_type_script_setup_true_lang-C1N5GjJr.js 1.08 kB │ gzip: 0.61 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/rich_text-DHfEzg2F.js 1.10 kB │ gzip: 0.58 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/cache-DwXb7UJT.js 1.13 kB │ gzip: 0.69 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DCOziDmg.js 1.21 kB │ gzip: 0.70 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/popover_input-pPM8UqwF.js 1.25 kB │ gzip: 0.59 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/finance-aNuyRBoJ.js 1.30 kB │ gzip: 0.37 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pc-Bg3ZB7sY.js 1.31 kB │ gzip: 0.78 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/doctor-CK2s5tr0.js 1.32 kB │ gzip: 0.37 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-menu-form-edit.vue_vue_type_script_setup_true_lang-CRAXblPZ.js 1.33 kB │ gzip: 0.78 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-BYP2_Tvt.js 1.33 kB │ gzip: 0.72 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-CbdFdpr9.js 1.37 kB │ gzip: 0.70 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-DNecD5Ej.js 1.38 kB │ gzip: 0.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/file-Bp3s6tGU.js 1.41 kB │ gzip: 0.64 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/upload-B7edCrM6.js 1.41 kB │ gzip: 0.64 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content-Btz_MAcB.js 1.42 kB │ gzip: 0.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/code-preview.vue_vue_type_script_setup_true_lang-uoGImbA_.js 1.44 kB │ gzip: 0.85 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Eef1y49A.js 1.44 kB │ gzip: 0.85 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index.vue_vue_type_style_index_0_lang-YvOGf2LN.js 1.46 kB │ gzip: 0.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-phone-BSc3cQZO.js 1.47 kB │ gzip: 0.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-C5crH6QC.js 1.50 kB │ gzip: 0.76 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/menu-D0XeSt7x.js 1.55 kB │ gzip: 0.87 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/MediaSourceSelect.vue_vue_type_script_setup_true_lang-xuHF5G6T.js 1.58 kB │ gzip: 0.80 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PatientInfoCard-DS1nmIqs.js 1.60 kB │ gzip: 0.82 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-CzFCY2cx.js 1.62 kB │ gzip: 0.71 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/style-Dr3deMtC.js 1.62 kB │ gzip: 0.88 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/refund-log.vue_vue_type_script_setup_true_lang-MUi35Imc.js 1.66 kB │ gzip: 0.87 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/statistics-CJjYO2rr.js 1.69 kB │ gzip: 1.02 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-I0pt-6bF.js 1.71 kB │ gzip: 0.81 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/order-BUKOtASo.js 1.74 kB │ gzip: 0.44 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/environment-DWwJCNO7.js 1.74 kB │ gzip: 0.74 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/setup-DiCR4FTt.js 1.77 kB │ gzip: 1.00 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/useMenuOa-BkNkTb8E.js 1.82 kB │ gzip: 0.85 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-setting-u7gF0hf4.js 1.88 kB │ gzip: 0.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-d48aBo9A.js 1.90 kB │ gzip: 0.99 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-QYQSHa-u.js 1.94 kB │ gzip: 1.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C2cPGRvp.js 2.03 kB │ gzip: 0.98 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-bKgIS70c.js 2.04 kB │ gzip: 1.14 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/TrackingNoteTimeline-xYwE1xTb.js 2.08 kB │ gzip: 1.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Xkc1_OtQ.js 2.09 kB │ gzip: 1.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-B6HGq-9K.js 2.09 kB │ gzip: 0.95 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/open_setting-9okEzl7R.js 2.10 kB │ gzip: 1.12 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bgd9wlhP.js 2.12 kB │ gzip: 1.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/account-adjust.vue_vue_type_script_setup_true_lang-D-3zXgHH.js 2.16 kB │ gzip: 1.12 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/filing-CyXPFn3v.js 2.17 kB │ gzip: 1.17 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Cj99LS1q.js 2.18 kB │ gzip: 1.28 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/icon-Bns0PfYA.js 2.23 kB │ gzip: 0.82 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/content.vue_vue_type_script_setup_true_lang-DhnZ5uUj.js 2.24 kB │ gzip: 1.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-BOJvKXiZ.js 2.28 kB │ gzip: 1.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-BStMM2L3.js 2.29 kB │ gzip: 1.09 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index.vue_vue_type_script_setup_true_lang-BBhGStE3.js 2.37 kB │ gzip: 1.15 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/RecordingPlaybackBlock-DqgFGONg.js 2.40 kB │ gzip: 1.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/auth.vue_vue_type_script_setup_true_lang-gsN33aVY.js 2.40 kB │ gzip: 1.33 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/stats-DnnjDn0w.js 2.45 kB │ gzip: 0.58 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/data-table.vue_vue_type_script_setup_true_lang--ailqOCz.js 2.51 kB │ gzip: 1.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-attr-CUvkQdHO.js 2.51 kB │ gzip: 1.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-C5GzP6lG.js 2.52 kB │ gzip: 1.21 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/h5-DSNR1Mm7.js 2.56 kB │ gzip: 1.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/change-password-ta6h_6OO.js 2.57 kB │ gzip: 1.35 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/im-business-message-parse-kN-fWnvR.js 2.60 kB │ gzip: 1.28 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/add-nav.vue_vue_type_script_setup_true_lang-CFknNh-L.js 2.61 kB │ gzip: 1.26 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tabbar-C88gPo2h.js 2.66 kB │ gzip: 1.33 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/file-CMovQJ90.js 2.73 kB │ gzip: 1.06 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-RehJztW-.js 2.74 kB │ gzip: 1.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionOrderTimeDialog.vue_vue_type_script_setup_true_lang-Cpki_pAM.js 2.77 kB │ gzip: 1.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/oa-menu-form.vue_vue_type_script_setup_true_lang-C-68I4vC.js 2.77 kB │ gzip: 1.08 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/CaseRecordList-8zdwttyu.js 2.80 kB │ gzip: 1.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-CLLhcmpE.js 2.81 kB │ gzip: 1.06 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DiASvNNV.js 2.85 kB │ gzip: 1.34 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/follow_reply-CSorma7I.js 2.85 kB │ gzip: 1.49 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Bffw7YqJ.js 2.86 kB │ gzip: 1.44 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/cost-edit.vue_vue_type_script_setup_true_lang-Cmvbgg8a.js 2.86 kB │ gzip: 1.35 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-CtES0DRg.js 2.89 kB │ gzip: 1.41 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/default_reply-CscRdIJ0.js 2.91 kB │ gzip: 1.54 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-0LKRFKuR.js 2.96 kB │ gzip: 1.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/protocol-ZLC8fa4K.js 2.98 kB │ gzip: 1.10 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-B-G1Tu-E.js 2.99 kB │ gzip: 1.45 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mubiao-dept-node-CBylWf1i.js 3.03 kB │ gzip: 1.25 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/relations-add.vue_vue_type_script_setup_true_lang-aR2rU0ed.js 3.04 kB │ gzip: 1.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/picker.vue_vue_type_script_setup_true_lang-BfUAGTj-.js 3.05 kB │ gzip: 1.50 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/AssignLogPanel-bKGiDzvs.js 3.06 kB │ gzip: 1.48 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/keyword_reply-CsSFhqK2.js 3.11 kB │ gzip: 1.60 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-BpbTpEr6.js 3.12 kB │ gzip: 1.52 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C7CPelVN.js 3.21 kB │ gzip: 1.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-Ci8Hxg9H.js 3.25 kB │ gzip: 1.47 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/menu-set.vue_vue_type_script_setup_true_lang-DIhktTQ1.js 3.26 kB │ gzip: 1.40 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/pc_details-DLsyGZVY.js 3.39 kB │ gzip: 1.49 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-EK1ZoXzo.js 3.39 kB │ gzip: 1.45 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-B4DqQN1y.js 3.42 kB │ gzip: 1.53 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-F1TVtlEt.js 3.43 kB │ gzip: 1.64 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/GancaoSubmissionReconcileButton.vue_vue_type_script_setup_true_lang-CXsYk_L_.js 3.44 kB │ gzip: 1.70 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/balance_details-D1em5rcF.js 3.48 kB │ gzip: 1.63 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Dz-tv5pp.js 3.48 kB │ gzip: 1.64 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index.vue_vue_type_script_setup_true_lang-BkG4Pyop.js 3.52 kB │ gzip: 1.56 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/journal-B3VHOvYL.js 3.73 kB │ gzip: 1.46 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-S15Fn-vv.js 3.73 kB │ gzip: 1.57 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/detail-BN8q6bc8.js 3.76 kB │ gzip: 1.55 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/AssistantWatchCallDialog-D6ItC7fG.js 3.78 kB │ gzip: 1.85 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/CallRecordPanel-BkgzguRi.js 3.78 kB │ gzip: 1.77 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-D8D8cWM0.js 3.91 kB │ gzip: 1.71 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/preview-pc-BUr4tqb-.js 3.98 kB │ gzip: 1.63 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/AppointmentRecordPanel-DofowFlu.js 4.02 kB │ gzip: 1.73 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-ccE_MiO_.js 4.11 kB │ gzip: 1.65 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CyvXSol2.js 4.11 kB │ gzip: 1.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/first_visit-BgsXe0rB.js 4.13 kB │ gzip: 0.89 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/detail-D2efPnyJ.js 4.15 kB │ gzip: 1.56 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/MessageBubble-CNAEZB2M.js 4.17 kB │ gzip: 1.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C1yhlKda.js 4.22 kB │ gzip: 1.92 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/useListTimeFilter-DmwzA9pt.js 4.26 kB │ gzip: 1.52 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Cf0PaHkM.js 4.37 kB │ gzip: 2.14 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/bind-work-wechat-D86sStWr.js 4.40 kB │ gzip: 2.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/recharge_record-CYVPA2q8.js 4.43 kB │ gzip: 1.87 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C4phnhkw.js 4.45 kB │ gzip: 1.79 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Dcp58BAx.js 4.47 kB │ gzip: 1.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BYfcmOIK.js 4.49 kB │ gzip: 1.96 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-D7s6xUn-.js 4.49 kB │ gzip: 1.96 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/preview-C8KaKJOT.js 4.49 kB │ gzip: 1.70 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-BO2nUIFI.js 4.51 kB │ gzip: 1.75 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/RecordingVideoPlayer-DG_ItJGl.js 4.53 kB │ gzip: 2.26 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/ImChatRecordPanel-DBsLrdAR.js 4.54 kB │ gzip: 2.40 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BGjkic1N.js 4.55 kB │ gzip: 1.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/paiban-BHVNKfBv.js 4.56 kB │ gzip: 2.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CCjsau_X.js 4.57 kB │ gzip: 1.33 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/login_register-BUwvSc4G.js 4.59 kB │ gzip: 2.01 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/dept-tongji-D3yDbmue.js 4.66 kB │ gzip: 2.04 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-diGjfvCp.js 4.76 kB │ gzip: 2.05 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr.vue_vue_type_script_setup_true_lang-BrN1pP87.js 4.92 kB │ gzip: 2.04 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-B9rCxYXv.js 5.04 kB │ gzip: 1.99 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-BKQXUJgT.js 5.18 kB │ gzip: 2.03 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PaibanPanel-LklYduy4.js 5.28 kB │ gzip: 2.43 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CQBKhK32.js 5.32 kB │ gzip: 2.19 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C5quTqHH.js 5.53 kB │ gzip: 2.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mubiao-spsl5dpC.js 5.55 kB │ gzip: 2.56 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yeji-edit.vue_vue_type_script_setup_true_lang-CpWA2Fm9.js 5.56 kB │ gzip: 1.81 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mobile-style.vue_vue_type_script_setup_true_lang-Cd_o1G2a.js 5.59 kB │ gzip: 1.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/ExerciseRecordList-2DnzVhG1.js 5.62 kB │ gzip: 2.16 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/attr-BEKvhJVW.js 5.62 kB │ gzip: 2.24 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tongji-DdsvLKqf.js 5.66 kB │ gzip: 2.31 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PatientOrderList-SLHonpPV.js 5.82 kB │ gzip: 2.84 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/DietRecordList-DXFlk9Hu.js 5.84 kB │ gzip: 2.01 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/mubiao-dept-card-BvVBrj2J.js 5.91 kB │ gzip: 2.38 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/login-DahMaDyR.js 6.03 kB │ gzip: 2.72 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/refund_record-tVmHQHkz.js 6.27 kB │ gzip: 2.33 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/DiagnosisTodoList-DL7sSeE_.js 6.34 kB │ gzip: 2.89 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-B3CV61hr.js 6.35 kB │ gzip: 3.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/information-CkVlFtW3.js 6.36 kB │ gzip: 1.80 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/NoteTimeline-DrUjWbF8.js 6.48 kB │ gzip: 2.60 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/account_cost-D0LoQOBc.js 6.56 kB │ gzip: 2.86 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PatientCaseCard-CGXlt3-4.js 6.61 kB │ gzip: 2.34 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CBmrTp4t.js 6.61 kB │ gzip: 2.62 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-MiIcWS8C.js 6.77 kB │ gzip: 2.89 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/readonly-BvagAVZz.js 6.98 kB │ gzip: 2.69 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/picker-L0C-vjJL.js 7.32 kB │ gzip: 3.18 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit.vue_vue_type_script_setup_true_lang-B2Ih0vdW.js 7.35 kB │ gzip: 2.66 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/setting-B0hbjCIa.js 7.35 kB │ gzip: 2.93 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/weapp-DXM2HiOo.js 7.39 kB │ gzip: 2.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/prescription-order-utils-CXfs2Bra.js 7.62 kB │ gzip: 3.11 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Dlg6Bi8D.js 7.65 kB │ gzip: 3.13 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/config-BcLOIFO3.js 7.77 kB │ gzip: 2.59 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/TrackingMatrix-DOwGys12.js 7.84 kB │ gzip: 3.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/patient-call-Y8nXiKQB.js 7.85 kB │ gzip: 3.24 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/dayjs-CF5xpNFg.js 8.07 kB │ gzip: 3.45 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tcm-DXNwz16C.js 8.99 kB │ gzip: 1.57 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-CNbGRUOL.js 9.00 kB │ gzip: 2.83 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tim-upload-plugin-B7yxlBgj.js 9.47 kB │ gzip: 3.61 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-C3eHLn0f.js 9.49 kB │ gzip: 3.84 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/BloodRecordList-DDUvca7F.js 9.58 kB │ gzip: 3.33 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/medicine-C5ovRLd1.js 9.74 kB │ gzip: 3.56 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-BU-RSgIR.js 9.99 kB │ gzip: 3.55 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BaNoRHB2.js 10.06 kB │ gzip: 3.98 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DPwU-iXs.js 10.33 kB │ gzip: 3.89 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionAiBatchGenerateDialog-MAUu97Gq.js 10.36 kB │ gzip: 4.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/SendPanel-CP6ywpBj.js 10.37 kB │ gzip: 3.57 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/progress-Bdpacf-D.js 11.18 kB │ gzip: 4.59 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/list-DLWc-1Ay.js 11.18 kB │ gzip: 4.03 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DI3xU_bx.js 11.30 kB │ gzip: 4.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/appointment-BnHZdDEA.js 11.34 kB │ gzip: 4.24 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-D7zgLcEk.js 11.44 kB │ gzip: 3.76 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/OrderPanel-BeU2BFQj.js 11.74 kB │ gzip: 4.22 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/picker-BmsTkGwL.js 12.15 kB │ gzip: 4.49 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/ProgressPanel-ud8QcUjn.js 12.58 kB │ gzip: 4.48 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/prescription-drawer-FdfeYO6a.js 12.76 kB │ gzip: 3.88 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-hktqVhuc.js 13.00 kB │ gzip: 4.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-Brf9bxlj.js 13.11 kB │ gzip: 3.91 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/h5-CcXRh9Cg.js 13.83 kB │ gzip: 4.40 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CWW_NfST.js 14.26 kB │ gzip: 5.90 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/guahao-DcHTagDB.js 14.96 kB │ gzip: 4.41 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/WecomFloatingWidgetBuilder--gBah4yP.js 15.22 kB │ gzip: 6.02 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-6M0lWcGt.js 15.52 kB │ gzip: 6.41 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DZLpymXv.js 15.90 kB │ gzip: 5.20 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-BbgFd2kT.js 15.90 kB │ gzip: 4.70 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-D0fXfjGU.js 16.34 kB │ gzip: 6.06 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DogyaUiZ.js 16.35 kB │ gzip: 5.11 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-D58SNEFF.js 16.60 kB │ gzip: 6.07 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionAiReportDialog-Bu6VbnFg.js 17.15 kB │ gzip: 6.47 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-mbKhz0ZD.js 17.84 kB │ gzip: 6.02 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/roster-BiU7KYHE.js 18.09 kB │ gzip: 5.71 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-KaH-WGp4.js 18.19 kB │ gzip: 6.88 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PromotionAutomationForm-Dl6eSdrv.js 18.23 kB │ gzip: 6.37 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-KtwiGqvr.js 18.60 kB │ gzip: 5.23 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/WelcomeMessageEditor-lo-w_F0X.js 19.11 kB │ gzip: 6.95 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/OrderActionHost-B1_31moq.js 21.16 kB │ gzip: 6.02 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-B6abcro-.js 21.91 kB │ gzip: 7.87 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/add-DZ_NopBp.js 22.29 kB │ gzip: 5.36 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CPsxxVLT.js 22.76 kB │ gzip: 7.97 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/DailyMatrix-CUZg4BRS.js 24.97 kB │ gzip: 7.09 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/list_h5-BQk1KH7b.js 27.36 kB │ gzip: 9.29 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/list-CHJTYjNq.js 29.93 kB │ gzip: 9.61 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/qywx-vbiMVYqv.js 30.35 kB │ gzip: 10.01 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/commission-settlement-rcwbrTnB.js 35.83 kB │ gzip: 9.75 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/edit-DUaMYFnP.js 35.86 kB │ gzip: 9.02 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-BxaPQXKm.js 36.24 kB │ gzip: 12.99 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CwotNYII.js 36.70 kB │ gzip: 11.82 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index_h5-BKLNAJoN.js 37.44 kB │ gzip: 11.46 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-GLDXkTd_.js 40.10 kB │ gzip: 11.87 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/PrescriptionOrderDetailDrawer-C0hb8NZr.js 48.77 kB │ gzip: 13.48 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-JRqlrlqw.js 50.72 kB │ gzip: 14.98 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DmecxuyG.js 55.03 kB │ gzip: 15.89 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/tim-profanity-filter-plugin-BJ7z5puq.js 55.90 kB │ gzip: 21.04 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-DYj8tK9D.js 67.65 kB │ gzip: 20.68 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/rtc-detect-CAvkmauD.js 74.80 kB │ gzip: 25.93 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/yeji-5JxNzYB_.js 87.40 kB │ gzip: 23.27 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-RIkBLGnV.js 88.42 kB │ gzip: 25.66 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/order_list-C6JoI8wj.js 114.89 kB │ gzip: 31.81 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/order_list_h5-DFg5JSxg.js 139.58 kB │ gzip: 36.82 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/@tencentcloud/chat-uikit-engine-BJz4IWsw.js 162.84 kB │ gzip: 41.72 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/index-CE4okNZ0.js 290.16 kB │ gzip: 92.01 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/@tencentcloud/chat-Bg29VzHQ.js 725.88 kB │ gzip: 178.89 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/@tencentcloud/call-engine-js-CRx4G1jN.js 2,290.42 kB │ gzip: 749.64 kB
|
||||
../artifacts/wecom-member-sync/admin-build/assets/.pnpm-BHOjf1ZS.js 18,525.72 kB │ gzip: 5,519.46 kB
|
||||
|
||||
WARN
|
||||
(!) Some chunks are larger than 500 kB after minification. Consider:
|
||||
- Using dynamic import() to code-split the application
|
||||
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
|
||||
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
|
||||
|
||||
✓ built in 2m 4s
|
||||
@@ -0,0 +1,45 @@
|
||||
# 企业微信获客成员范围同步:前端修复
|
||||
|
||||
## 诊断
|
||||
|
||||
- 单独开关原先只检查 `sync_error`,为空就提示“企微多人路由范围已重新计算”;该字段无法区分同步已确认、任务仍在排队、活跃租约导致未执行等情况。
|
||||
- 批量保存原先只提示后台同步,没有主动消费成功入队的方案;分钟任务未运行时本地规则可以长期与官方链接不一致。
|
||||
- `is_in_remote_range` 来自官方链接上次确认的 `range_user_json`,并非本地 enabled 状态。“待移出”代表成员仍在记录中的企微范围,确实可能继续获客。
|
||||
- 原有 `syncRemoteLinks` 是企业微信链接列表导入接口,会扫描 `listLinks/getLink` 并 upsert,本次没有将它误用为推送当前方案成员范围的入口。
|
||||
|
||||
## 最终行为
|
||||
|
||||
- 接入新的 `POST /firstvisit.wecomPromotion/syncMemberRange`,只提交指定 `pool_id`,使用 120 秒超时并关闭 HTTP 自动重试。
|
||||
- 保存方案、保存成员规则、单独切换成员,仅在后端明确返回 `sync_status: synced` 时提示企微成员范围已确认同步;旧服务端缺少该字段时保守显示尚未确认同步。
|
||||
- 批量保存成功且 `sync_queued` 的方案立即进行专用范围同步,最多并发 2 个,全部等待结束再完成交互。对话框页脚显示同步进度,未完成时禁止关闭。
|
||||
- 按方案保留本地保存结果、企微同步结果及具体错误。保存失败或同步未确认的方案保持勾选,允许重试;pending 不做无界重复请求。
|
||||
- 方案顶部提供“同步成员范围”,结果列表提供“重试同步”。权限沿用方案 `can_operate`,必须已有官方链接。
|
||||
- 页面明确展示“当前计划”和“上次企微确认”成员及确认时间,保留服务端 `last_error`;行状态改为“企微范围内”“待移出(仍在企微)”“待加入企微”“未在企微范围”。
|
||||
|
||||
## 文件
|
||||
|
||||
- `admin/src/views/first_visit/wecom_promotion/index.vue`
|
||||
- `admin/src/api/first_visit.ts`
|
||||
- `admin/tests/wecom-promotion-member-sync.test.cjs`
|
||||
|
||||
## 验证
|
||||
|
||||
命令:`cd admin && node --test tests/wecom-promotion-member-sync.test.cjs`
|
||||
|
||||
7 项通过,使用 Vue SFC 真实 setup 编译后执行,并编译模板及 SCSS;API 均为测试替身,不连接数据库或企业微信。
|
||||
|
||||
1. 本地禁用而远端仍包含的成员明确显示待移出,展示实际同步错误。
|
||||
2. 单成员切换不把空错误和计划入队误判为企微同步成功。
|
||||
3. 单成员规则保存保留企微失败原因,只接受明确 synced 确认。
|
||||
4. 方案保存 pending 时保持警告。
|
||||
5. 手动重试只调用指定方案专用接口,并检查操作权限。
|
||||
6. 批量同步最多两并发,等待全部结果;本地保存失败项不会请求企微同步。
|
||||
7. 批量保存部分失败和企微超时保留逐项错误与选择,不误报整体成功。
|
||||
|
||||
`git diff --check` 对修改文件通过。
|
||||
|
||||
全量 `npx vue-tsc --noEmit --pretty false` 已执行,退出 1。报错位于工作区其他文件(处方、聊天、录音、装修、医生统计等);本次修改的获客助手页面和 `first_visit.ts` 无报错。未为本次修复扩展修改这些独立模块。
|
||||
|
||||
## 验证边界
|
||||
|
||||
没有访问业务数据库、真实企微凭据,也没有发送消息或调用企业微信修改接口。尚未对真实已投放链接执行修复后的同步;需部署匹配的前后端后,在目标方案点击“同步成员范围”,以远端回读确认结果为准。
|
||||
@@ -0,0 +1,65 @@
|
||||
param(
|
||||
[string]$Php = 'D:/phpstudy_pro/Extensions/php/php8.2.9nts/php.exe',
|
||||
[string]$MySqlRoot = 'D:/phpstudy_pro/Extensions/MySQL5.7.26'
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$artifactRoot = [System.IO.Path]::GetFullPath($PSScriptRoot)
|
||||
$workspaceRoot = [System.IO.Path]::GetFullPath((Join-Path $artifactRoot '../..'))
|
||||
$runRoot = [System.IO.Path]::GetFullPath((Join-Path $artifactRoot ('mysql-test-' + [guid]::NewGuid().ToString('N'))))
|
||||
if (-not $runRoot.StartsWith($artifactRoot + [System.IO.Path]::DirectorySeparatorChar, [System.StringComparison]::OrdinalIgnoreCase)) {
|
||||
throw 'Disposable data directory escaped its artifact directory.'
|
||||
}
|
||||
$dataRoot = Join-Path $runRoot 'data'
|
||||
$mysqld = Join-Path $MySqlRoot 'bin/mysqld.exe'
|
||||
$mysqladmin = Join-Path $MySqlRoot 'bin/mysqladmin.exe'
|
||||
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, 0)
|
||||
$listener.Start()
|
||||
$port = $listener.LocalEndpoint.Port
|
||||
$listener.Stop()
|
||||
$mysqlProcess = $null
|
||||
$testExit = 1
|
||||
$previousPort = $env:ZYT_WECOM_MEMBER_TEST_MYSQL_PORT
|
||||
try {
|
||||
New-Item -ItemType Directory -Path $dataRoot -Force | Out-Null
|
||||
$initArguments = @('--no-defaults', '--initialize-insecure', ('--basedir=' + $MySqlRoot), ('--datadir=' + $dataRoot))
|
||||
$initProcess = Start-Process -FilePath $mysqld -ArgumentList $initArguments -WindowStyle Hidden -PassThru -Wait -RedirectStandardError (Join-Path $runRoot 'initialize.log')
|
||||
if ($initProcess.ExitCode -ne 0) { throw 'Disposable MySQL initialization failed.' }
|
||||
$startArguments = @('--no-defaults', ('--basedir=' + $MySqlRoot), ('--datadir=' + $dataRoot), ('--port=' + $port), '--bind-address=127.0.0.1', '--innodb-buffer-pool-size=32M')
|
||||
$mysqlProcess = Start-Process -FilePath $mysqld -ArgumentList $startArguments -WindowStyle Hidden -PassThru -RedirectStandardError (Join-Path $runRoot 'server.log')
|
||||
$ready = $false
|
||||
for ($attempt = 0; $attempt -lt 60; $attempt++) {
|
||||
if ($mysqlProcess.HasExited) { throw 'Disposable MySQL exited before becoming ready.' }
|
||||
$client = [System.Net.Sockets.TcpClient]::new()
|
||||
try {
|
||||
$client.Connect('127.0.0.1', $port)
|
||||
$ready = $true
|
||||
} catch {
|
||||
Start-Sleep -Milliseconds 250
|
||||
} finally {
|
||||
$client.Dispose()
|
||||
}
|
||||
if ($ready) { break }
|
||||
}
|
||||
if (-not $ready) { throw 'Disposable MySQL did not become ready.' }
|
||||
$env:ZYT_WECOM_MEMBER_TEST_MYSQL_PORT = [string]$port
|
||||
& $Php (Join-Path $workspaceRoot 'server/tests/WecomPromotionMemberSyncTest.php') 2>&1 | Tee-Object -FilePath (Join-Path $artifactRoot 'backend-test-output.log')
|
||||
$testExit = $LASTEXITCODE
|
||||
} finally {
|
||||
$env:ZYT_WECOM_MEMBER_TEST_MYSQL_PORT = $previousPort
|
||||
if ($null -ne $mysqlProcess -and -not $mysqlProcess.HasExited) {
|
||||
& $mysqladmin --no-defaults --host=127.0.0.1 ('--port=' + $port) --user=root shutdown 2>$null
|
||||
$mysqlProcess.WaitForExit(10000) | Out-Null
|
||||
if (-not $mysqlProcess.HasExited) {
|
||||
Stop-Process -Id $mysqlProcess.Id -Force
|
||||
$mysqlProcess.WaitForExit(5000) | Out-Null
|
||||
}
|
||||
}
|
||||
$resolvedRunRoot = [System.IO.Path]::GetFullPath($runRoot)
|
||||
if (-not $resolvedRunRoot.StartsWith($artifactRoot + [System.IO.Path]::DirectorySeparatorChar, [System.StringComparison]::OrdinalIgnoreCase) -or (Split-Path $resolvedRunRoot -Leaf) -notmatch '^mysql-test-[a-f0-9]{32}$') {
|
||||
throw 'Refusing to remove an unverified temporary path.'
|
||||
}
|
||||
if (Test-Path -LiteralPath $resolvedRunRoot) { Remove-Item -LiteralPath $resolvedRunRoot -Recurse -Force }
|
||||
Write-Output 'Disposable MySQL stopped and its temporary data directory removed.'
|
||||
}
|
||||
exit $testExit
|
||||
@@ -0,0 +1,70 @@
|
||||
import { createServer } from '../../admin/node_modules/vite/dist/node/index.js'
|
||||
import vue from '../../admin/node_modules/@vitejs/plugin-vue/dist/index.mjs'
|
||||
import fs from 'node:fs'
|
||||
|
||||
const root = 'D:/web/zyt/admin'
|
||||
const apiNames = [...fs.readFileSync(`${root}/src/api/first_visit.ts`, 'utf8').matchAll(/export (?:async )?function (wecomPromotion\w+)\s*\(/g)].map(match => match[1])
|
||||
const members = [
|
||||
{ id: 1, admin_id: 1, name: '测试许可', userid: 'test_xuke', enabled: 1, reception_available: true },
|
||||
{ id: 2, admin_id: 2, name: '测试旧医助', userid: 'test_old', enabled: 0, reception_available: false }
|
||||
].map(member => ({ ...member, dept_ids: [1], dept_names: ['测试部门'], display_dept_id: 1,
|
||||
status: member.enabled, today_count: 0, total_count: 0, daily_limit: 0, is_in_remote_range: true, sync_status: 1 }))
|
||||
const overview = {
|
||||
automation_installed: false, meta: { scope_label: '隔离验证', generated_at: '' },
|
||||
config: { configured: true, ready: true, missing: [], callback_ready: true },
|
||||
summary: { configured_apps: 1, pool_count: 1, online_links: 1, today_clicks: 0 },
|
||||
member_options: members, operator_options: [], department_options: [{ id: 1, name: '测试部门' }], links: [],
|
||||
pools: [{ id: 99, name: '仅许可接待测试方案', public_key: 'test-only', status: 1, member_admin_ids: [1, 2],
|
||||
main_url: 'https://work.weixin.qq.com/ca/test-only', can_operate: true, can_manage_access: true, can_delete: true,
|
||||
operator_admin_ids: [], member_rules: members, automation_config: { backup_member_admin_ids: [] },
|
||||
official_link: { id: 199, remote_link_id: 'test-link', range_userids: ['test_xuke', 'test_old'], range_department_ids: [], last_sync_time: 1788920000 },
|
||||
dispatch_sync: { status: 1, desired_version: 2, applied_version: 1, last_error: '' }
|
||||
}]
|
||||
}
|
||||
const fixture = `const overview = ${JSON.stringify(overview)};
|
||||
async function invoke(name, params) {
|
||||
if (name === 'wecomPromotionOverview') return structuredClone(overview);
|
||||
if (name === 'wecomPromotionSyncMemberRange') {
|
||||
const pool = overview.pools[0];
|
||||
if (new URLSearchParams(location.search).get('mode') === 'failure') {
|
||||
pool.dispatch_sync.status = 3; pool.dispatch_sync.last_error = '模拟企微网络错误';
|
||||
pool.member_rules.forEach(row => {row.sync_status = 3; row.sync_error = '模拟企微网络错误';});
|
||||
return {pool_id:99,sync_status:'failed',sync_error:'模拟企微网络错误',sync_queued:true};
|
||||
}
|
||||
pool.official_link.range_userids = ['test_xuke']; pool.official_link.last_sync_time = Math.floor(Date.now()/1000);
|
||||
pool.dispatch_sync = {status:0,desired_version:2,applied_version:2,last_error:''};
|
||||
pool.member_rules.forEach(row => {row.is_in_remote_range = row.enabled === 1; row.sync_status = 0;});
|
||||
return {pool_id:99,sync_status:'synced',sync_error:'',sync_queued:false,range_userids:['test_xuke'],range_department_ids:[]};
|
||||
}
|
||||
throw new Error('隔离页面未实现该操作:' + name);
|
||||
}
|
||||
${apiNames.map(name => `export function ${name}(params) {return invoke('${name}',params);}`).join('\n')}`
|
||||
|
||||
const server = await createServer({
|
||||
configFile: false, root, base: '/',
|
||||
cacheDir: 'D:/web/zyt/artifacts/wecom-member-sync/vite-cache',
|
||||
optimizeDeps: { entries: [], include: ['vue', 'element-plus', '@element-plus/icons-vue'] },
|
||||
resolve: { alias: { '@': `${root}/src` } },
|
||||
plugins: [{
|
||||
name: 'member-sync-isolated-fixture', enforce: 'pre',
|
||||
resolveId(id) {
|
||||
if (id === '@/api/first_visit' || id.endsWith('/src/api/first_visit')) return '\0member-sync-api'
|
||||
if (id === '/__member-sync-entry.js') return '\0member-sync-entry'
|
||||
},
|
||||
load(id) {
|
||||
if (id === '\0member-sync-api') return fixture
|
||||
if (id === '\0member-sync-entry') return `import {createApp} from 'vue';import ElementPlus from 'element-plus';import 'element-plus/dist/index.css';import View from '/src/views/first_visit/wecom_promotion/index.vue';createApp(View).use(ElementPlus).mount('#app');`
|
||||
},
|
||||
configureServer(dev) {
|
||||
dev.middlewares.use((req, res, next) => {
|
||||
if (!req.url?.startsWith('/__member-sync-check')) return next()
|
||||
res.setHeader('Content-Type', 'text/html;charset=utf-8')
|
||||
res.end('<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>企微成员同步隔离验证</title></head><body><p>隔离验证:虚构数据,不连接企业微信</p><div id="app"></div><script type="module" src="/__member-sync-entry.js"></script></body></html>')
|
||||
})
|
||||
}
|
||||
}, vue()],
|
||||
server: { host: '127.0.0.1', port: 5587, strictPort: true, open: false }
|
||||
})
|
||||
await server.listen()
|
||||
console.log('Isolated UI: http://127.0.0.1:5587/__member-sync-check')
|
||||
for (const event of ['SIGINT', 'SIGTERM']) process.on(event, async () => { await server.close(); process.exit(0) })
|
||||
Reference in New Issue
Block a user