WXL (wul)
2 天以前 23f74bc3f782d183f66a08bd8ce4790cc61f4e61
测试完成
已添加7个文件
已修改21个文件
已重命名2个文件
4294 ■■■■ 文件已修改
.gitconfig 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
e -i HEAD~1 补丁 | 查看 | 原始文档 | blame | 历史
e -i HEAD~7 442 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
et --hard HEAD@{1} 559 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h origin --force --all 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/external.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/satisfactionse.js 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/order/example.mp3 补丁 | 查看 | 原始文档 | blame | 历史
src/components/CallButton/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/SidebarItem.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/sipService-cs.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/sipService.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/again/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/discharge/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/discharge/outpatientService.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/MergeAndModify.vue 449 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/index.vue 1016 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/physical/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/tasklist/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/zbAgain/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 171 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/education/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/knowledge/questionnaire/compilequer/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/outpatient.vue 319 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/QuestionnaireTask.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sfstatistics/percentage/index.vue 988 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitconfig
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
[user]
    name = WXL (wul)
    email = wl_5969728@163.com
e -i HEAD~1
e -i HEAD~7
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,442 @@
ac8b123 - WXL (wul) <wl_5969728@163.com> : æµ‹è¯•完成
cd51caf - å´é¾™ <wl_5969728@163.com> : æµ‹è¯•完成
b685449 - WXL (wul) <wl_5969728@163.com> : æµ‹è¯•完成
8220a01 - WXL (wul) <wl_5969728@163.com> : æµ‹è¯•完成
488008e - WXL <wl_5969728@163.com> : ä½ çš„æäº¤ä¿¡æ¯
9a164d2 - WXL <wl_5969728@163.com> : ä½ çš„æäº¤ä¿¡æ¯
9403890 - å´é¾™ <wl_5969728@163.com> : æµ‹è¯•完成
022e803 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4898664 - WXL <1785969728@qq.com> : æµ‹è¯•完成
337fb92 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a7a20b2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6f1e7a6 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5fba330 - WXL <1785969728@qq.com> : æµ‹è¯•完成
209b2f7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
53f4f0a - WXL <1785969728@qq.com> : æµ‹è¯•完成
2eff945 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b6c854d - WXL <1785969728@qq.com> : æµ‹è¯•完成
ec2f429 - WXL <1785969728@qq.com> : æµ‹è¯•完成
c1f1ecb - WXL <1785969728@qq.com> : æµ‹è¯•完成
7449ee9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9ed874d - WXL <1785969728@qq.com> : æµ‹è¯•完成
6253746 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5fb8598 - WXL <1785969728@qq.com> : æµ‹è¯•完成
aa06424 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5733abb - WXL <1785969728@qq.com> : æµ‹è¯•完成
9668152 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f06ac34 - WXL <1785969728@qq.com> : æµ‹è¯•完成
20cd2de - WXL <1785969728@qq.com> : æµ‹è¯•完成
fe379fd - WXL <1785969728@qq.com> : æµ‹è¯•完成
9cc3dcf - WXL <1785969728@qq.com> : æµ‹è¯•完成
3ae495d - WXL <1785969728@qq.com> : æµ‹è¯•完成
dafbb90 - WXL <1785969728@qq.com> : æµ‹è¯•完成
665ac63 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9a5dd25 - WXL <1785969728@qq.com> : æµ‹è¯•完成
880e036 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e10381f - WXL <1785969728@qq.com> : æµ‹è¯•完成
c7c591d - WXL <1785969728@qq.com> : æµ‹è¯•完成
af3ff15 - WXL <1785969728@qq.com> : æµ‹è¯•完成
36d1334 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a22820c - WXL <1785969728@qq.com> : æµ‹è¯•完成
f3f7256 - WXL <1785969728@qq.com> : æµ‹è¯•完成
84e20d0 - WXL <1785969728@qq.com> : æµ‹è¯•完成
572a624 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a5bc95e - WXL <1785969728@qq.com> : æµ‹è¯•完成
be764ba - WXL <1785969728@qq.com> : æµ‹è¯•完成
e46bb66 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8ed125f - WXL <1785969728@qq.com> : ç»Ÿè®¡å®Œæˆ
37d2ba3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
45f9797 - WXL <1785969728@qq.com> : æµ‹è¯•完成
0e3739a - WXL <1785969728@qq.com> : æµ‹è¯•完成
54489da - WXL <1785969728@qq.com> : æµ‹è¯•完成
303d443 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5a8e93d - WXL <1785969728@qq.com> : æµ‹è¯•完成
4413b46 - WXL <1785969728@qq.com> : æµ‹è¯•完成
0529f31 - WXL <1785969728@qq.com> : æµ‹è¯•完成
08c27c1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6d7cd13 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8e71817 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b7092c2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
bc241c4 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5e17454 - WXL <1785969728@qq.com> : æµ‹è¯•完成
186b271 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6535680 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6be4939 - WXL <1785969728@qq.com> : æµ‹è¯•完成
400d13d - WXL <1785969728@qq.com> : æµ‹è¯•完成
3877190 - WXL <1785969728@qq.com> : æµ‹è¯•完成
78f514b - WXL <1785969728@qq.com> : æµ‹è¯•完成
fecb2f5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4395f0d - WXL <1785969728@qq.com> : æµ‹è¯•完成
327d234 - WXL <1785969728@qq.com> : æµ‹è¯•完成
56b8443 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8d0f7fc - WXL <1785969728@qq.com> : æµ‹è¯•完成
38c9042 - WXL <1785969728@qq.com> : æµ‹è¯•完成
7d47700 - WXL <1785969728@qq.com> : æµ‹è¯•完成
273e2fa - WXL <1785969728@qq.com> : æµ‹è¯•完成
401c835 - WXL <1785969728@qq.com> : æµ‹è¯•完成
60e5b16 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6e54a66 - WXL <1785969728@qq.com> : æµ‹è¯•完成
ee8f1a0 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5f3691d - WXL <1785969728@qq.com> : æµ‹è¯•完成
4b60348 - WXL <1785969728@qq.com> : æµ‹è¯•完成
418e3a7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4c9eab7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
15e42d9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9f5b4e2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
99a916e - WXL <1785969728@qq.com> : æµ‹è¯•完成
abde816 - WXL <1785969728@qq.com> : æµ‹è¯•完成
81ffbda - WXL <1785969728@qq.com> : æµ‹è¯•完成
935e93f - WXL <1785969728@qq.com> : æµ‹è¯•完成
b73b5dd - WXL <1785969728@qq.com> : æµ‹è¯•完成
2daa54c - WXL <1785969728@qq.com> : æµ‹è¯•完成
073edc9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
838d8b5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
3fd01fa - WXL <1785969728@qq.com> : æµ‹è¯•完成
88481a3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
12eb16c - WXL <1785969728@qq.com> : æµ‹è¯•完成
083ae82 - WXL <1785969728@qq.com> : æµ‹è¯•完成
36b7179 - WXL <1785969728@qq.com> : æµ‹è¯•完成
03a3eff - WXL <1785969728@qq.com> : æµ‹è¯•完成
2b1cfea - WXL <1785969728@qq.com> : æµ‹è¯•完成
ff99a9b - WXL <1785969728@qq.com> : æµ‹è¯•完成
cf2c2a9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a77752e - WXL <1785969728@qq.com> : æµ‹è¯•完成
3bb35f1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b0dd238 - WXL <1785969728@qq.com> : æµ‹è¯•完成
57a7537 - WXL <1785969728@qq.com> : æµ‹è¯•完成
83d8322 - WXL <1785969728@qq.com> : æµ‹è¯•完成
ee1d4af - WXL <1785969728@qq.com> : æµ‹è¯•完成
bcf3cae - WXL <1785969728@qq.com> : æµ‹è¯•完成
d5f7da9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5acc6d2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
355bbb7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a3d2f84 - WXL <1785969728@qq.com> : æµ‹è¯•完成
ee31f47 - WXL <1785969728@qq.com> : æµ‹è¯•完成
bc99b53 - WXL <1785969728@qq.com> : æµ‹è¯•完成
84b1d28 - WXL <1785969728@qq.com> : æµ‹è¯•完成
bfce8d1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
44d24a2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
17edb0e - WXL <1785969728@qq.com> : æµ‹è¯•完成
891f159 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5f4c59e - WXL <1785969728@qq.com> : æµ‹è¯•完成
4f3692a - WXL <1785969728@qq.com> : æµ‹è¯•完成
321891f - WXL <1785969728@qq.com> : æµ‹è¯•完成
3b8d057 - WXL <1785969728@qq.com> : æµ‹è¯•完成
50873f4 - WXL <1785969728@qq.com> : æµ‹è¯•完成
ec64a69 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8aa0592 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a5faf6e - WXL <1785969728@qq.com> : æµ‹è¯•完成
f6bc6ed - WXL <1785969728@qq.com> : æµ‹è¯•完成
46784b2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e48362d - WXL <1785969728@qq.com> : æµ‹è¯•完成
f4e079f - WXL <1785969728@qq.com> : æµ‹è¯•完成
dea82b7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4cd2bfd - WXL <1785969728@qq.com> : æµ‹è¯•完成
7cfedaa - WXL <1785969728@qq.com> : æµ‹è¯•完成
0c2a0bd - WXL <1785969728@qq.com> : æµ‹è¯•完成
48e96f3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
98589bb - WXL <1785969728@qq.com> : æµ‹è¯•完成
fc63b5b - WXL <1785969728@qq.com> : æµ‹è¯•完成
981fbdd - WXL <1785969728@qq.com> : æµ‹è¯•完成
6de02b3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9896138 - WXL <1785969728@qq.com> : æµ‹è¯•完成
aca3443 - WXL <1785969728@qq.com> : æµ‹è¯•完成
1a090a4 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8c79267 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4a7648d - WXL <1785969728@qq.com> : æµ‹è¯•完成
09a1bd5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4492ab0 - WXL <1785969728@qq.com> : æµ‹è¯•完成
eef0168 - WXL <1785969728@qq.com> : æµ‹è¯•完成
080186b - WXL <1785969728@qq.com> : æµ‹è¯•完成
0a4cc3c - WXL <1785969728@qq.com> : æµ‹è¯•完成
1cb1fbf - WXL <1785969728@qq.com> : æµ‹è¯•完成
3dcfdb6 - WXL <1785969728@qq.com> : ä¸½æ°´æäº¤
77fb64c - WXL <1785969728@qq.com> : æ–°åŽæäº¤
9507541 - WXL <1785969728@qq.com> : æ— é”¡æäº¤
07e07d6 - WXL <1785969728@qq.com> : æ–°åŽæäº¤
b26c48a - WXL <1785969728@qq.com> : æµ‹è¯•完成
c1139d1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b1d81d0 - WXL <1785969728@qq.com> : æµ‹è¯•完成
ae117f0 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5dc9d1b - WXL <1785969728@qq.com> : æµ‹è¯•完成
9a1a82e - WXL <1785969728@qq.com> : æµ‹è¯•完成
294e513 - WXL <1785969728@qq.com> : æµ‹è¯•完成
007d388 - WXL <1785969728@qq.com> : æµ‹è¯•完成
bf6643a - WXL <1785969728@qq.com> : æµ‹è¯•完成
2a39af9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
0c26cb5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
196465c - WXL <1785969728@qq.com> : æµ‹è¯•完成
9a9bd52 - WXL <1785969728@qq.com> : æµ‹è¯•完成
7611c86 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b557dde - WXL <1785969728@qq.com> : æµ‹è¯•完成
021f489 - WXL <1785969728@qq.com> : æµ‹è¯•完成
df311bf - WXL <1785969728@qq.com> : æµ‹è¯•完成
7fca01a - WXL <1785969728@qq.com> : æµ‹è¯•完成
a7c11f4 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f2d3945 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f1d0ce1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b229d5e - WXL <1785969728@qq.com> : æµ‹è¯•完成
0a9c173 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6f35ca7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b10795e - WXL <1785969728@qq.com> : æµ‹è¯•完成
cdba63e - WXL <1785969728@qq.com> : æµ‹è¯•完成
83598fa - WXL <1785969728@qq.com> : æµ‹è¯•完成
9da8c98 - WXL <1785969728@qq.com> : æµ‹è¯•完成
39bb435 - WXL <1785969728@qq.com> : æµ‹è¯•完成
2fe94c2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
7e1ced1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
476569c - WXL <1785969728@qq.com> : æµ‹è¯•完成
83898e6 - WXL <1785969728@qq.com> : æµ‹è¯•完成
2c4c416 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b5a56d5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
2073439 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5c35457 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4e6c841 - WXL <1785969728@qq.com> : æµ‹è¯•完成
d27e3ad - WXL <1785969728@qq.com> : æµ‹è¯•完成
9ff0d92 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a49ce34 - WXL <1785969728@qq.com> : æµ‹è¯•完成
88d423c - WXL <1785969728@qq.com> : æµ‹è¯•完成
df59cae - WXL <1785969728@qq.com> : æµ‹è¯•完成
44fe7b7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
7eaee92 - WXL <1785969728@qq.com> : æµ‹è¯•完成
aa055fa - WXL <1785969728@qq.com> : æµ‹è¯•完成
d03829b - WXL <1785969728@qq.com> : æµ‹è¯•完成
a346cfb - WXL <1785969728@qq.com> : æµ‹è¯•完成
8dcf298 - WXL <1785969728@qq.com> : æµ‹è¯•完成
c73a2c3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
c4f2875 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b50917f - WXL <1785969728@qq.com> : æµ‹è¯•完成
62bfa86 - WXL <1785969728@qq.com> : æµ‹è¯•完成
0733833 - WXL <1785969728@qq.com> : æµ‹è¯•完成
09b701d - WXL <1785969728@qq.com> : æµ‹è¯•完成
adf7c94 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9bc2723 - WXL <1785969728@qq.com> : æµ‹è¯•完成
720f7c4 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8904734 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8aca823 - WXL <1785969728@qq.com> : æµ‹è¯•完成
d1367a2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
1b7eb08 - WXL <1785969728@qq.com> : æµ‹è¯•完成
fe7f65e - WXL <1785969728@qq.com> : æµ‹è¯•完成
77a9385 - WXL <1785969728@qq.com> : æµ‹è¯•完成
17b041e - WXL <1785969728@qq.com> : æµ‹è¯•完成
e13d441 - WXL <1785969728@qq.com> : æµ‹è¯•完成
ad0ecac - WXL <1785969728@qq.com> : æµ‹è¯•完成
9201094 - WXL <1785969728@qq.com> : æµ‹è¯•完成
d96a756 - WXL <1785969728@qq.com> : æµ‹è¯•完成
1811ac2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a9a1a5c - WXL <1785969728@qq.com> : æµ‹è¯•完成
bac13bc - WXL <1785969728@qq.com> : æµ‹è¯•完成
41b1f52 - WXL <1785969728@qq.com> : æµ‹è¯•完成
2599fae - WXL <1785969728@qq.com> : æµ‹è¯•完成
8ec6407 - WXL <1785969728@qq.com> : æµ‹è¯•完成
3d50e2c - WXL <1785969728@qq.com> : æµ‹è¯•完成
2c9ddeb - WXL <1785969728@qq.com> : æµ‹è¯•完成
dad71d3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
40bdf0b - WXL <1785969728@qq.com> : æµ‹è¯•完成
841b389 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b5f603e - WXL <1785969728@qq.com> : æµ‹è¯•完成
a4dff39 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6b6cc07 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b14bdee - WXL <1785969728@qq.com> : æµ‹è¯•完成
e717068 - WXL <1785969728@qq.com> : æµ‹è¯•完成
bc8e3ab - WXL <1785969728@qq.com> : æµ‹è¯•完成
8f7984b - WXL <1785969728@qq.com> : æµ‹è¯•完成
9f4da36 - WXL <1785969728@qq.com> : æµ‹è¯•完成
76196fb - WXL <1785969728@qq.com> : æµ‹è¯•完成
49299bb - WXL <1785969728@qq.com> : æµ‹è¯•完成
452e7fb - WXL <1785969728@qq.com> : æµ‹è¯•完成
193b6ba - WXL <1785969728@qq.com> : æµ‹è¯•完成
96915c5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b09476a - WXL <1785969728@qq.com> : æµ‹è¯•完成
0e4451c - WXL <1785969728@qq.com> : æµ‹è¯•完成
cc73ea5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
df21bfb - WXL <1785969728@qq.com> : æµ‹è¯•完成
c936ac9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
3207bfd - WXL <1785969728@qq.com> : æµ‹è¯•完成
43bb102 - WXL <1785969728@qq.com> : æµ‹è¯•完成
fdf8b9c - WXL <1785969728@qq.com> : æµ‹è¯•完成
0700456 - WXL <1785969728@qq.com> : æµ‹è¯•完成
1bbfe08 - WXL <1785969728@qq.com> : æµ‹è¯•完成
814116f - WXL <1785969728@qq.com> : æµ‹è¯•完成
e60efcf - WXL <1785969728@qq.com> : æµ‹è¯•完成
9d01523 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a46f200 - WXL <1785969728@qq.com> : æµ‹è¯•完成
1e78fbf - WXL <1785969728@qq.com> : æµ‹è¯•完成
387d9eb - WXL <1785969728@qq.com> : æµ‹è¯•完成
245a920 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f77e656 - WXL <1785969728@qq.com> : æµ‹è¯•完成
1f644c6 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9955d35 - WXL <1785969728@qq.com> : æµ‹è¯•完成
76c3072 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4fffa66 - WXL <1785969728@qq.com> : æµ‹è¯•完成
0c80816 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8d2e62d - WXL <1785969728@qq.com> : æµ‹è¯•完成
1be7d1d - WXL <1785969728@qq.com> : æµ‹è¯•完成
46c0208 - WXL <1785969728@qq.com> : æµ‹è¯•完成
253d66f - WXL <1785969728@qq.com> : æµ‹è¯•完成
1589350 - WXL <1785969728@qq.com> : æµ‹è¯•完成
247854b - WXL <1785969728@qq.com> : æµ‹è¯•完成
b032588 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e5f6689 - WXL <1785969728@qq.com> : æµ‹è¯•完成
43988e7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b33fce1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
968d62e - WXL <1785969728@qq.com> : æµ‹è¯•完成
f9e7074 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f488fea - WXL <1785969728@qq.com> : æµ‹è¯•完成
75f1a2d - WXL <1785969728@qq.com> : æµ‹è¯•完成
f357f41 - WXL <1785969728@qq.com> : æµ‹è¯•完成
711c995 - WXL <1785969728@qq.com> : æµ‹è¯•完成
90610c8 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5041f08 - WXL <1785969728@qq.com> : æµ‹è¯•完成
6bc5561 - WXL <1785969728@qq.com> : æµ‹è¯•完成
d811436 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a85d70f - WXL <1785969728@qq.com> : æµ‹è¯•完成
628fd01 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e7d8000 - WXL <1785969728@qq.com> : æµ‹è¯•完成
48f86b3 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4e7be54 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4e9179c - WXL <1785969728@qq.com> : æµ‹è¯•完成
49fcdb7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
5d6b3e5 - WXL <1785969728@qq.com> : æµ‹è¯•完成
998b86e - WXL <1785969728@qq.com> : æµ‹è¯•完成
1f7e676 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e6af7e6 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f6cedc2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
97eaf47 - WXL <1785969728@qq.com> : æµ‹è¯•完成
9eec698 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e4f0f4a - WXL <1785969728@qq.com> : æµ‹è¯•完成
257f46b - WXL <1785969728@qq.com> : æµ‹è¯•完成
5c559f7 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b2278ee - WXL <1785969728@qq.com> : æµ‹è¯•完成
5339f63 - WXL <1785969728@qq.com> : æµ‹è¯•完成
c437204 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4065fe2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e014c6f - WXL <1785969728@qq.com> : æµ‹è¯•完成
47efee4 - WXL <1785969728@qq.com> : æµ‹è¯•完成
4dc66a6 - WXL <1785969728@qq.com> : æµ‹è¯•完成
7d77cff - WXL <1785969728@qq.com> : æµ‹è¯•完成
554cfce - WXL <1785969728@qq.com> : æµ‹è¯•完成
4bc27ca - WXL <1785969728@qq.com> : æµ‹è¯•完成
c1857ba - WXL <1785969728@qq.com> : æµ‹è¯•完成
ddd5408 - WXL <1785969728@qq.com> : æµ‹è¯•完成
f4dcb9c - WXL <1785969728@qq.com> : æµ‹è¯•完成
f3bf996 - WXL <1785969728@qq.com> : æµ‹è¯•完成
b5c6bd9 - WXL <1785969728@qq.com> : æµ‹è¯•完成
cd3f1d6 - WXL <1785969728@qq.com> : æµ‹è¯•完成
e98f65f - WXL <1785969728@qq.com> : æµ‹è¯•完成
ca4592d - WXL <1785969728@qq.com> : æµ‹è¯•完成
e8fb5c1 - WXL <1785969728@qq.com> : æµ‹è¯•完成
a46348a - WXL <1785969728@qq.com> : æµ‹è¯•完成
32d69fc - WXL <1785969728@qq.com> : æµ‹è¯•完成
412ecc2 - WXL <1785969728@qq.com> : æµ‹è¯•完成
8ec0ecf - WXL <1785969728@qq.com> : æµ‹è¯•完成
399367e - WXL <1785969728@qq.com> : æµ‹è¯•完成
8f4cb95 - WXL <1785969728@qq.com> : æµ‹è¯•完成
da407d5 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
ca2d35a - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
d84cde7 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
59953d5 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
cf9259c - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
7992520 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
59272d9 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
ad70f14 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
3b774a1 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
f93cb40 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
2ef938e - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
0d74436 - WXL <1785969728@qq.com> : æŒ‡æ ‡å®Œæˆ
d94d00d - WXL <1785969728@qq.com> : éšè®¿é¢˜åº“完成
4e32f11 - WXL <1785969728@qq.com> : å®Œæˆ
04332cb - WXL <1785969728@qq.com> : å®Œæˆ
dc3d15d - WXL <1785969728@qq.com> : éšè®¿é¢˜åº“完成
c50a8b1 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
3b7c66d - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
0b750c8 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
6b39414 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
0d95833 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
8399d18 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
32cb501 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
8a980bd - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
ea19bff - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
d28d837 - WXL <1785969728@qq.com> : éšè®¿ã€å¤è¯Šå¤æŸ¥ã€ä½“检通知、问卷列表
b509c45 - WXL <1785969728@qq.com> : éšè®¿ã€å¤è¯Šå¤æŸ¥ã€ä½“检通知、问卷列表
58f5620 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
ac84e78 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
be170d2 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
40e3b74 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
42419e9 - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
6d3e75d - WXL <1785969728@qq.com> : æäº¤ä¿¡æ¯
f76f423 - WXL <1785969728@qq.com> : 11
2aecb22 - heimawl <1785969728@qq.com> : 11
d29df60 - heimawl <1785969728@qq.com> : 11
f719b59 - heimawl <1785969728@qq.com> : 11
351fc95 - heimawl <1785969728@qq.com> : 11
66223fb - heimawl <1785969728@qq.com> : 11
40df27a - heimawl <1785969728@qq.com> : 11
c81b2f6 - heimawl <1785969728@qq.com> : 11
2d2377d - heimawl <1785969728@qq.com> : å®Œæˆç»Ÿè®¡æ¨¡å—基本搭建
b77e396 - heimawl <1785969728@qq.com> : 11
54d166e - heimawl <1785969728@qq.com> : 11
a879953 - heimawl <1785969728@qq.com> : 11
8cdcc9b - heimawl <1785969728@qq.com> : 11
958f682 - heimawl <1785969728@qq.com> : å¤‡æ³¨ä¿¡æ¯
a91ca68 - heimawl <1785969728@qq.com> : æ›´æ–°ä¸»é¢˜
eb29d75 - heimawl <1785969728@qq.com> : å®Œæˆè¯æœ¯åº“、指标库、模板库、页面及其子页面搭建
363e9da - heimawl <1785969728@qq.com> : æ›´æ”¹ç¼–辑器样式
12cf420 - heimawl <1785969728@qq.com> : é…ç½®ä»£ç ç¼–辑依赖
39ad2d8 - heimawl <1785969728@qq.com> : 11
696e74d - heimawl <1785969728@qq.com> : 11
0db1337 - heimawl <1785969728@qq.com> : æ™ºèƒ½ä¸­å¿ƒé¡µæ›´æ–°
a1e3f22 - heimawl <1785969728@qq.com> : äºŒç»´ç é¢„览页
bd5fbcf - heimawl <1785969728@qq.com> : 11
55b71c3 - heimawl <1785969728@qq.com> : å®Œæˆéƒ¨åˆ†æ‚£è€…数据交互api封装,创建ai知识库相关路由页面
d9a8691 - heimawl <1785969728@qq.com> : å®Œæˆæ ‡ç­¾ç®¡ç†æ¨¡å—数据交互
92301a6 - heimawl <1785969728@qq.com> : æµ‹è¯•接口
f98059f - heimawl <1785969728@qq.com> : å®Œæˆé¢˜åº“管理模块搭建
26ac0c2 - heimawl <1785969728@qq.com> : å°è£…api接口,宣教管理模块搭建
d9cbb5e - heimawl <1785969728@qq.com> : å®Œæˆæ ‡ç­¾ç®¡ç†æ¨¡å—搭建
3ddea12 - heimawl <1785969728@qq.com> : è¡¥å……问卷管理编辑页面布局
b850b4c - heimawl <1785969728@qq.com> : å®Œæˆé¢˜åº“管理页面路由设置,问卷查看页面布局
8d7b4ba - heimawl <1785969728@qq.com> : å®Œæˆå®£æ•™ã€é—®å·è·¯ç”±è®¾ç½®ã€é—®å·æ¨¡å—页面及其添加/修改页面部分布局开发
cb0e31a - heimawl <1785969728@qq.com> : ä¼˜åŒ–页面主题
792c283 - heimawl <1785969728@qq.com> : å®Œæˆä¸Šä¼ æ–‡ä»¶å„步骤页面及标签管理模块初步搭建
61cb6f1 - heimawl <1785969728@qq.com> : å®‰è£…echarts5.4.0依赖,完整患者管理主页面及其个人信息及附属页面基础开发
6e7acd5 - heimawl <1785969728@qq.com> : ç»„件库整理,依赖安装、excel导入导入方法整理
4de052a - heimawl <1785969728@qq.com> : å´é¾™åˆ†æ”¯åˆå§‹æäº¤
8b50c04 - yxh <172933527@qq.com> : yxh
66db2bb - yxh <172933527@qq.com> : yxh
4fd8412 - yxh <172933527@qq.com> : yxh
a6f4edd - yxh <172933527@qq.com> : Merge branch 'master' of http://116.62.18.175:6699/r/~yxh/smartor-web
cfd89f9 - yxh <172933527@qq.com> : yxh
a742ab9 - qianxj <qianxj15@sina.com> : hide id
58c7cea - yxh <172933527@qq.com> : yxh
5bedda9 - yxh <172933527@qq.com> : yxh
acd7802 - yxh <172933527@qq.com> : Merge branch 'master' of http://116.62.18.175:6699/r/~yxh/smartor-web
af1f597 - yxh <172933527@qq.com> : yxh
79f2ded - yxh <172933527@qq.com> : yxh
7fac76a - qianxj <qianxj15@sina.com> : Merge branch 'master' of http://116.62.18.175:6699/r/~yxh/smartor-web
d49d271 - qianxj <qianxj15@sina.com> : update svytopic
76bd95c - yxh <172933527@qq.com> : Merge branch 'master' of http://116.62.18.175:6699/r/~yxh/smartor-web
c57d049 - qianxj <qianxj15@sina.com> : update svytopic
72c05d4 - qianxj <qianxj15@sina.com> : update svytopic
a8c0f41 - qianxj <qianxj15@sina.com> : update svytopic
164feee - qianxj <qianxj15@sina.com> : update svytopic
2e5dd70 - qianxj <qianxj15@sina.com> : update topic
eb692fd - qianxj <qianxj15@sina.com> : update topic
d274e9d - qianxj <qianxj15@sina.com> : qianxj
a9ade10 - qianxj <qianxj15@sina.com> : update
2b1c001 - yxh <172933527@qq.com> : yxh
1bd342d - qianxj <qianxj15@sina.com> : update1
26b67ee - qianxj <qianxj15@sina.com> : update patarchive
3db1d85 - qianxj <qianxj15@sina.com> : update
110790e - qianxj <qianxj15@sina.com> : update patarchive
57b6bce - qianxj <qianxj15@sina.com> : update face
93cff80 - yxh <172933527@qq.com> : yxh
aad1dc2 - yxh <172933527@qq.com> : yxh
0a31e0b - yxh <172933527@qq.com> : yxh
5ce577d - yxh <172933527@qq.com> : yxh
f65cbb4 - yxh <172933527@qq.com> : yxh
b83120c - yxh <172933527@qq.com> : yxh
878850a - yxh <172933527@qq.com> : yxh
877300e - qianxj <qianxj15@sina.com> : update step1
8b4c8fc - qianxj <qianxj15@sina.com> : update title
621c4bb - yxh <172933527@qq.com> : ç¬¬ä¸€æ¬¡ä¿®æ”¹
et --hard HEAD@{1}
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,559 @@
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{0}: rebase (finish): returning to refs/heads/lishui-Smartor
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{1}: rebase (start): checkout HEAD~5
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{2}: reset: moving to origin/lishui-Smartor
a65bf99 HEAD@{3}: rebase (continue) (finish): returning to refs/heads/lishui-Smartor
a65bf99 HEAD@{4}: commit (amend): æµ‹è¯•完成
95948fe HEAD@{5}: rebase (continue) (edit): æµ‹è¯•完成
745b9af HEAD@{6}: commit (amend): æµ‹è¯•完成
6f917a9 HEAD@{7}: rebase (continue) (edit): æµ‹è¯•完成
960960c HEAD@{8}: commit (amend): ä½ çš„æäº¤ä¿¡æ¯
488008e HEAD@{9}: rebase: fast-forward
9a164d2 HEAD@{10}: rebase (start): checkout HEAD~5
01e7b73 HEAD@{11}: rebase (continue) (finish): returning to refs/heads/lishui-Smartor
01e7b73 HEAD@{12}: commit (amend): æµ‹è¯•完成
748b8c4 HEAD@{13}: rebase (continue) (edit): æµ‹è¯•完成
ad098d5 HEAD@{14}: commit (amend): æµ‹è¯•完成
8220a01 HEAD@{15}: rebase: fast-forward
488008e HEAD@{16}: rebase: fast-forward
9a164d2 HEAD@{17}: rebase: fast-forward
9403890 HEAD@{18}: rebase: fast-forward
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{19}: rebase (start): checkout HEAD~5
b685449 HEAD@{20}: rebase (abort): updating HEAD
b685449 HEAD@{21}: rebase (abort): updating HEAD
b685449 HEAD@{22}: commit: æµ‹è¯•完成
8220a01 HEAD@{23}: commit: æµ‹è¯•完成
488008e HEAD@{24}: commit: ä½ çš„æäº¤ä¿¡æ¯
9a164d2 HEAD@{25}: commit: ä½ çš„æäº¤ä¿¡æ¯
9403890 HEAD@{26}: rebase (continue) (finish): returning to refs/heads/lishui-Smartor
9403890 HEAD@{27}: rebase (continue) (finish): refs/heads/lishui-Smartor onto 022e8035e5143328ba01d76a74ea5f86e5c994f0
9403890 HEAD@{28}: commit: æµ‹è¯•完成
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{29}: checkout: moving from lishui-sf to lishui-Smartor
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{30}: checkout: moving from lishui-Smartor to lishui-sf
022e803 (HEAD -> lishui-Smartor, origin/lishui-Smartor, lishui-sf) HEAD@{31}: commit: æµ‹è¯•完成
4898664 HEAD@{32}: checkout: moving from wuxi-smartor to lishui-Smartor
b7f7f38 (wuxi-smartor) HEAD@{33}: checkout: moving from lishui-Smartor to wuxi-smartor
4898664 HEAD@{34}: commit: æµ‹è¯•完成
337fb92 HEAD@{35}: commit: æµ‹è¯•完成
a7a20b2 HEAD@{36}: checkout: moving from HeNan-Smartor to lishui-Smartor
56d56f3 (HeNan-Smartor) HEAD@{37}: checkout: moving from lishui-Smartor to HeNan-Smartor
a7a20b2 HEAD@{38}: commit: æµ‹è¯•完成
6f1e7a6 HEAD@{39}: commit: æµ‹è¯•完成
5fba330 HEAD@{40}: commit: æµ‹è¯•完成
209b2f7 HEAD@{41}: commit: æµ‹è¯•完成
53f4f0a HEAD@{42}: checkout: moving from wuxi-smartor to lishui-Smartor
b7f7f38 (wuxi-smartor) HEAD@{43}: commit: æµ‹è¯•完成
e353f0e (origin/wuxi-smartor) HEAD@{44}: checkout: moving from lishui-Smartor to wuxi-smartor
53f4f0a HEAD@{45}: commit: æµ‹è¯•完成
2eff945 HEAD@{46}: commit: æµ‹è¯•完成
b6c854d HEAD@{47}: checkout: moving from HeNan-Smartor to lishui-Smartor
56d56f3 (HeNan-Smartor) HEAD@{48}: commit: æµ‹è¯•完成
b6c854d HEAD@{49}: checkout: moving from lishui-Smartor to HeNan-Smartor
b6c854d HEAD@{50}: commit: æµ‹è¯•完成
ec2f429 HEAD@{51}: commit: æµ‹è¯•完成
c1f1ecb HEAD@{52}: checkout: moving from wuxi-smartor to lishui-Smartor
e353f0e (origin/wuxi-smartor) HEAD@{53}: commit: æµ‹è¯•完成
e580006 HEAD@{54}: commit: æµ‹è¯•完成
ffdeb04 HEAD@{55}: checkout: moving from lishui-Smartor to wuxi-smartor
c1f1ecb HEAD@{56}: checkout: moving from wuxi-smartor to lishui-Smartor
ffdeb04 HEAD@{57}: commit: æµ‹è¯•完成
55c665c HEAD@{58}: checkout: moving from lishui-Smartor to wuxi-smartor
c1f1ecb HEAD@{59}: checkout: moving from wuxi-smartor to lishui-Smartor
55c665c HEAD@{60}: checkout: moving from lishui-Smartor to wuxi-smartor
c1f1ecb HEAD@{61}: commit: æµ‹è¯•完成
7449ee9 HEAD@{62}: checkout: moving from wuxi-smartor to lishui-Smartor
55c665c HEAD@{63}: commit: æµ‹è¯•完成
f93c1fb HEAD@{64}: checkout: moving from lishui-Smartor to wuxi-smartor
7449ee9 HEAD@{65}: checkout: moving from wuxi-smartor to lishui-Smartor
f93c1fb HEAD@{66}: commit: æµ‹è¯•完成
b3b10f3 HEAD@{67}: checkout: moving from lishui-Smartor to wuxi-smartor
7449ee9 HEAD@{68}: checkout: moving from wuxi-smartor to lishui-Smartor
b3b10f3 HEAD@{69}: commit: æµ‹è¯•完成
30e7ca1 HEAD@{70}: checkout: moving from lishui-Smartor to wuxi-smartor
7449ee9 HEAD@{71}: checkout: moving from wuxi-smartor to lishui-Smartor
30e7ca1 HEAD@{72}: checkout: moving from lishui-Smartor to wuxi-smartor
7449ee9 HEAD@{73}: commit: æµ‹è¯•完成
9ed874d HEAD@{74}: checkout: moving from wuxi-smartor to lishui-Smartor
30e7ca1 HEAD@{75}: checkout: moving from lishui-Smartor to wuxi-smartor
9ed874d HEAD@{76}: checkout: moving from lishui-Smartor to lishui-Smartor
9ed874d HEAD@{77}: commit: æµ‹è¯•完成
6253746 HEAD@{78}: checkout: moving from wuxi-smartor to lishui-Smartor
30e7ca1 HEAD@{79}: commit: æµ‹è¯•完成
8b120ce HEAD@{80}: checkout: moving from lishui-Smartor to wuxi-smartor
6253746 HEAD@{81}: checkout: moving from wuxi-smartor to lishui-Smartor
8b120ce HEAD@{82}: commit: æµ‹è¯•完成
d846a58 HEAD@{83}: checkout: moving from lishui-Smartor to wuxi-smartor
6253746 HEAD@{84}: commit: æµ‹è¯•完成
5fb8598 HEAD@{85}: checkout: moving from master to lishui-Smartor
f08b133 (origin/master, origin/HEAD, master) HEAD@{86}: checkout: moving from lishui-Smartor to master
5fb8598 HEAD@{87}: checkout: moving from master to lishui-Smartor
f08b133 (origin/master, origin/HEAD, master) HEAD@{88}: commit: æµ‹è¯•完成
7c5b7bd HEAD@{89}: commit: æµ‹è¯•完成
a52f35a HEAD@{90}: checkout: moving from lishui-Smartor to master
5fb8598 HEAD@{91}: commit: æµ‹è¯•完成
aa06424 HEAD@{92}: checkout: moving from master to lishui-Smartor
a52f35a HEAD@{93}: checkout: moving from lishui-Smartor to master
aa06424 HEAD@{94}: checkout: moving from master to lishui-Smartor
a52f35a HEAD@{95}: checkout: moving from lishui-Smartor to master
aa06424 HEAD@{96}: commit: æµ‹è¯•完成
5733abb HEAD@{97}: checkout: moving from master to lishui-Smartor
a52f35a HEAD@{98}: commit: æµ‹è¯•完成
246ad67 HEAD@{99}: checkout: moving from lishui-Smartor to master
5733abb HEAD@{100}: checkout: moving from wuxi-smartor to lishui-Smartor
d846a58 HEAD@{101}: commit: æµ‹è¯•完成
ba57b51 HEAD@{102}: checkout: moving from lishui-Smartor to wuxi-smartor
5733abb HEAD@{103}: commit: æµ‹è¯•完成
9668152 HEAD@{104}: checkout: moving from wuxi-smartor to lishui-Smartor
ba57b51 HEAD@{105}: commit: æµ‹è¯•完成
fe70ca5 HEAD@{106}: checkout: moving from lishui-Smartor to wuxi-smartor
9668152 HEAD@{107}: commit: æµ‹è¯•完成
f06ac34 HEAD@{108}: checkout: moving from wuxi-smartor to lishui-Smartor
fe70ca5 HEAD@{109}: commit: æµ‹è¯•完成
510b433 HEAD@{110}: checkout: moving from lishui-Smartor to wuxi-smartor
f06ac34 HEAD@{111}: commit: æµ‹è¯•完成
20cd2de HEAD@{112}: checkout: moving from wuxi-smartor to lishui-Smartor
510b433 HEAD@{113}: commit: æµ‹è¯•完成
e946f91 HEAD@{114}: checkout: moving from lishui-Smartor to wuxi-smartor
20cd2de HEAD@{115}: commit: æµ‹è¯•完成
fe379fd HEAD@{116}: checkout: moving from wuxi-smartor to lishui-Smartor
e946f91 HEAD@{117}: commit: æµ‹è¯•完成
952ce53 HEAD@{118}: checkout: moving from lishui-Smartor to wuxi-smartor
fe379fd HEAD@{119}: checkout: moving from wuxi-smartor to lishui-Smartor
952ce53 HEAD@{120}: checkout: moving from lishui-Smartor to wuxi-smartor
fe379fd HEAD@{121}: commit: æµ‹è¯•完成
9cc3dcf HEAD@{122}: checkout: moving from wuxi-smartor to lishui-Smartor
952ce53 HEAD@{123}: commit: æµ‹è¯•完成
d9004dd HEAD@{124}: checkout: moving from lishui-Smartor to wuxi-smartor
9cc3dcf HEAD@{125}: commit: æµ‹è¯•完成
3ae495d HEAD@{126}: checkout: moving from wuxi-smartor to lishui-Smartor
d9004dd HEAD@{127}: commit: æµ‹è¯•完成
a90f11d HEAD@{128}: commit: æµ‹è¯•完成
125529d HEAD@{129}: checkout: moving from lishui-Smartor to wuxi-smartor
3ae495d HEAD@{130}: commit: æµ‹è¯•完成
dafbb90 HEAD@{131}: checkout: moving from wuxi-smartor to lishui-Smartor
125529d HEAD@{132}: commit: æµ‹è¯•完成
ce16687 HEAD@{133}: checkout: moving from lishui-Smartor to wuxi-smartor
dafbb90 HEAD@{134}: checkout: moving from wuxi-smartor to lishui-Smartor
ce16687 HEAD@{135}: commit: æµ‹è¯•完成
039c34d HEAD@{136}: checkout: moving from lishui-Smartor to wuxi-smartor
dafbb90 HEAD@{137}: checkout: moving from wuxi-smartor to lishui-Smartor
039c34d HEAD@{138}: commit: æµ‹è¯•完成
51102f4 HEAD@{139}: checkout: moving from lishui-Smartor to wuxi-smartor
dafbb90 HEAD@{140}: commit: æµ‹è¯•完成
665ac63 HEAD@{141}: commit: æµ‹è¯•完成
9a5dd25 HEAD@{142}: commit: æµ‹è¯•完成
880e036 HEAD@{143}: commit: æµ‹è¯•完成
e10381f HEAD@{144}: commit: æµ‹è¯•完成
c7c591d HEAD@{145}: commit: æµ‹è¯•完成
af3ff15 HEAD@{146}: checkout: moving from wuxi-smartor to lishui-Smartor
51102f4 HEAD@{147}: checkout: moving from lishui-Smartor to wuxi-smartor
af3ff15 HEAD@{148}: commit: æµ‹è¯•完成
36d1334 HEAD@{149}: checkout: moving from wuxi-smartor to lishui-Smartor
51102f4 HEAD@{150}: commit: æµ‹è¯•完成
d4744cf HEAD@{151}: checkout: moving from lishui-Smartor to wuxi-smartor
36d1334 HEAD@{152}: checkout: moving from wuxi-smartor to lishui-Smartor
d4744cf HEAD@{153}: commit: æµ‹è¯•完成
e750691 HEAD@{154}: checkout: moving from lishui-Smartor to wuxi-smartor
36d1334 HEAD@{155}: commit: æµ‹è¯•完成
a22820c HEAD@{156}: checkout: moving from wuxi-smartor to lishui-Smartor
e750691 HEAD@{157}: commit: æµ‹è¯•完成
ef60bc9 HEAD@{158}: commit: æµ‹è¯•完成
f37b479 HEAD@{159}: checkout: moving from lishui-Smartor to wuxi-smartor
a22820c HEAD@{160}: checkout: moving from wuxi-smartor to lishui-Smartor
f37b479 HEAD@{161}: commit: æµ‹è¯•完成
547be67 HEAD@{162}: checkout: moving from lishui-Smartor to wuxi-smartor
a22820c HEAD@{163}: commit: æµ‹è¯•完成
f3f7256 HEAD@{164}: checkout: moving from master to lishui-Smartor
246ad67 HEAD@{165}: checkout: moving from lishui-Smartor to master
f3f7256 HEAD@{166}: commit: æµ‹è¯•完成
84e20d0 HEAD@{167}: checkout: moving from master to lishui-Smartor
246ad67 HEAD@{168}: commit: æµ‹è¯•完成
c97bd0d HEAD@{169}: commit: æµ‹è¯•完成
bdb26dc HEAD@{170}: checkout: moving from lishui-Smartor to master
84e20d0 HEAD@{171}: checkout: moving from master to lishui-Smartor
bdb26dc HEAD@{172}: commit: æµ‹è¯•完成
3b6c56e HEAD@{173}: checkout: moving from lishui-Smartor to master
84e20d0 HEAD@{174}: commit: æµ‹è¯•完成
572a624 HEAD@{175}: checkout: moving from master to lishui-Smartor
3b6c56e HEAD@{176}: commit: æµ‹è¯•完成
0d18860 HEAD@{177}: checkout: moving from lishui-Smartor to master
572a624 HEAD@{178}: commit: æµ‹è¯•完成
a5bc95e HEAD@{179}: checkout: moving from wuxi-smartor to lishui-Smartor
547be67 HEAD@{180}: commit: æµ‹è¯•完成
c4fb353 HEAD@{181}: commit: æµ‹è¯•完成
a398c62 HEAD@{182}: checkout: moving from master to wuxi-smartor
0d18860 HEAD@{183}: commit: æµ‹è¯•完成
d5806f3 HEAD@{184}: commit (merge): æµ‹è¯•完成
783b99e HEAD@{185}: commit: æµ‹è¯•完成
77a8ca0 HEAD@{186}: checkout: moving from wuxi-smartor to master
a398c62 HEAD@{187}: commit: æµ‹è¯•完成
98b9fdc HEAD@{188}: commit: æµ‹è¯•完成
9dd3964 HEAD@{189}: checkout: moving from lishui-Smartor to wuxi-smartor
a5bc95e HEAD@{190}: checkout: moving from wuxi-smartor to lishui-Smartor
9dd3964 HEAD@{191}: commit: æµ‹è¯•完成
4cf6b25 HEAD@{192}: checkout: moving from lishui-Smartor to wuxi-smartor
a5bc95e HEAD@{193}: checkout: moving from wuxi-smartor to lishui-Smartor
4cf6b25 HEAD@{194}: commit: æµ‹è¯•完成
3bab592 HEAD@{195}: checkout: moving from lishui-Smartor to wuxi-smartor
a5bc95e HEAD@{196}: commit: æµ‹è¯•完成
be764ba HEAD@{197}: checkout: moving from wuxi-smartor to lishui-Smartor
3bab592 HEAD@{198}: commit: æµ‹è¯•完成
23f920e HEAD@{199}: checkout: moving from lishui-Smartor to wuxi-smartor
be764ba HEAD@{200}: checkout: moving from wuxi-smartor to lishui-Smartor
23f920e HEAD@{201}: commit: æµ‹è¯•完成
03d20b4 HEAD@{202}: checkout: moving from lishui-Smartor to wuxi-smartor
be764ba HEAD@{203}: checkout: moving from wuxi-smartor to lishui-Smartor
03d20b4 HEAD@{204}: commit: æµ‹è¯•完成
31cbe57 HEAD@{205}: checkout: moving from lishui-Smartor to wuxi-smartor
be764ba HEAD@{206}: commit: æµ‹è¯•完成
e46bb66 HEAD@{207}: checkout: moving from wuxi-smartor to lishui-Smartor
31cbe57 HEAD@{208}: checkout: moving from lishui-Smartor to wuxi-smartor
e46bb66 HEAD@{209}: commit: æµ‹è¯•完成
8ed125f HEAD@{210}: checkout: moving from wuxi-smartor to lishui-Smartor
31cbe57 HEAD@{211}: commit: æµ‹è¯•完成
66b105c HEAD@{212}: checkout: moving from lishui-Smartor to wuxi-smartor
8ed125f HEAD@{213}: checkout: moving from wuxi-smartor to lishui-Smartor
66b105c HEAD@{214}: checkout: moving from lishui-Smartor to wuxi-smartor
8ed125f HEAD@{215}: commit: ç»Ÿè®¡å®Œæˆ
37d2ba3 HEAD@{216}: checkout: moving from wuxi-smartor to lishui-Smartor
66b105c HEAD@{217}: checkout: moving from lishui-Smartor to wuxi-smartor
37d2ba3 HEAD@{218}: commit: æµ‹è¯•完成
45f9797 HEAD@{219}: checkout: moving from wuxi-smartor to lishui-Smartor
66b105c HEAD@{220}: commit: æµ‹è¯•完成
88cd1b9 HEAD@{221}: checkout: moving from master to wuxi-smartor
77a8ca0 HEAD@{222}: commit: æµ‹è¯•完成
ddba782 HEAD@{223}: checkout: moving from lishui-Smartor to master
45f9797 HEAD@{224}: commit: æµ‹è¯•完成
0e3739a HEAD@{225}: commit: æµ‹è¯•完成
54489da HEAD@{226}: commit: æµ‹è¯•完成
303d443 HEAD@{227}: checkout: moving from wuxi-smartor to lishui-Smartor
88cd1b9 HEAD@{228}: checkout: moving from lishui-Smartor to wuxi-smartor
303d443 HEAD@{229}: commit: æµ‹è¯•完成
5a8e93d HEAD@{230}: checkout: moving from wuxi-smartor to lishui-Smartor
88cd1b9 HEAD@{231}: checkout: moving from lishui-Smartor to wuxi-smartor
5a8e93d HEAD@{232}: commit: æµ‹è¯•完成
4413b46 HEAD@{233}: checkout: moving from wuxi-smartor to lishui-Smartor
88cd1b9 HEAD@{234}: commit: æµ‹è¯•完成
78fc1cf HEAD@{235}: checkout: moving from lishui-Smartor to wuxi-smartor
4413b46 HEAD@{236}: checkout: moving from wuxi-smartor to lishui-Smartor
78fc1cf HEAD@{237}: commit: æµ‹è¯•完成
901206c HEAD@{238}: checkout: moving from lishui-Smartor to wuxi-smartor
4413b46 HEAD@{239}: commit: æµ‹è¯•完成
0529f31 HEAD@{240}: checkout: moving from wuxi-smartor to lishui-Smartor
901206c HEAD@{241}: commit: æµ‹è¯•完成
f710fa7 HEAD@{242}: checkout: moving from lishui-Smartor to wuxi-smartor
0529f31 HEAD@{243}: commit: æµ‹è¯•完成
08c27c1 HEAD@{244}: checkout: moving from wuxi-smartor to lishui-Smartor
f710fa7 HEAD@{245}: commit: æµ‹è¯•完成
33c6294 HEAD@{246}: commit: æµ‹è¯•完成
55ee279 HEAD@{247}: checkout: moving from lishui-Smartor to wuxi-smartor
08c27c1 HEAD@{248}: commit: æµ‹è¯•完成
6d7cd13 HEAD@{249}: checkout: moving from wuxi-smartor to lishui-Smartor
55ee279 HEAD@{250}: commit: æµ‹è¯•完成
136b920 HEAD@{251}: checkout: moving from lishui-Smartor to wuxi-smartor
6d7cd13 HEAD@{252}: commit: æµ‹è¯•完成
8e71817 HEAD@{253}: commit: æµ‹è¯•完成
b7092c2 HEAD@{254}: commit: æµ‹è¯•完成
bc241c4 HEAD@{255}: checkout: moving from master to lishui-Smartor
ddba782 HEAD@{256}: checkout: moving from lishui-Smartor to master
bc241c4 HEAD@{257}: commit: æµ‹è¯•完成
5e17454 HEAD@{258}: checkout: moving from master to lishui-Smartor
ddba782 HEAD@{259}: checkout: moving from lishui-Smartor to master
5e17454 HEAD@{260}: checkout: moving from master to lishui-Smartor
ddba782 HEAD@{261}: commit: æµ‹è¯•完成
552e2c4 HEAD@{262}: checkout: moving from lishui-Smartor to master
5e17454 HEAD@{263}: commit: æµ‹è¯•完成
186b271 HEAD@{264}: checkout: moving from wuxi-smartor to lishui-Smartor
136b920 HEAD@{265}: checkout: moving from lishui-Smartor to wuxi-smartor
186b271 HEAD@{266}: commit: æµ‹è¯•完成
6535680 HEAD@{267}: commit: æµ‹è¯•完成
6be4939 HEAD@{268}: commit: æµ‹è¯•完成
400d13d HEAD@{269}: checkout: moving from wuxi-smartor to lishui-Smartor
136b920 HEAD@{270}: checkout: moving from lishui-Smartor to wuxi-smartor
400d13d HEAD@{271}: commit: æµ‹è¯•完成
3877190 HEAD@{272}: checkout: moving from wuxi-smartor to lishui-Smartor
136b920 HEAD@{273}: commit: æµ‹è¯•完成
55c064e HEAD@{274}: checkout: moving from lishui-Smartor to wuxi-smartor
3877190 HEAD@{275}: checkout: moving from wuxi-smartor to lishui-Smartor
55c064e HEAD@{276}: checkout: moving from lishui-Smartor to wuxi-smartor
3877190 HEAD@{277}: commit: æµ‹è¯•完成
78f514b HEAD@{278}: checkout: moving from wuxi-smartor to lishui-Smartor
55c064e HEAD@{279}: commit: æµ‹è¯•完成
2b67e58 HEAD@{280}: checkout: moving from lishui-Smartor to wuxi-smartor
78f514b HEAD@{281}: commit: æµ‹è¯•完成
fecb2f5 HEAD@{282}: checkout: moving from wuxi-smartor to lishui-Smartor
2b67e58 HEAD@{283}: commit: æµ‹è¯•完成
91dc8cc HEAD@{284}: checkout: moving from lishui-Smartor to wuxi-smartor
fecb2f5 HEAD@{285}: checkout: moving from wuxi-smartor to lishui-Smartor
91dc8cc HEAD@{286}: checkout: moving from lishui-Smartor to wuxi-smartor
fecb2f5 HEAD@{287}: commit: æµ‹è¯•完成
4395f0d HEAD@{288}: checkout: moving from wuxi-smartor to lishui-Smartor
91dc8cc HEAD@{289}: commit: æµ‹è¯•完成
6a1bafa HEAD@{290}: checkout: moving from lishui-Smartor to wuxi-smartor
4395f0d HEAD@{291}: checkout: moving from wuxi-smartor to lishui-Smartor
6a1bafa HEAD@{292}: commit: æµ‹è¯•完成
d74a76f HEAD@{293}: checkout: moving from lishui-Smartor to wuxi-smartor
4395f0d HEAD@{294}: commit: æµ‹è¯•完成
327d234 HEAD@{295}: commit: æµ‹è¯•完成
56b8443 HEAD@{296}: checkout: moving from wuxi-smartor to lishui-Smartor
d74a76f HEAD@{297}: checkout: moving from lishui-Smartor to wuxi-smartor
56b8443 HEAD@{298}: commit: æµ‹è¯•完成
8d0f7fc HEAD@{299}: commit: æµ‹è¯•完成
38c9042 HEAD@{300}: commit: æµ‹è¯•完成
7d47700 HEAD@{301}: commit: æµ‹è¯•完成
273e2fa HEAD@{302}: commit: æµ‹è¯•完成
401c835 HEAD@{303}: commit: æµ‹è¯•完成
60e5b16 HEAD@{304}: commit: æµ‹è¯•完成
6e54a66 HEAD@{305}: commit: æµ‹è¯•完成
ee8f1a0 HEAD@{306}: commit: æµ‹è¯•完成
5f3691d HEAD@{307}: commit: æµ‹è¯•完成
4b60348 HEAD@{308}: commit: æµ‹è¯•完成
418e3a7 HEAD@{309}: checkout: moving from wuxi-smartor to lishui-Smartor
d74a76f HEAD@{310}: commit: æµ‹è¯•完成
a022656 HEAD@{311}: checkout: moving from lishui-Smartor to wuxi-smartor
418e3a7 HEAD@{312}: commit: æµ‹è¯•完成
4c9eab7 HEAD@{313}: commit: æµ‹è¯•完成
15e42d9 HEAD@{314}: checkout: moving from master to lishui-Smartor
552e2c4 HEAD@{315}: commit: æµ‹è¯•完成
823bd7c HEAD@{316}: checkout: moving from lishui-Smartor to master
15e42d9 HEAD@{317}: commit: æµ‹è¯•完成
9f5b4e2 HEAD@{318}: checkout: moving from wuxi-smartor to lishui-Smartor
a022656 HEAD@{319}: commit: æµ‹è¯•完成
9259056 HEAD@{320}: checkout: moving from lishui-Smartor to wuxi-smartor
9f5b4e2 HEAD@{321}: commit: æµ‹è¯•完成
99a916e HEAD@{322}: commit: æµ‹è¯•完成
abde816 HEAD@{323}: commit: æµ‹è¯•完成
81ffbda HEAD@{324}: checkout: moving from master to lishui-Smartor
823bd7c HEAD@{325}: commit: æµ‹è¯•完成
84f0f55 HEAD@{326}: checkout: moving from lishui-Smartor to master
81ffbda HEAD@{327}: checkout: moving from master to lishui-Smartor
84f0f55 HEAD@{328}: checkout: moving from lishui-Smartor to master
81ffbda HEAD@{329}: commit: æµ‹è¯•完成
935e93f HEAD@{330}: checkout: moving from master to lishui-Smartor
84f0f55 HEAD@{331}: checkout: moving from lishui-Smartor to master
935e93f HEAD@{332}: commit: æµ‹è¯•完成
b73b5dd HEAD@{333}: checkout: moving from master to lishui-Smartor
84f0f55 HEAD@{334}: checkout: moving from lishui-Smartor to master
b73b5dd HEAD@{335}: commit: æµ‹è¯•完成
2daa54c HEAD@{336}: checkout: moving from master to lishui-Smartor
84f0f55 HEAD@{337}: checkout: moving from lishui-Smartor to master
2daa54c HEAD@{338}: commit: æµ‹è¯•完成
073edc9 HEAD@{339}: checkout: moving from wuxi-smartor to lishui-Smartor
9259056 HEAD@{340}: checkout: moving from master to wuxi-smartor
84f0f55 HEAD@{341}: commit: æµ‹è¯•完成
d7b9ffb HEAD@{342}: checkout: moving from lishui-Smartor to master
073edc9 HEAD@{343}: commit: æµ‹è¯•完成
838d8b5 HEAD@{344}: checkout: moving from master to lishui-Smartor
d7b9ffb HEAD@{345}: checkout: moving from lishui-Smartor to master
838d8b5 HEAD@{346}: checkout: moving from master to lishui-Smartor
d7b9ffb HEAD@{347}: commit: æµ‹è¯•完成
b8085c1 HEAD@{348}: checkout: moving from wuxi-smartor to master
9259056 HEAD@{349}: checkout: moving from lishui-Smartor to wuxi-smartor
838d8b5 HEAD@{350}: checkout: moving from wuxi-smartor to lishui-Smartor
9259056 HEAD@{351}: commit: æµ‹è¯•完成
d9a95a7 HEAD@{352}: checkout: moving from master to wuxi-smartor
b8085c1 HEAD@{353}: checkout: moving from lishui-Smartor to master
838d8b5 HEAD@{354}: checkout: moving from master to lishui-Smartor
b8085c1 HEAD@{355}: commit: æµ‹è¯•完成
baeeb80 HEAD@{356}: checkout: moving from lishui-Smartor to master
838d8b5 HEAD@{357}: commit: æµ‹è¯•完成
3fd01fa HEAD@{358}: checkout: moving from wuxi-smartor to lishui-Smartor
d9a95a7 HEAD@{359}: checkout: moving from lishui-Smartor to wuxi-smartor
3fd01fa HEAD@{360}: commit: æµ‹è¯•完成
88481a3 HEAD@{361}: checkout: moving from wuxi-smartor to lishui-Smartor
d9a95a7 HEAD@{362}: commit: æµ‹è¯•完成
ffb5cf7 HEAD@{363}: checkout: moving from master to wuxi-smartor
baeeb80 HEAD@{364}: commit: æµ‹è¯•完成
5271bf2 HEAD@{365}: checkout: moving from lishui-Smartor to master
88481a3 HEAD@{366}: checkout: moving from wuxi-smartor to lishui-Smartor
ffb5cf7 HEAD@{367}: commit: æµ‹è¯•完成
f5c2015 HEAD@{368}: checkout: moving from DeBug to wuxi-smartor
6d3e75d (origin/DeBug, DeBug) HEAD@{369}: checkout: moving from lishui-Smartor to DeBug
88481a3 HEAD@{370}: checkout: moving from wuxi-smartor to lishui-Smartor
f5c2015 HEAD@{371}: checkout: moving from master to wuxi-smartor
5271bf2 HEAD@{372}: commit: æµ‹è¯•完成
0516a6b HEAD@{373}: checkout: moving from lishui-Smartor to master
88481a3 HEAD@{374}: commit: æµ‹è¯•完成
12eb16c HEAD@{375}: commit: æµ‹è¯•完成
083ae82 HEAD@{376}: checkout: moving from wuxi-smartor to lishui-Smartor
f5c2015 HEAD@{377}: commit: æµ‹è¯•完成
28f8a2e HEAD@{378}: checkout: moving from lishui-Smartor to wuxi-smartor
083ae82 HEAD@{379}: commit: æµ‹è¯•完成
36b7179 HEAD@{380}: checkout: moving from wuxi-smartor to lishui-Smartor
28f8a2e HEAD@{381}: commit: æµ‹è¯•完成
5e20020 HEAD@{382}: checkout: moving from lishui-Smartor to wuxi-smartor
36b7179 HEAD@{383}: checkout: moving from master to lishui-Smartor
0516a6b HEAD@{384}: checkout: moving from wuxi-smartor to master
5e20020 HEAD@{385}: checkout: moving from lishui-Smartor to wuxi-smartor
36b7179 HEAD@{386}: commit: æµ‹è¯•完成
03a3eff HEAD@{387}: checkout: moving from master to lishui-Smartor
0516a6b HEAD@{388}: commit: æµ‹è¯•完成
32674b0 HEAD@{389}: checkout: moving from lishui-Smartor to master
03a3eff HEAD@{390}: checkout: moving from master to lishui-Smartor
32674b0 HEAD@{391}: checkout: moving from lishui-Smartor to master
03a3eff HEAD@{392}: commit: æµ‹è¯•完成
2b1cfea HEAD@{393}: commit: æµ‹è¯•完成
ff99a9b HEAD@{394}: checkout: moving from master to lishui-Smartor
32674b0 HEAD@{395}: checkout: moving from lishui-Smartor to master
ff99a9b HEAD@{396}: commit: æµ‹è¯•完成
cf2c2a9 HEAD@{397}: checkout: moving from wuxi-smartor to lishui-Smartor
5e20020 HEAD@{398}: checkout: moving from lishui-Smartor to wuxi-smartor
cf2c2a9 HEAD@{399}: checkout: moving from wuxi-smartor to lishui-Smartor
5e20020 HEAD@{400}: checkout: moving from lishui-Smartor to wuxi-smartor
cf2c2a9 HEAD@{401}: commit: æµ‹è¯•完成
a77752e HEAD@{402}: commit: æµ‹è¯•完成
3bb35f1 HEAD@{403}: commit: æµ‹è¯•完成
b0dd238 HEAD@{404}: commit: æµ‹è¯•完成
57a7537 HEAD@{405}: commit: æµ‹è¯•完成
83d8322 HEAD@{406}: checkout: moving from master to lishui-Smartor
32674b0 HEAD@{407}: commit: æµ‹è¯•完成
f6bc6ed HEAD@{408}: checkout: moving from lishui-Smartor to master
83d8322 HEAD@{409}: commit: æµ‹è¯•完成
ee1d4af HEAD@{410}: checkout: moving from master to lishui-Smartor
f6bc6ed HEAD@{411}: checkout: moving from lishui-Smartor to master
ee1d4af HEAD@{412}: commit: æµ‹è¯•完成
bcf3cae HEAD@{413}: commit: æµ‹è¯•完成
d5f7da9 HEAD@{414}: checkout: moving from wuxi-smartor to lishui-Smartor
5e20020 HEAD@{415}: commit: æµ‹è¯•完成
ee31f47 HEAD@{416}: checkout: moving from lishui-Smartor to wuxi-smartor
d5f7da9 HEAD@{417}: commit (merge): æµ‹è¯•完成
5acc6d2 HEAD@{418}: commit: æµ‹è¯•完成
355bbb7 HEAD@{419}: commit: æµ‹è¯•完成
a3d2f84 HEAD@{420}: checkout: moving from wuxi-smartor to lishui-Smartor
ee31f47 HEAD@{421}: checkout: moving from lishui-Smartor to wuxi-smartor
a3d2f84 HEAD@{422}: commit: æµ‹è¯•完成
bc99b53 HEAD@{423}: checkout: moving from wuxi-smartor to lishui-Smartor
ee31f47 HEAD@{424}: commit: æµ‹è¯•完成
84b1d28 HEAD@{425}: checkout: moving from lishui-Smartor to wuxi-smartor
bc99b53 HEAD@{426}: commit: æµ‹è¯•完成
17edb0e HEAD@{427}: checkout: moving from wuxi-smartor to lishui-Smartor
84b1d28 HEAD@{428}: commit: æµ‹è¯•完成
bfce8d1 HEAD@{429}: checkout: moving from lishui-Smartor to wuxi-smartor
17edb0e HEAD@{430}: checkout: moving from wuxi-smartor to lishui-Smartor
bfce8d1 HEAD@{431}: commit: æµ‹è¯•完成
44d24a2 HEAD@{432}: checkout: moving from lishui-Smartor to wuxi-smartor
17edb0e HEAD@{433}: checkout: moving from wuxi-smartor to lishui-Smartor
44d24a2 HEAD@{434}: commit: æµ‹è¯•完成
5f4c59e HEAD@{435}: checkout: moving from lishui-Smartor to wuxi-smartor
17edb0e HEAD@{436}: commit: æµ‹è¯•完成
891f159 HEAD@{437}: commit: æµ‹è¯•完成
50873f4 HEAD@{438}: checkout: moving from wuxi-smartor to lishui-Smartor
5f4c59e HEAD@{439}: commit: æµ‹è¯•完成
4f3692a HEAD@{440}: checkout: moving from lishui-Smartor to wuxi-smartor
50873f4 HEAD@{441}: checkout: moving from wuxi-smartor to lishui-Smartor
4f3692a HEAD@{442}: commit: æµ‹è¯•完成
321891f HEAD@{443}: commit: æµ‹è¯•完成
3b8d057 HEAD@{444}: commit: æµ‹è¯•完成
f6bc6ed HEAD@{445}: merge master: Fast-forward
9507541 HEAD@{446}: checkout: moving from lishui-Smartor to wuxi-smartor
50873f4 HEAD@{447}: commit: æµ‹è¯•完成
ec64a69 HEAD@{448}: commit: æµ‹è¯•完成
8aa0592 HEAD@{449}: checkout: moving from master to lishui-Smartor
f6bc6ed HEAD@{450}: checkout: moving from lishui-Smartor to master
8aa0592 HEAD@{451}: checkout: moving from master to lishui-Smartor
f6bc6ed HEAD@{452}: checkout: moving from lishui-Smartor to master
8aa0592 HEAD@{453}: checkout: moving from master to lishui-Smartor
f6bc6ed HEAD@{454}: checkout: moving from lishui-Smartor to master
8aa0592 HEAD@{455}: checkout: moving from master to lishui-Smartor
f6bc6ed HEAD@{456}: checkout: moving from lishui-Smartor to master
8aa0592 HEAD@{457}: commit: æµ‹è¯•完成
a5faf6e HEAD@{458}: commit (merge): æµ‹è¯•完成
46784b2 HEAD@{459}: checkout: moving from master to lishui-Smartor
f6bc6ed HEAD@{460}: commit: æµ‹è¯•完成
f4e079f HEAD@{461}: checkout: moving from lishui-Smartor to master
46784b2 HEAD@{462}: commit: æµ‹è¯•完成
e48362d HEAD@{463}: commit (merge): æµ‹è¯•完成
4cd2bfd HEAD@{464}: checkout: moving from master to lishui-Smartor
f4e079f HEAD@{465}: commit: æµ‹è¯•完成
dea82b7 HEAD@{466}: commit: æµ‹è¯•完成
0c2a0bd HEAD@{467}: checkout: moving from lishui-Smartor to master
4cd2bfd HEAD@{468}: commit: æµ‹è¯•完成
7cfedaa HEAD@{469}: commit (merge): æµ‹è¯•完成
98589bb HEAD@{470}: checkout: moving from master to lishui-Smartor
0c2a0bd HEAD@{471}: commit: æµ‹è¯•完成
48e96f3 HEAD@{472}: checkout: moving from lishui-Smartor to master
98589bb HEAD@{473}: checkout: moving from master to lishui-Smartor
48e96f3 HEAD@{474}: commit: æµ‹è¯•完成
fc63b5b HEAD@{475}: checkout: moving from lishui-Smartor to master
98589bb HEAD@{476}: commit: æµ‹è¯•完成
981fbdd HEAD@{477}: pull --tags origin lishui-Smartor: Fast-forward
8c79267 HEAD@{478}: reset: moving to 8c79267eb478e2986c5293d3fb48f1c3da18c544
981fbdd HEAD@{479}: checkout: moving from linshi-smartor to lishui-Smartor
981fbdd HEAD@{480}: checkout: moving from linshi-smartor to linshi-smartor
981fbdd HEAD@{481}: checkout: moving from lishui-Smartor to linshi-smartor
981fbdd HEAD@{482}: checkout: moving from master to lishui-Smartor
fc63b5b HEAD@{483}: commit: æµ‹è¯•完成
aca3443 HEAD@{484}: checkout: moving from lishui-Smartor to master
981fbdd HEAD@{485}: commit: æµ‹è¯•完成
6de02b3 HEAD@{486}: checkout: moving from master to lishui-Smartor
aca3443 HEAD@{487}: checkout: moving from lishui-Smartor to master
6de02b3 HEAD@{488}: checkout: moving from master to lishui-Smartor
aca3443 HEAD@{489}: checkout: moving from lishui-Smartor to master
6de02b3 HEAD@{490}: commit: æµ‹è¯•完成
9896138 HEAD@{491}: commit (merge): æµ‹è¯•完成
4a7648d HEAD@{492}: checkout: moving from master to lishui-Smartor
aca3443 HEAD@{493}: commit: æµ‹è¯•完成
1a090a4 HEAD@{494}: commit: æµ‹è¯•完成
8c79267 HEAD@{495}: commit: æµ‹è¯•完成
080186b HEAD@{496}: checkout: moving from lishui-Smartor to master
4a7648d HEAD@{497}: commit: æµ‹è¯•完成
09a1bd5 HEAD@{498}: commit: æµ‹è¯•完成
4492ab0 HEAD@{499}: commit: æµ‹è¯•完成
eef0168 HEAD@{500}: commit (merge): æµ‹è¯•完成
3dcfdb6 HEAD@{501}: checkout: moving from master to lishui-Smartor
080186b HEAD@{502}: commit: æµ‹è¯•完成
0a4cc3c HEAD@{503}: checkout: moving from external to master
3a7caf4 (origin/external, external) HEAD@{504}: checkout: moving from master to external
0a4cc3c HEAD@{505}: checkout: moving from external to master
3a7caf4 (origin/external, external) HEAD@{506}: commit: æµ‹è¯•完成
5fcfaee HEAD@{507}: commit: æµ‹è¯•完成
c8204d0 HEAD@{508}: checkout: moving from master to external
0a4cc3c HEAD@{509}: checkout: moving from external to master
c8204d0 HEAD@{510}: checkout: moving from master to external
0a4cc3c HEAD@{511}: checkout: moving from external to master
c8204d0 HEAD@{512}: checkout: moving from external to external
c8204d0 HEAD@{513}: checkout: moving from master to external
0a4cc3c HEAD@{514}: commit: æµ‹è¯•完成
1cb1fbf HEAD@{515}: checkout: moving from external to master
c8204d0 HEAD@{516}: commit: æµ‹è¯•完成
621935e HEAD@{517}: checkout: moving from master to external
1cb1fbf HEAD@{518}: reset: moving to HEAD
1cb1fbf HEAD@{519}: checkout: moving from external to master
621935e HEAD@{520}: checkout: moving from master to external
1cb1fbf HEAD@{521}: checkout: moving from external to master
621935e HEAD@{522}: checkout: moving from 1cb1fbf80c955986385377b5f84e8915d1e655d6 to external
1cb1fbf HEAD@{523}: checkout: moving from external to 1cb1fbf80c955986385377b5f84e8915d1e655d6
621935e HEAD@{524}: checkout: moving from wuxi-smartor to external
9507541 HEAD@{525}: checkout: moving from external to wuxi-smartor
621935e HEAD@{526}: commit: æµ‹è¯•完成
c7e1537 HEAD@{527}: checkout: moving from wuxi-smartor to external
9507541 HEAD@{528}: checkout: moving from master to wuxi-smartor
1cb1fbf HEAD@{529}: commit: æµ‹è¯•完成
77fb64c HEAD@{530}: checkout: moving from lishui-Smartor to master
3dcfdb6 HEAD@{531}: commit: ä¸½æ°´æäº¤
77fb64c HEAD@{532}: checkout: moving from master to lishui-Smartor
77fb64c HEAD@{533}: checkout: moving from wuxi-smartor to master
9507541 HEAD@{534}: checkout: moving from wuxi-smartor to wuxi-smartor
9507541 HEAD@{535}: checkout: moving from master to wuxi-smartor
77fb64c HEAD@{536}: commit: æ–°åŽæäº¤
9507541 HEAD@{537}: merge wuxi-smartor: Fast-forward
07e07d6 HEAD@{538}: checkout: moving from wuxi-smartor to master
9507541 HEAD@{539}: commit: æ— é”¡æäº¤
07e07d6 HEAD@{540}: checkout: moving from master to wuxi-smartor
07e07d6 HEAD@{541}: commit: æ–°åŽæäº¤
b26c48a HEAD@{542}: checkout: moving from external to master
c7e1537 HEAD@{543}: commit: å¤–链独立
c87c46a HEAD@{544}: commit: å¤–链独立
4fb7f36 HEAD@{545}: checkout: moving from master to external
b26c48a HEAD@{546}: commit: æµ‹è¯•完成
c1139d1 HEAD@{547}: checkout: moving from external to master
4fb7f36 HEAD@{548}: checkout: moving from master to external
c1139d1 HEAD@{549}: checkout: moving from external to master
4fb7f36 HEAD@{550}: commit: æµ‹è¯•完成
c1139d1 HEAD@{551}: checkout: moving from master to external
c1139d1 HEAD@{552}: commit: æµ‹è¯•完成
b1d81d0 HEAD@{553}: commit: æµ‹è¯•完成
ae117f0 HEAD@{554}: commit: æµ‹è¯•完成
5dc9d1b HEAD@{555}: commit: æµ‹è¯•完成
9a1a82e HEAD@{556}: commit: æµ‹è¯•完成
294e513 HEAD@{557}: commit: æµ‹è¯•完成
007d388 HEAD@{558}: commit: æµ‹è¯•完成
h origin --force --all
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,258 @@
                   SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
      Commands marked with * may be preceded by a number, _N.
      Notes in parentheses indicate the behavior if _N is given.
      A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
  h  H                 Display this help.
  q  :q  Q  :Q  ZZ     Exit.
 ---------------------------------------------------------------------------
                           MMOOVVIINNGG
  e  ^E  j  ^N  CR  *  Forward  one line   (or _N lines).
  y  ^Y  k  ^K  ^P  *  Backward one line   (or _N lines).
  f  ^F  ^V  SPACE  *  Forward  one window (or _N lines).
  b  ^B  ESC-v      *  Backward one window (or _N lines).
  z                 *  Forward  one window (and set window to _N).
  w                 *  Backward one window (and set window to _N).
  ESC-SPACE         *  Forward  one window, but don't stop at end-of-file.
  d  ^D             *  Forward  one half-window (and set half-window to _N).
  u  ^U             *  Backward one half-window (and set half-window to _N).
  ESC-)  RightArrow *  Right one half screen width (or _N positions).
  ESC-(  LeftArrow  *  Left  one half screen width (or _N positions).
  ESC-}  ^RightArrow   Right to last column displayed.
  ESC-{  ^LeftArrow    Left  to first column.
  F                    Forward forever; like "tail -f".
  ESC-F                Like F but stop when search pattern is found.
  r  ^R  ^L            Repaint screen.
  R                    Repaint screen, discarding buffered input.
        ---------------------------------------------------
        Default "window" is the screen height.
        Default "half-window" is half of the screen height.
 ---------------------------------------------------------------------------
                          SSEEAARRCCHHIINNGG
  /_p_a_t_t_e_r_n          *  Search forward for (_N-th) matching line.
  ?_p_a_t_t_e_r_n          *  Search backward for (_N-th) matching line.
  n                 *  Repeat previous search (for _N-th occurrence).
  N                 *  Repeat previous search in reverse direction.
  ESC-n             *  Repeat previous search, spanning files.
  ESC-N             *  Repeat previous search, reverse dir. & spanning files.
  ESC-u                Undo (toggle) search highlighting.
  ESC-U                Clear search highlighting.
  &_p_a_t_t_e_r_n          *  Display only matching lines.
        ---------------------------------------------------
        A search pattern may begin with one or more of:
        ^N or !  Search for NON-matching lines.
        ^E or *  Search multiple files (pass thru END OF FILE).
        ^F or @  Start search at FIRST file (for /) or last file (for ?).
        ^K       Highlight matches, but don't move (KEEP position).
        ^R       Don't use REGULAR EXPRESSIONS.
        ^W       WRAP search if no match found.
 ---------------------------------------------------------------------------
                           JJUUMMPPIINNGG
  g  <  ESC-<       *  Go to first line in file (or line _N).
  G  >  ESC->       *  Go to last line in file (or line _N).
  p  %              *  Go to beginning of file (or _N percent into file).
  t                 *  Go to the (_N-th) next tag.
  T                 *  Go to the (_N-th) previous tag.
  {  (  [           *  Find close bracket } ) ].
  }  )  ]           *  Find open bracket { ( [.
  ESC-^F _<_c_1_> _<_c_2_>  *  Find close bracket _<_c_2_>.
  ESC-^B _<_c_1_> _<_c_2_>  *  Find open bracket _<_c_1_>.
        ---------------------------------------------------
        Each "find close bracket" command goes forward to the close bracket
          matching the (_N-th) open bracket in the top line.
        Each "find open bracket" command goes backward to the open bracket
          matching the (_N-th) close bracket in the bottom line.
  m_<_l_e_t_t_e_r_>            Mark the current top line with <letter>.
  M_<_l_e_t_t_e_r_>            Mark the current bottom line with <letter>.
  '_<_l_e_t_t_e_r_>            Go to a previously marked position.
  ''                   Go to the previous position.
  ^X^X                 Same as '.
  ESC-M_<_l_e_t_t_e_r_>        Clear a mark.
        ---------------------------------------------------
        A mark is any upper-case or lower-case letter.
        Certain marks are predefined:
             ^  means  beginning of the file
             $  means  end of the file
 ---------------------------------------------------------------------------
                        CCHHAANNGGIINNGG FFIILLEESS
  :e [_f_i_l_e]            Examine a new file.
  ^X^V                 Same as :e.
  :n                *  Examine the (_N-th) next file from the command line.
  :p                *  Examine the (_N-th) previous file from the command line.
  :x                *  Examine the first (or _N-th) file from the command line.
  :d                   Delete the current file from the command line list.
  =  ^G  :f            Print current file name.
 ---------------------------------------------------------------------------
                    MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS
  -_<_f_l_a_g_>              Toggle a command line option [see OPTIONS below].
  --_<_n_a_m_e_>             Toggle a command line option, by name.
  __<_f_l_a_g_>              Display the setting of a command line option.
  ___<_n_a_m_e_>             Display the setting of an option, by name.
  +_c_m_d                 Execute the less cmd each time a new file is examined.
  !_c_o_m_m_a_n_d             Execute the shell command with $SHELL.
  |XX_c_o_m_m_a_n_d            Pipe file between current pos & mark XX to shell command.
  s _f_i_l_e               Save input to a file.
  v                    Edit the current file with $VISUAL or $EDITOR.
  V                    Print version number of "less".
 ---------------------------------------------------------------------------
                           OOPPTTIIOONNSS
        Most options may be changed either on the command line,
        or from within less by using the - or -- command.
        Options may be given in one of two forms: either a single
        character preceded by a -, or a name preceded by --.
  -?  ........  --help
                  Display help (from command line).
  -a  ........  --search-skip-screen
                  Search skips current screen.
  -A  ........  --SEARCH-SKIP-SCREEN
                  Search starts just after target line.
  -b [_N]  ....  --buffers=[_N]
                  Number of buffers.
  -B  ........  --auto-buffers
                  Don't automatically allocate buffers for pipes.
  -c  ........  --clear-screen
                  Repaint by clearing rather than scrolling.
  -d  ........  --dumb
                  Dumb terminal.
  -D xx_c_o_l_o_r  .  --color=xx_c_o_l_o_r
                  Set screen colors.
  -e  -E  ....  --quit-at-eof  --QUIT-AT-EOF
                  Quit at end of file.
  -f  ........  --force
                  Force open non-regular files.
  -F  ........  --quit-if-one-screen
                  Quit if entire file fits on first screen.
  -g  ........  --hilite-search
                  Highlight only last match for searches.
  -G  ........  --HILITE-SEARCH
                  Don't highlight any matches for searches.
  -h [_N]  ....  --max-back-scroll=[_N]
                  Backward scroll limit.
  -i  ........  --ignore-case
                  Ignore case in searches that do not contain uppercase.
  -I  ........  --IGNORE-CASE
                  Ignore case in all searches.
  -j [_N]  ....  --jump-target=[_N]
                  Screen position of target lines.
  -J  ........  --status-column
                  Display a status column at left edge of screen.
  -k [_f_i_l_e]  .  --lesskey-file=[_f_i_l_e]
                  Use a lesskey file.
  -K  ........  --quit-on-intr
                  Exit less in response to ctrl-C.
  -L  ........  --no-lessopen
                  Ignore the LESSOPEN environment variable.
  -m  -M  ....  --long-prompt  --LONG-PROMPT
                  Set prompt style.
  -n  -N  ....  --line-numbers  --LINE-NUMBERS
                  Don't use line numbers.
  -o [_f_i_l_e]  .  --log-file=[_f_i_l_e]
                  Copy to log file (standard input only).
  -O [_f_i_l_e]  .  --LOG-FILE=[_f_i_l_e]
                  Copy to log file (unconditionally overwrite).
  -p [_p_a_t_t_e_r_n]  --pattern=[_p_a_t_t_e_r_n]
                  Start at pattern (from command line).
  -P [_p_r_o_m_p_t]   --prompt=[_p_r_o_m_p_t]
                  Define new prompt.
  -q  -Q  ....  --quiet  --QUIET  --silent --SILENT
                  Quiet the terminal bell.
  -r  -R  ....  --raw-control-chars  --RAW-CONTROL-CHARS
                  Output "raw" control characters.
  -s  ........  --squeeze-blank-lines
                  Squeeze multiple blank lines.
  -S  ........  --chop-long-lines
                  Chop (truncate) long lines rather than wrapping.
  -t [_t_a_g]  ..  --tag=[_t_a_g]
                  Find a tag.
  -T [_t_a_g_s_f_i_l_e] --tag-file=[_t_a_g_s_f_i_l_e]
                  Use an alternate tags file.
  -u  -U  ....  --underline-special  --UNDERLINE-SPECIAL
                  Change handling of backspaces.
  -V  ........  --version
                  Display the version number of "less".
  -w  ........  --hilite-unread
                  Highlight first new line after forward-screen.
  -W  ........  --HILITE-UNREAD
                  Highlight first new line after any forward movement.
  -x [_N[,...]]  --tabs=[_N[,...]]
                  Set tab stops.
  -X  ........  --no-init
                  Don't use termcap init/deinit strings.
  -y [_N]  ....  --max-forw-scroll=[_N]
                  Forward scroll limit.
  -z [_N]  ....  --window=[_N]
                  Set size of window.
  -" [_c[_c]]  .  --quotes=[_c[_c]]
                  Set shell quote characters.
  -~  ........  --tilde
                  Don't display tildes after end of file.
  -# [_N]  ....  --shift=[_N]
                  Set horizontal scroll amount (0 = one half screen width).
                --file-size
                  Automatically determine the size of the input file.
                --follow-name
                  The F command changes files if the input file is renamed.
                --incsearch
                  Search file as each pattern character is typed in.
                --line-num-width=N
                  Set the width of the -N line number field to N characters.
                --mouse
                  Enable mouse input.
                --no-keypad
                  Don't send termcap keypad init/deinit strings.
                --no-histdups
                  Remove duplicates from command history.
                --rscroll=C
                  Set the character used to mark truncated lines.
                --save-marks
                  Retain marks across invocations of less.
                --status-col-width=N
                  Set the width of the -J status column to N characters.
                --use-backslash
                  Subsequent options use backslash as escape char.
                --use-color
                  Enables colored text.
                --wheel-lines=N
                  Each click of the mouse wheel moves N lines.
 ---------------------------------------------------------------------------
                          LLIINNEE EEDDIITTIINNGG
        These keys can be used to edit text being entered
        on the "command line" at the bottom of the screen.
 RightArrow ..................... ESC-l ... Move cursor right one character.
 LeftArrow ...................... ESC-h ... Move cursor left one character.
 ctrl-RightArrow  ESC-RightArrow  ESC-w ... Move cursor right one word.
 ctrl-LeftArrow   ESC-LeftArrow   ESC-b ... Move cursor left one word.
 HOME ........................... ESC-0 ... Move cursor to start of line.
 END ............................ ESC-$ ... Move cursor to end of line.
 BACKSPACE ................................ Delete char to left of cursor.
 DELETE ......................... ESC-x ... Delete char under cursor.
 ctrl-BACKSPACE   ESC-BACKSPACE ........... Delete word to left of cursor.
 ctrl-DELETE .... ESC-DELETE .... ESC-X ... Delete word under cursor.
 ctrl-U ......... ESC (MS-DOS only) ....... Delete entire line.
 UpArrow ........................ ESC-k ... Retrieve previous command line.
 DownArrow ...................... ESC-j ... Retrieve next command line.
 TAB ...................................... Complete filename & cycle.
 SHIFT-TAB ...................... ESC-TAB   Complete filename & reverse cycle.
 ctrl-L ................................... Complete filename, list all.
src/api/AiCentre/external.js
@@ -92,7 +92,7 @@
    data: data
  });
}
// æ–°å¢žæœåŠ¡
// å†æ¬¡éšè®¿æœåŠ¡
export function addserviceSubtask(data) {
  return request({
    url: "/smartor/serviceSubtask/addSubTaskAgain",
@@ -100,4 +100,12 @@
    data: data
  });
}
// å†æ¬¡éšè®¿æœåŠ¡
export function addSubtask(data) {
  return request({
    url: "/smartor/serviceSubtask/addSubTask",
    method: "post",
    data: data
  });
}
src/api/AiCentre/index.js
@@ -9,4 +9,4 @@
export * from './external'
export * from './patientexternal'
export * from './EChartsdata'
export * from './satisfaction'
export * from './satisfactionse'
src/api/AiCentre/satisfactionse.js
src/assets/order/example.mp3
Binary files differ
src/components/CallButton/index.vue
@@ -37,7 +37,7 @@
    },
  },
  data() {
    const randomNum = Math.floor(Math.random() * 11) + 1000; // å†…部定义
    const randomNum = Math.floor(Math.random() * 20) + 1000; // å†…部定义
    return {
      isCalling: false,
      callStatus: "idle", // idle, calling, connected, ended
@@ -69,6 +69,8 @@
    },
  },
  mounted() {
    console.log('当前分机号',this.sipConfig);
    sipService.init(this.sipConfig);
    sipService.onStatusChange = (status) => {
      this.sipStatus = status.text;
src/layout/components/Sidebar/SidebarItem.vue
@@ -14,7 +14,6 @@
      </template>
      <sidebar-item
        v-for="child in item.children"
        :key="child.path"
        :is-nest="true"
        :item="child"
        :base-path="resolvePath(child.path)"
src/store/modules/user.js
@@ -158,6 +158,10 @@
          localStorage.setItem('orgname', '青田县中医医院');
          localStorage.setItem('ZuHuID', '1429338802177000005');
          localStorage.setItem('deptCode', '');
          }else if (orgid=='47240004533118111A1001') {
          localStorage.setItem('orgname', '龙泉市人民医院');
          localStorage.setItem('ZuHuID', '1429338802177000007');
          localStorage.setItem('deptCode', '');
          }
          resolve()
        }).catch(error => {
src/utils/request.js
@@ -17,7 +17,7 @@
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // è¶…æ—¶
  timeout: 10000,
  timeout: 100000,
});
// request拦截器
src/utils/sipService-cs.js
ÎļþÃû´Ó src/utils/sipService-bd.js ÐÞ¸Ä
@@ -160,7 +160,7 @@
      };
    });
    this.currentSession.on('failed', (e) => {
        this.updateCallStatus('failed', `呼叫失败2: ${e.cause}`);
        this.updateCallStatus('failed', `呼叫失败2: ${e}`);
      });
      this.currentSession.on('ended', () => {
src/utils/sipService.js
@@ -63,7 +63,7 @@
        const options = {
          sessionTimers: true, // å¯ç”¨ä¼šè¯è®¡æ—¶å™¨
          sessionTimersExpires: 90,
          sessionTimersExpires: 150,
          extraHeaders: ["Accept: application/sdp"],
          mediaConstraints: { audio: true, video: false },
          rtcOfferConstraints: {
src/views/followvisit/again/index.vue
@@ -1197,8 +1197,9 @@
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.topqueryParams.managementDoctorCode= store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
src/views/followvisit/discharge/index.vue
@@ -1059,8 +1059,8 @@
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.topqueryParams.managementDoctorCode= store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
src/views/followvisit/discharge/outpatientService.vue
@@ -1181,8 +1181,9 @@
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.topqueryParams.managementDoctorCode= store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
src/views/followvisit/record/detailpage/MergeAndModify.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,449 @@
<template>
  <div class="merge-questionnaire-container">
    <div class="merge-header">
      <h3>合并编辑问卷 (共 {{ services.length }} ä¸ªæœªå®ŒæˆæœåŠ¡)</h3>
      <el-tag
        v-for="service in services"
        :key="service.id"
        type="info"
        style="margin-right: 10px"
      >
        {{ service.taskName }} ({{ service.sendname }})
      </el-tag>
    </div>
    <div class="merge-content">
      <div class="question-list">
        <div
          v-for="(question, index) in mergedQuestions"
          :key="question.uniqueKey"
          class="question-item"
        >
          <!-- é¢˜ç›®å±•示 - ä¸Žçˆ¶ç»„件保持一致 -->
          <div
            :class="
              question.isabnormal ? 'scriptTopic-isabnormal' : 'scriptTopic-dev'
            "
          >
            <div class="dev-text">
              {{ index + 1 }}、[{{
                getQuestionType(question.scriptType)
              }}]<span> {{ question.scriptContent }}</span>
            </div>
            <!-- å•选 -->
            <div class="dev-xx" v-if="question.scriptType == 1">
              <el-radio-group
                v-model="question.mergedResult"
                @change="
                  handleOptionChange(
                    $event,
                    index,
                    question.svyLibTemplateTargetoptions,
                    question
                  )
                "
                >11
                <el-radio
                  v-for="(
                    option, optIndex
                  ) in question.svyLibTemplateTargetoptions"
                  :key="optIndex"
                  :label="option.optioncontent"
                  :class="option.isabnormal ? 'red-star' : ''"
                >
                  {{ option.optioncontent }}
                </el-radio>
              </el-radio-group>
            </div>
            <!-- å¤šé€‰ -->
            <div class="dev-xx" v-if="question.scriptType == 2">
              <el-checkbox-group
                v-model="question.mergedResult"
                @change="updateScore($event, index, question.options, question)"
              >
                <el-checkbox
                  v-for="(option, optIndex) in question.options"
                  :key="optIndex"
                  :label="option.optioncontent"
                  :class="option.isabnormal ? 'red-star' : ''"
                >
                  {{ option.optioncontent }}
                </el-checkbox>
              </el-checkbox-group>
            </div>
            <!-- å¡«ç©º -->
            <div class="dev-xx" v-if="question.scriptType == 4">
              <el-input
                type="textarea"
                :rows="2"
                placeholder="请输入答案"
                v-model="question.mergedResult"
                clearable
              />
            </div>
            <!-- é™„加输入框 -->
            <div v-if="question.showAppendInput" class="append-input-container">
              <el-input
                type="textarea"
                :rows="2"
                placeholder="请输入具体信息"
                v-model="question.answerps"
                clearable
              />
            </div>
            <!-- æç¤ºä¿¡æ¯ -->
            <div v-show="question.prompt">
              <el-alert :title="question.prompt" type="warning" />
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="merge-footer">
      <el-button @click="handleCancel">取消</el-button>
      <el-button type="primary" @click="handleSave" :loading="isSaving"
        >保存到所有问卷</el-button
      >
    </div>
  </div>
</template>
<script>
import {
  getsearchrResults,
  serviceSubtaskDetailedit,
  serviceSubtaskDetailadd,
  Editsingletaskson,
  getTaskservelist,
  alterpatient,
} from "@/api/AiCentre/index";
export default {
  props: {
    selectedServices: {
      type: Array,
      required: true,
    },
    patid: {
      type: [String, Number],
      required: true,
    },
  },
  data() {
    return {
      services: [],
      mergedQuestions: [], // åˆå¹¶åŽçš„问题数据
      isSaving: false,
    };
  },
  created() {
    this.loadServicesData();
  },
  methods: {
    getQuestionType(type) {
      const types = { 1: "单选", 2: "多选", 4: "问答" };
      return types[type] || "未知";
    },
    async loadServicesData() {
      this.services = this.selectedServices;
      const loading = this.$loading({
        lock: true,
        text: "正在加载未完成问卷数据...",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
      });
      try {
        // åªåŠ è½½æœªå®Œæˆçš„æœåŠ¡é—®å·æ•°æ®
        const requests = this.services.map((service) =>
          getsearchrResults({
            taskid: service.taskid,
            patid: this.patid,
            subId: service.id,
            isFinish: false, // ç¡®ä¿åªèŽ·å–æœªå®Œæˆçš„é—®å·
          })
        );
        const responses = await Promise.all(requests);
        // åˆå¹¶æ‰€æœ‰é—®é¢˜ï¼ŒåŽ»é‡
        const allQuestions = [];
        const questionMap = {};
        responses.forEach((response, index) => {
          if (response.code == 200 && response.data.scriptResult) {
            response.data.scriptResult.forEach((q) => {
              const key = `${q.scriptContent}_${q.scriptType}`;
              if (!questionMap[key]) {
                questionMap[key] = {
                  ...q,
                  uniqueKey: key,
                  mergedResult: q.scriptType == 2 ? [] : null,
                  originalServices: [], // è®°å½•原始服务ID
                };
                allQuestions.push(questionMap[key]);
              }
              questionMap[key].originalServices.push(this.services[index].id);
            });
          }
        });
        // åˆå§‹åŒ–合并结果
        this.mergedQuestions = allQuestions.map((q) => ({
          ...q,
          mergedResult: q.scriptType == 2 ? [] : q.scriptResult || null,
        }));
        console.log(this.mergedQuestions);
      } catch (error) {
        this.$message.error("加载问卷数据失败: " + error.message);
      } finally {
        loading.close();
      }
    },
    // å¤„理选项变化 (与父组件保持一致)
    handleOptionChange(selectedOption, questionIndex, options, question) {
      const selectedOptionObj = options.find(
        (item) => item.optioncontent == selectedOption
      );
      // è®¾ç½®å¼‚常状态
      question.isabnormal = !!selectedOptionObj?.isabnormal;
      // å¤„理附加输入框显示
      question.showAppendInput = selectedOptionObj?.appendflag == 1;
      if (!question.showAppendInput) {
        question.answerps = "";
      }
      this.$forceUpdate();
    },
    // æ›´æ–°å¤šé€‰åˆ†æ•° (与父组件保持一致)
    updateScore(selectedValues, questionIndex, options, question) {
      const abnormalOptions = options.filter((opt) => opt.isabnormal);
      question.isabnormal = abnormalOptions.some((opt) =>
        selectedValues.includes(opt.optioncontent)
      );
      this.$forceUpdate();
    },
    handleCancel() {
      this.$emit("cancel");
    },
    async handleSave() {
      this.isSaving = true;
      try {
        const saveResults = [];
        const updateServicePromises = [];
        // 1. ä¿å­˜æ‰€æœ‰é—®å·é—®é¢˜
        for (const service of this.services) {
          const serviceId = service.id;
          const questionsToSave = this.mergedQuestions
            .filter((q) => q.originalServices.includes(serviceId))
            .map((question) => ({
              scriptid: question.id,
              scriptResultId: question.scriptResultId,
              scriptType: question.scriptType,
              questiontext: question.scriptContent,
              asrtext:
                question.scriptType == 2
                  ? question.mergedResult.join("&")
                  : question.mergedResult,
              answerps: question.answerps || null,
              isabnormal: question.isabnormal || false,
            }));
          // ä¿å­˜é—®é¢˜æ•°æ®
          for (const question of questionsToSave) {
            const saveData = {
              taskid: service.taskid,
              patid: this.patid,
              subId: serviceId,
              ...question,
            };
            if (saveData.isabnormal) {
              saveData.excep = 1;
            }
            try {
              const response = question.scriptResultId
                ? await serviceSubtaskDetailedit(saveData)
                : await serviceSubtaskDetailadd(saveData);
              saveResults.push({
                serviceId,
                success: response.code === 200,
                message:
                  response.message ||
                  (response.code === 200 ? "保存成功" : "保存失败"),
              });
            } catch (error) {
              saveResults.push({
                serviceId,
                success: false,
                message: error.message || "保存失败",
              });
            }
          }
          // 2. æ›´æ–°æœåŠ¡çŠ¶æ€ä¸ºå·²å®Œæˆ (sendstate = 6)
          updateServicePromises.push(this.updateServiceStatus(serviceId));
        }
        // ç­‰å¾…所有服务状态更新完成
        const updateResults = await Promise.all(updateServicePromises);
        updateResults.forEach((result) => {
          if (!result.success) {
            saveResults.push({
              serviceId: result.serviceId,
              success: false,
              message: result.message || "服务状态更新失败",
            });
          }
        });
        // ç»Ÿè®¡ç»“æžœ
        const successCount = saveResults.filter((r) => r.success).length;
        const totalCount = saveResults.length;
        // é€šçŸ¥çˆ¶ç»„ä»¶
        this.$emit("save", {
          successCount,
          totalCount,
          results: saveResults,
        });
        if (successCount === totalCount) {
          this.$message.success("所有问卷和服务状态更新成功");
        } else {
          this.$message.warning(
            `成功保存 ${successCount} é¡¹ï¼Œå¤±è´¥ ${totalCount - successCount} é¡¹`
          );
        }
      } catch (error) {
        this.$message.error("保存过程中发生错误: " + error.message);
      } finally {
        this.isSaving = false;
      }
    },
    // æ–°å¢žæ–¹æ³•:更新服务状态
    async updateServiceStatus(serviceId) {
      try {
        // èŽ·å–æœåŠ¡å½“å‰æ•°æ®
        const res = await getTaskservelist({
          patid: this.patid,
          subId: serviceId,
        });
        if (res.code === 200) {
          const serviceData = res.rows[0].serviceSubtaskList.find(
            (item) => item.id === serviceId
          );
          if (serviceData) {
            // æ›´æ–°æœåŠ¡çŠ¶æ€ä¸ºå·²å®Œæˆ (sendstate = 6)
            const updateRes = await Editsingletaskson({
              ...serviceData,
              sendstate: 6, // è®¾ç½®ä¸ºå·²å®ŒæˆçŠ¶æ€
              remark: "通过合并编辑完成", // å¯é€‰ï¼šæ·»åŠ å¤‡æ³¨
            });
            return {
              serviceId,
              success: updateRes.code === 200,
              message: updateRes.message || "服务状态更新成功",
            };
          }
        }
        return {
          serviceId,
          success: false,
          message: "获取服务数据失败",
        };
      } catch (error) {
        return {
          serviceId,
          success: false,
          message: error.message || "更新服务状态失败",
        };
      }
    },
  },
};
</script>
<style scoped>
.merge-questionnaire-container {
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 20px;
}
.merge-header {
  margin-bottom: 20px;
}
.merge-content {
  flex: 1;
  overflow-y: auto;
}
.question-list {
  padding: 10px;
}
/* ä¸Žçˆ¶ç»„件一致的题目样式 */
.scriptTopic-dev {
  margin-bottom: 20px;
  padding: 15px;
  border: 1px solid #ebeef5;
  border-radius: 4px;
}
.scriptTopic-isabnormal {
  margin-bottom: 20px;
  padding: 15px;
  border: 1px solid #f56c6c;
  border-radius: 4px;
  background-color: #fff6f6;
}
.dev-text {
  font-size: 16px;
  margin-bottom: 15px;
  color: #333;
}
.dev-xx {
  margin-left: 20px;
}
.append-input-container {
  margin-top: 15px;
}
.red-star {
  color: #f56c6c;
}
.merge-footer {
  margin-top: 20px;
  text-align: right;
  padding-top: 15px;
  border-top: 1px solid #ebeef5;
}
</style>
src/views/followvisit/record/detailpage/index.vue
@@ -18,6 +18,32 @@
                >只展示本次服务信息</el-button
              >
            </div>
            <div style="margin-left: 20px; color: #59a0f0">
              <el-link
                href="https://9.208.2.207:6060/search-homepage"
                target="_blank"
                :underline="true"
              >
                å‰å¾€CDSS查询
              </el-link>
            </div>
            <div class="merge-controls" v-if="Whetherall">
              <el-button
                type="primary"
                @click="toggleMergeMode"
                :disabled="selectedServices.length < 2"
              >
                {{ isMergeMode ? "取消合并" : "合并编辑问卷" }}
              </el-button>
              <el-button
                v-if="isMergeMode"
                type="success"
                @click="openMergeDialog"
                :disabled="selectedServices.length < 2"
              >
                å¼€å§‹åˆå¹¶ (已选 {{ selectedServices.length }} ä¸ªæœåŠ¡)
              </el-button>
            </div>
          </div>
          <!-- <el-button type="success">随访后短信</el-button> -->
        </div>
@@ -27,7 +53,14 @@
          :data="logsheetlist"
          :row-class-name="tableRowClassName"
          style="width: 100%"
          @selection-change="handleSelectionChange"
        >
          <el-table-column
            type="selection"
            width="55"
            :selectable="checkSelectable"
            v-if="Whetherall"
          ></el-table-column>
          <el-table-column
            prop="sendname"
            align="center"
@@ -204,6 +237,299 @@
        </el-table>
      </div>
    </div>
    <!-- æ·»åŠ åˆå¹¶ç¼–è¾‘å¯¹è¯æ¡† -->
    <el-dialog
      title="合并编辑问卷"
      :visible.sync="mergeDialogVisible"
      width="80%"
      top="5vh"
      v-dialogDrag
    >
      <MergeAndModify
        v-if="mergeDialogVisible"
        :selected-services="selectedServices"
        :patid="patid"
        @save="handleMergeSave"
        @cancel="mergeDialogVisible = false"
      />
    </el-dialog>
    <div class="action-container">
      <div class="call-action">
        <div class="call-container">
          <!-- <div class="call-header">
            <h2>一键呼叫功能</h2>
          </div> -->
          <div class="headline">
            <div>随访内容</div>
          </div>
          <div>
            <el-tabs v-model="activeName" type="border-card">
              <el-tab-pane name="wj">
                <span class="mulsz" slot="label"
                  ><i class="el-icon-notebook-1"></i> é—®å·éšè®¿ç»“æžœ</span
                >
                <div class="CONTENT">
                  <div class="title">{{ taskname ? taskname : "问卷" }}</div>
                  <div class="preview-left" v-if="!Voicetype">
                    <div
                      class="topic-dev"
                      v-for="(item, index) in tableDatatop"
                      :key="item.id"
                    >
                      <!-- å•选 -->
                      <div
                        :class="
                          item.isabnormal
                            ? 'scriptTopic-isabnormal'
                            : 'scriptTopic-dev'
                        "
                        :key="index"
                        v-if="item.scriptType == 1 && !item.astrict"
                      >
                        <div class="dev-text">
                          {{ index + 1 }}、[单选]<span>{{
                            item.scriptContent
                          }}</span>
                        </div>
                        <div class="dev-xx">
                          <el-radio-group
                            v-model="item.scriptResult"
                            @change="
                              handleOptionChange(
                                $event,
                                index,
                                item.svyLibTemplateTargetoptions,
                                item
                              )
                            "
                          >
                            <el-radio
                              v-for="(
                                items, indexs
                              ) in item.svyLibTemplateTargetoptions"
                              :class="items.isabnormal ? 'red-star' : ''"
                              :key="indexs"
                              :label="items.optioncontent"
                              >{{ items.optioncontent }}</el-radio
                            >
                          </el-radio-group>
                        </div>
                        <div
                          v-if="item.showAppendInput||item.answerps"
                          class="append-input-container"
                        >
                          <el-input
                            type="textarea"
                            :rows="2"
                            placeholder="请输入具体信息"
                            v-model="item.answerps"
                            clearable
                          ></el-input>
                        </div>
                        <div v-show="item.prompt">
                          <el-alert :title="item.prompt" type="warning">
                          </el-alert>
                        </div>
                      </div>
                      <!-- å¤šé€‰ -->
                      <div
                        :class="
                          item.isabnormal
                            ? 'scriptTopic-isabnormal'
                            : 'scriptTopic-dev'
                        "
                        :key="index"
                        v-if="item.scriptType == 2 && !item.astrict"
                      >
                        <div class="dev-text">
                          {{ index + 1 }}、[多选]<span>{{
                            item.scriptContent
                          }}</span>
                        </div>
                        <div class="dev-xx">
                          <el-checkbox-group
                            v-model="item.scriptResult"
                            @change="updateScore($event, index, item)"
                          >
                            <el-checkbox
                              :class="items.isabnormal ? 'red-star' : ''"
                              @change="$forceUpdate()"
                              v-for="(
                                items, indexs
                              ) in item.svyLibTemplateTargetoptions"
                              :key="indexs"
                              :label="items.optioncontent"
                            >
                              {{ items.optioncontent }}
                            </el-checkbox>
                          </el-checkbox-group>
                        </div>
                        <div v-show="item.prompt && item.scriptResult[0]">
                          <el-alert :title="item.prompt" type="warning">
                          </el-alert>
                        </div>
                      </div>
                      <!-- å¡«ç©º -->
                      <div
                        class="scriptTopic-dev"
                        :key="index"
                        v-if="item.scriptType == 4 && !item.astrict"
                      >
                        <div class="dev-text">
                          {{ index + 1 }}、[问答]<span>{{
                            item.scriptContent
                          }}</span>
                        </div>
                        <div class="dev-xx">
                          <el-input
                            type="textarea"
                            :rows="2"
                            placeholder="请输入答案"
                            v-model="item.scriptResult"
                            clearable
                          >
                          </el-input>
                        </div>
                      </div>
                    </div>
                  </div>
                  <div class="preview-left" v-else>
                    <div
                      class="topic-dev"
                      v-for="(item, index) in tableDatatop"
                      :key="item.id"
                    >
                      <div v-if="item.targetvalue">
                        <div class="dev-text">
                          {{ index + 1 }}、[单选]<span>{{
                            item.questiontext
                          }}</span>
                        </div>
                        <div class="dev-xx">
                          <el-radio-group
                            v-model="item.matchedtext"
                            @change="
                              handleOptionChange(
                                $event,
                                index,
                                item.ivrTaskScriptTargetoptionList,
                                item
                              )
                            "
                          >
                            <el-radio
                              v-for="(items, index) in item.scriptResult"
                              :key="items"
                              :label="items"
                              >{{ items }}</el-radio
                            >
                          </el-radio-group>
                        </div>
                        <div v-show="item.prompt">
                          <el-alert :title="item.prompt" type="warning">
                          </el-alert>
                        </div>
                      </div>
                      <div class="scriptTopic-dev" :key="index" v-else>
                        <div class="dev-text">
                          {{ index + 1 }}、[问答]<span>{{
                            item.questiontext
                          }}</span>
                        </div>
                        <div class="dev-xx">
                          <el-input
                            type="textarea"
                            :rows="2"
                            placeholder="请输入答案"
                            v-model="item.matchedtext"
                            clearable
                          >
                          </el-input>
                        </div>
                      </div>
                    </div>
                  </div>
                  <el-button
                    v-if="Voicetype"
                    type="primary"
                    @click="yuyingetdetail"
                    >保存服务详情</el-button
                  >
                  <el-button v-else type="primary" @click="getdetail"
                    >保存服务详情</el-button
                  >
                </div>
              </el-tab-pane>
              <el-tab-pane name="yy">
                <span class="mulsz" slot="label"
                  ><i class="el-icon-headset"></i> è¯­éŸ³éšè®¿è¯¦æƒ…</span
                >
                <div class="borderdiv">
                  <div class="title">{{ taskname ? taskname : "问卷" }}</div>
                  <div
                    style="
                      display: flex;
                      text-align: center;
                      align-items: center;
                      color: #59a0f0;
                    "
                  >
                    å®Œæ•´è¯­éŸ³ï¼š
                    <mini-audio
                      :audio-source="
                        voice ? voice : '@assets/order/example.mp3'
                      "
                    ></mini-audio>
                  </div>
                  <div class="preview-left">
                    <div v-for="item in voiceDatatop">
                      <div class="leftside">
                        <i class="el-icon-phone-outline"></i
                        ><span>{{ item.questiontext }}</span>
                      </div>
                      <div class="offside">
                        <i class="el-icon-user"></i>
                        <div class="offside-value">
                          <el-input
                            type="textarea"
                            :autosize="{ minRows: 1 }"
                            v-model="item.asrtext"
                          ></el-input>
                          <div>
                            <mini-audio
                              :audio-source="
                                item.questionvoice
                                  ? item.questionvoice
                                  : '@assets/order/example.mp3'
                              "
                            ></mini-audio>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                  <el-button
                    v-if="Voicetype"
                    type="primary"
                    @click="yuyingetdetail"
                    >保存随访详情</el-button
                  >
                  <el-button v-else type="primary" @click="getdetail"
                    >保存随访详情</el-button
                  >
                </div>
              </el-tab-pane>
            </el-tabs>
          </div>
        </div>
      </div>
      <div class="manual-action">
    <div class="Followuserinfos">
      <div>
        <el-form
@@ -214,8 +540,26 @@
        >
          <div class="headline">
            <div>人工处理</div>
            <el-row :gutter="20">
              <el-col :span="8"
                <div style="margin: 0 30px">
                  <el-button
                    type="primary"
                    plain
                    @click="Editsingletasksonyic('')"
                    >保存基础信息</el-button
                  >
                </div>
                <div>
                  <el-button
                    type="primary"
                    round
                    v-if="this.form.isVisitAgain != 2"
                    @click="sendAgain()"
                    >再次随访</el-button
                  >
                </div>
              </div>
              <el-row>
                <el-col :span="14"
                ><el-form-item label="联系电话">
                  <el-input
                    placeholder="联系电话缺失"
@@ -229,7 +573,9 @@
                    ></el-button
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="8"
              </el-row>
              <el-row>
                <el-col :span="14"
                ><el-form-item label="联系人电话">
                  <el-input
                    placeholder="联系人电话缺失"
@@ -238,12 +584,14 @@
                    <el-button
                      slot="append"
                      icon="el-icon-phone"
                      @click="handleCall(userform.relativetelcode, 'relative')"
                        @click="
                          handleCall(userform.relativetelcode, 'relative')
                        "
                      :disabled="!isValidPhone(userform.relativetelcode)"
                    ></el-button
                  ></el-input> </el-form-item
              ></el-col>
              <el-col :span="8"
                <el-col :span="10"
                ><el-form-item label="联系人关系">
                  <el-input
                    placeholder="联系人关系缺失"
@@ -251,27 +599,14 @@
                  ></el-input> </el-form-item
              ></el-col>
            </el-row>
            <div style="margin-left: 30px">
              <el-button type="primary" plain @click="Editsingletasksonyic('')"
                >保存服务</el-button
              >
            </div>
          </div>
          <el-row :gutter="20" v-if="callStatus !== 'idle'">
            <el-col :span="24">
              <el-alert
                :title="callStatusText"
                :type="callStatusType"
                :closable="false"
                show-icon
              <div class="call-controls">
                <CallButton
                  ref="callButton"
                  :phoneNumber="currentPhoneNumber"
                  style="display: none"
              />
            </el-col>
          </el-row>
          <!-- æŒ‚断按钮(仅在通话中显示) -->
          <el-row :gutter="20" v-if="callStatus === 'connected'">
            <el-col :span="24" style="text-align: center; margin-top: 10px">
                <div v-if="callStatus === 'connected'" class="hangup-btn">
              <el-button
                type="danger"
                icon="el-icon-phone"
@@ -280,42 +615,49 @@
              >
                æŒ‚断电话
              </el-button>
            </el-col>
          </el-row>
                </div>
                <div class="call-status" v-if="callStatus !== 'idle'">
                  <el-alert
                    :title="callStatusText"
                    :type="callStatusType"
                    :closable="false"
                    show-icon
                  />
                </div>
              </div>
          <el-form-item label="随访记录">
            <el-input type="textarea" v-model="form.remark"></el-input>
          </el-form-item>
          <el-form-item label="处理意见">
            <div>
              <el-button plain type="warning" @click="Editsingletaskson('1')"
                  <el-button
                    plain
                    type="warning"
                    @click="Editsingletaskson('1')"
                >暂不处理</el-button
              >
              <el-button plain type="success" @click="Editsingletaskson('2')"
                  <el-button
                    plain
                    type="success"
                    @click="Editsingletaskson('2')"
                >病情稳定</el-button
              >
              <el-button plain type="primary" @click="Editsingletaskson('3')"
                  <el-button
                    plain
                    type="primary"
                    @click="Editsingletaskson('3')"
                >通知就诊</el-button
              >
              <!-- <el-button type="danger" @click="Editsingletaskson('4')"
    >失访</el-button
  > -->
              <el-button plain type="info" @click="Editsingletaskson('5')"
                >中心随访</el-button
              >
              <el-button
                type="primary"
                round
                v-if="this.form.isVisitAgain != 2"
                @click="sendAgain()"
                >再次随访</el-button
              >
            </div>
          </el-form-item>
        </el-form>
        <el-collapse>
          <el-collapse-item title="查看当前患者信息" name="1">
            <div class="detailed">
              <h3>患者档案信息</h3>
              <el-form ref="userform" :model="userform" label-width="100px">
                <el-row :gutter="20">
                  <el-col :span="12">
@@ -365,261 +707,13 @@
                      /> </el-form-item
                  ></el-col>
                </el-row>
                <!-- <el-row :gutter="20">
                  <el-col :span="24">
                    <el-form-item label="标签" prop="desc">
                      <div class="xinz-inf">
                        <el-tag
                          :key="tag.tagname"
                          type="success"
                          v-for="tag in dynamicTags"
                          :disable-transitions="false"
                        >
                          {{ tag.tagname }}
                        </el-tag>
                      </div>
                    </el-form-item>
                  </el-col>
                </el-row> -->
              </el-form>
            </div>
          </el-collapse-item>
        </el-collapse>
      </div>
    </div>
    <div>
      <h2>一键呼叫功能</h2>
      <CallButton
        ref="callButton"
        :phoneNumber="currentPhoneNumber"
        style="display: none"
      />
    </div>
    <div>
      <el-tabs v-model="activeName" type="border-card">
        <el-tab-pane name="wj">
          <span class="mulsz" slot="label"
            ><i class="el-icon-notebook-1"></i> é—®å·éšè®¿ç»“æžœ</span
          >
          <div class="CONTENT">
            <div class="title">{{ taskname ? taskname : "问卷" }}</div>
            <div class="preview-left" v-if="!Voicetype">
              <div
                class="topic-dev"
                v-for="(item, index) in tableDatatop"
                :key="item.id"
              >
                <!-- å•选 -->
                <div
                  :class="
                    item.isabnormal
                      ? 'scriptTopic-isabnormal'
                      : 'scriptTopic-dev'
                  "
                  :key="index"
                  v-if="item.scriptType == 1 && !item.astrict"
                >
                  <div class="dev-text">
                    {{ index + 1 }}、[单选]<span>{{ item.scriptContent }}</span>
                  </div>
                  <div class="dev-xx">
                    <el-radio-group
                      v-model="item.scriptResult"
                      @change="
                        handleOptionChange(
                          $event,
                          index,
                          item.svyLibTemplateTargetoptions
                        )
                      "
                    >
                      <el-radio
                        v-for="(
                          items, indexs
                        ) in item.svyLibTemplateTargetoptions"
                        :class="items.isabnormal ? 'red-star' : ''"
                        :key="indexs"
                        :label="items.optioncontent"
                        >{{ items.optioncontent }}</el-radio
                      >
                    </el-radio-group>
                  </div>
                  <div v-show="item.prompt">
                    <el-alert :title="item.prompt" type="warning"> </el-alert>
                  </div>
                </div>
                <!-- å¤šé€‰ -->
                <div
                  :class="
                    item.isabnormal
                      ? 'scriptTopic-isabnormal'
                      : 'scriptTopic-dev'
                  "
                  :key="index"
                  v-if="item.scriptType == 2 && !item.astrict"
                >
                  <div class="dev-text">
                    {{ index + 1 }}、[多选]<span>{{ item.scriptContent }}</span>
                  </div>
                  <div class="dev-xx">
                    <el-checkbox-group
                      v-model="item.scriptResult"
                      @change="updateScore($event, index, item)"
                    >
                      <el-checkbox
                        :class="items.isabnormal ? 'red-star' : ''"
                        @change="$forceUpdate()"
                        v-for="(
                          items, indexs
                        ) in item.svyLibTemplateTargetoptions"
                        :key="indexs"
                        :label="items.optioncontent"
                      >
                        {{ items.optioncontent }}
                      </el-checkbox>
                    </el-checkbox-group>
                  </div>
                  <div v-show="item.prompt && item.scriptResult[0]">
                    <el-alert :title="item.prompt" type="warning"> </el-alert>
                  </div>
                </div>
                <!-- å¡«ç©º -->
                <div
                  class="scriptTopic-dev"
                  :key="index"
                  v-if="item.scriptType == 4 && !item.astrict"
                >
                  <div class="dev-text">
                    {{ index + 1 }}、[问答]<span>{{ item.scriptContent }}</span>
                  </div>
                  <div class="dev-xx">
                    <el-input
                      type="textarea"
                      :rows="2"
                      placeholder="请输入答案"
                      v-model="item.scriptResult"
                      clearable
                    >
                    </el-input>
                  </div>
                </div>
              </div>
            </div>
            <div class="preview-left" v-else>
              <div
                class="topic-dev"
                v-for="(item, index) in tableDatatop"
                :key="item.id"
              >
                <div v-if="item.targetvalue">
                  <div class="dev-text">
                    {{ index + 1 }}、[单选]<span>{{ item.questiontext }}</span>
                  </div>
                  <div class="dev-xx">
                    <el-radio-group
                      v-model="item.matchedtext"
                      @change="handleOptionChange($event, index, item)"
                    >
                      <el-radio
                        v-for="(items, index) in item.scriptResult"
                        :key="items"
                        :label="items"
                        >{{ items }}</el-radio
                      >
                    </el-radio-group>
                  </div>
                  <div v-show="item.prompt">
                    <el-alert :title="item.prompt" type="warning"> </el-alert>
                  </div>
                </div>
                <div class="scriptTopic-dev" :key="index" v-else>
                  <div class="dev-text">
                    {{ index + 1 }}、[问答]<span>{{ item.questiontext }}</span>
                  </div>
                  <div class="dev-xx">
                    <el-input
                      type="textarea"
                      :rows="2"
                      placeholder="请输入答案"
                      v-model="item.matchedtext"
                      clearable
                    >
                    </el-input>
                  </div>
                </div>
              </div>
            </div>
            <el-button v-if="Voicetype" type="primary" @click="yuyingetdetail"
              >保存服务详情</el-button
            >
            <el-button v-else type="primary" @click="getdetail"
              >保存服务详情</el-button
            >
          </div>
        </el-tab-pane>
        <el-tab-pane name="yy">
          <span class="mulsz" slot="label"
            ><i class="el-icon-headset"></i> è¯­éŸ³éšè®¿è¯¦æƒ…</span
          >
          <div class="borderdiv">
            <div class="title">{{ taskname ? taskname : "问卷" }}</div>
            <div
              style="
                display: flex;
                text-align: center;
                align-items: center;
                color: #59a0f0;
              "
            >
              å®Œæ•´è¯­éŸ³ï¼š
              <mini-audio
                :audio-source="
                  voice ? voice : 'https://example.com/example.mp3'
                "
              ></mini-audio>
            </div>
            <div class="preview-left">
              <div v-for="item in voiceDatatop">
                <div class="leftside">
                  <i class="el-icon-phone-outline"></i
                  ><span>{{ item.questiontext }}</span>
                </div>
                <div class="offside">
                  <i class="el-icon-user"></i>
                  <div class="offside-value">
                    <el-input
                      type="textarea"
                      :autosize="{ minRows: 1 }"
                      v-model="item.asrtext"
                    ></el-input>
                    <div>
                      <mini-audio
                        :audio-source="
                          item.questionvoice
                            ? item.questionvoice
                            : 'https://example.com/example.mp3'
                        "
                      ></mini-audio>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <el-button v-if="Voicetype" type="primary" @click="yuyingetdetail"
              >保存随访详情</el-button
            >
            <el-button v-else type="primary" @click="getdetail"
              >保存随访详情</el-button
            >
          </div>
        </el-tab-pane>
      </el-tabs>
    </div>
    <el-dialog
      title="患者再次随访"
      v-dialogDrags
@@ -788,9 +882,11 @@
  listcontactinformation,
} from "@/api/patient/homepage";
import CallButton from "@/components/CallButton";
import MergeAndModify from "./MergeAndModify.vue";
export default {
  components: {
    CallButton,
    MergeAndModify,
  },
  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
@@ -827,6 +923,9 @@
      tableDatatop: [], //题目表
      voiceDatatop: [], //题目表
      dynamicTags: [],
      isMergeMode: false,
      mergeDialogVisible: false,
      selectedServices: [], // é€‰ä¸­çš„æœåŠ¡åˆ—è¡¨
      zcrules: {
        resource: [
          { required: true, message: "请选择随访方式", trigger: "change" },
@@ -1061,7 +1160,6 @@
      const queryParams = {
        pid: Number(this.patid),
        allhosp: "0",
        pageNum: 1,
      };
      // æ‚£è€…基础信息
      messagelistpatient(queryParams).then((response) => {
@@ -1184,6 +1282,7 @@
          scriptid: item.id,
          excep: excep,
          questiontext: item.scriptContent,
          answerps: item.answerps || null, // æ·»åŠ é™„åŠ ä¿¡æ¯
        };
        if (item.scriptType == 2 && item.scriptResult[0]) {
          obj.asrtext = item.scriptResult.join("&");
@@ -1230,7 +1329,7 @@
            })
            .catch(() => {
              if (this.form.serviceType == 13) {
                if (this.visitCount) {
                if (this.visitCount != 1) {
                  this.$router.push({
                    path: "/logisticsservice/zbAgain",
                  });
@@ -1240,7 +1339,7 @@
                  });
                }
              } else if (this.form.serviceType == 2) {
                if (this.visitCount) {
                if (this.visitCount != 1) {
                  this.$router.push({
                    path: "/logisticsservice/again",
                  });
@@ -1257,10 +1356,11 @@
          console.error("发生错误:", error);
        });
    },
    // ç”µè¯============================
    // éªŒè¯ç”µè¯å·ç æ ¼å¼å¹¶è¿”回错误信息
validatePhoneNumber(phone) {
  if (!phone) {
    return { isValid: false, message: '请输入电话号码' };
        return { isValid: false, message: "请输入电话号码" };
  }
  // æ‰‹æœºå·æ­£åˆ™
@@ -1273,22 +1373,21 @@
  const landlineLocalRegex = /^\d{7,8}$/;
  if (mobileRegex.test(phone)) {
    return { isValid: true, type: 'mobile' };
        return { isValid: true, type: "mobile" };
  } else if (landlineFullRegex.test(phone)) {
    return { isValid: true, type: 'landline' };
        return { isValid: true, type: "landline" };
  } else if (landlineLocalRegex.test(phone)) {
    return {
      isValid: false,
      message: '本地号码请添加区号(如028-1234567)'
          message: "本地号码请添加区号(如028-1234567)",
    };
  } else {
    return {
      isValid: false,
      message: '请输入正确的电话号码(手机号或带区号的固定电话)'
          message: "请输入正确的电话号码(手机号或带区号的固定电话)",
    };
  }
},
// ä½¿ç”¨ç¤ºä¾‹
isValidPhone(phone) {
  return this.validatePhoneNumber(phone).isValid;
@@ -1312,10 +1411,9 @@
        });
      });
    },
    // å¤„理通话状态变化
    handleCallStatusChange(status) {
      console.log(status,'status');
      console.log(status, "status");
      this.callStatus = status.type;
@@ -1334,7 +1432,6 @@
        this.$message.error(`呼叫失败: ${status.text}`);
      }
    },
    // ç»“束当前通话
    endCurrentCall() {
      if (!this.currentCall) return;
@@ -1540,7 +1637,7 @@
        })
        .catch(() => {});
    },
    handleOptionChange(a, b, c) {
    aahandleOptionChange(a, b, c) {
      const result = c.find((item) => item.optioncontent == a);
      if (result.nextQuestion == 0) {
        this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => {
@@ -1569,6 +1666,98 @@
      }
      this.$forceUpdate();
    },
    // åœ¨methods部分,修改handleOptionChange方法:
    handleOptionChange(selectedOption, questionIndex, options, a) {
      if (document.activeElement) {
        document.activeElement.blur();
      }
      // æ‰¾åˆ°è¢«é€‰ä¸­çš„选项对象
      const selectedOptionObj = options.find(
        (item) => item.optioncontent == selectedOption
      );
      // å¤„理异常状态高亮
      this.tableDatatop[questionIndex].isabnormal =
        !!selectedOptionObj.isabnormal;
      // å¤„理附加输入框显示
      this.tableDatatop[questionIndex].showAppendInput =
        selectedOptionObj.appendflag == 1;
      console.log(this.tableDatatop);
      // if (!this.tableDatatop[questionIndex].showAppendInput) {
      //   this.tableDatatop[questionIndex].answerps = ""; // æ¸…除附加信息
      // }
      // ä¿å­˜å½“前题目之前已经隐藏的题目状态
      const previouslyHiddenBeforeCurrent = this.tableDatatop
        .slice(0, questionIndex)
        .map((item, index) => (item.astrict ? index : -1))
        .filter((index) => index !== -1);
      // ä¿å­˜ä¹‹å‰å› nextQuestion=0而隐藏的题目范围
      const previouslyHiddenByEnd = this.tableDatatop
        .map((item, index) => (item.hiddenByEnd ? index : -1))
        .filter((index) => index !== -1);
      // å¦‚æžœbranchFlag为1,处理题目跳转
      if (a.branchFlag == 1) {
        if (selectedOptionObj.nextQuestion == 0) {
          // ç»“束问答 - éšè—åŽé¢æ‰€æœ‰é¢˜ç›®å¹¶æ ‡è®°
          this.tableDatatop = this.tableDatatop.map((item, index) => ({
            ...item,
            astrict: index > questionIndex,
            hiddenByEnd: index > questionIndex, // æ ‡è®°è¿™äº›é¢˜ç›®æ˜¯è¢«ç»“束问答隐藏的
          }));
        } else {
          // æ­£å¸¸è·³è½¬é€»è¾‘
          const nextQuestionIndex = selectedOptionObj.nextQuestion - 1;
          this.tableDatatop = this.tableDatatop.map((item, index) => {
            // ä¿ç•™å½“前题目之前的隐藏状态
            if (index < questionIndex) {
              return {
                ...item,
                astrict: previouslyHiddenBeforeCurrent.includes(index),
                hiddenByEnd: false, // æ¸…除结束标记
              };
            }
            // å½“前题目总是可见
            if (index === questionIndex) {
              return { ...item, astrict: 0, hiddenByEnd: false };
            }
            // æ˜¾ç¤ºç›®æ ‡ä¸‹ä¸€é¢˜
            if (index === nextQuestionIndex) {
              return { ...item, astrict: 0, hiddenByEnd: false };
            }
            // å¦‚果是之前被结束问答隐藏的题目,现在应该恢复显示
            if (item.hiddenByEnd) {
              return { ...item, astrict: 0, hiddenByEnd: false };
            }
            // éšè—å½“前题和目标题之间的题目
            if (index > questionIndex && index < nextQuestionIndex) {
              return { ...item, astrict: 1, hiddenByEnd: false };
            }
            // å…¶ä»–情况保持原状
            return item;
          });
        }
      } else {
        // å¦‚果没有跳转,只需确保下一题可见
        this.tableDatatop = this.tableDatatop.map((item, index) => ({
          ...item,
          astrict: index === questionIndex + 1 ? 0 : item.astrict,
          hiddenByEnd: index === questionIndex + 1 ? false : item.hiddenByEnd,
        }));
      }
      this.$forceUpdate();
    },
    overdata() {
      this.tableDatatop.forEach((item, index) => {
        var obj = item.svyLibTemplateTargetoptions.find(
@@ -1588,6 +1777,10 @@
    setupsubtask() {
      this.$refs["zcform"].validate((valid) => {
        if (valid) {
          if (this.form.date1 && new Date(this.form.date1) < new Date()) {
            this.$message.error("随访时间不能小于当前时间");
            return false;
          }
          this.form.remark =
            this.form.remark + "【" + this.getCurrentTime() + "】";
          let form = structuredClone(this.form);
@@ -1642,69 +1835,205 @@
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    },
    updateScore(a, b, c) {},
    // åˆå¹¶ä¿®æ”¹ç›¸å…³=============================
    toggleMergeMode() {
      this.isMergeMode = !this.isMergeMode;
      if (!this.isMergeMode) {
        this.selectedServices = [];
      }
    },
    handleSelectionChange(selection) {
      this.selectedServices = selection
        .filter(
          (item) => !item.preachformson || !item.preachformson.includes("3")
        )
        .map((item) => ({
          id: item.id,
          taskid: item.taskid,
          taskName: item.taskName,
          sendname: item.sendname,
        }));
    },
    checkSelectable(row, index) {
      // å½“ sendstate ä¸º 6 æ—¶ä¸å¯é€‰
      return row.sendstate !== 6;
    },
    openMergeDialog() {
      if (this.selectedServices.length < 2) {
        this.$message.warning("请至少选择2个问卷服务进行合并");
        return;
      }
      this.mergeDialogVisible = true;
    },
    handleMergeSave(mergedData) {
      // å¤„理合并保存逻辑
      this.mergeDialogVisible = false;
      this.isMergeMode = false;
      this.selectedServices = [];
      // æ˜¾ç¤ºä¿å­˜ç»“æžœ
      if (mergedData.successCount == mergedData.totalCount) {
        this.$message.success(`成功保存 ${mergedData.successCount} ä¸ªé—®å·`);
      } else if (mergedData.successCount > 0) {
        this.$message.warning(
          `成功保存 ${mergedData.successCount} ä¸ªé—®å·ï¼Œå¤±è´¥ ${
            mergedData.totalCount - mergedData.successCount
          } ä¸ª`
        );
      } else {
        this.$message.error("所有问卷保存失败");
      }
      // åˆ·æ–°æ•°æ®
      this.getTaskservelist();
    },
  },
};
</script>
<style lang="scss">
<style lang="scss" scoped>
.Followupdetailspage {
  margin: 10px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.action-container {
  display: flex;
  gap: 20px;
  margin: 0 10px 20px 10px;
  .manual-action {
    flex: 1;
    min-width: 0;
    height: 100%; /* ç¡®ä¿é«˜åº¦ç»§æ‰¿ */
  }
  .call-action {
    width: 60%;
    min-width: 0;
    height: 100%; /* ç¡®ä¿é«˜åº¦ç»§æ‰¿ */
  }
}
.call-container {
  padding: 20px;
  background: #fff;
  border: 1px solid #dcdfe6;
  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
  border-radius: 4px;
  height: 100%;
  .call-header {
    margin-bottom: 20px;
    h2 {
      font-size: 20px;
      color: #333;
      margin: 0;
      padding-bottom: 10px;
      border-bottom: 1px solid #eee;
    }
  }
  .call-status {
    margin-bottom: 20px;
  }
  .hangup-btn {
    text-align: center;
    margin-top: 20px;
  }
}
.merge-controls {
  background: #f5f7fa;
  border-radius: 4px;
  margin-left: 20px;
}
.Followuserinfo {
  margin: 20px 10px;
  margin: 10px 10px 0 10px;
  align-items: center;
  padding: 30px;
  background: #ffff;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
  .userinfo-text {
    font-size: 20px;
    margin-right: 20px;
    margin-bottom: 10px;
  }
  .userinfo-value {
    color: rgb(15, 139, 211);
    span {
      margin-right: 20px;
    }
  }
}
::v-deep.el-table .warning-row {
  background: #c4e2ee;
}
.Followuserinfos {
  margin: 20px 10px;
  align-items: center;
  padding: 30px;
  background: #ffff;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
  height: 100%; /* ç¡®ä¿é«˜åº¦ç»§æ‰¿ */
  min-height: 880px; /* æœ€å°é«˜åº¦ä¸Žéšè®¿å†…容一致 */
  display: flex;
  flex-direction: column;
  .userinfo-text {
    font-size: 20px;
    margin-right: 20px;
    margin-bottom: 10px;
  }
  .userinfo-value {
    color: rgb(15, 139, 211);
    span {
      margin-right: 20px;
    }
  }
  .el-form {
    flex: 1;
    overflow-y: auto; /* å†…容超过高度时显示滚动条 */
    max-height: calc(880px - 60px); /* å‡åŽ»padding */
    padding-right: 10px; /* é˜²æ­¢æ»šåŠ¨æ¡é®æŒ¡å†…å®¹ */
  }
}
.append-input-container {
  margin-top: 15px;
  padding: 10px;
  background-color: #f5f7fa;
  border-radius: 4px;
  border: 1px solid #dcdfe6;
}
.borderdiv {
  min-height: 60vh;
  font-size: 20px;
  padding: 30px;
  .title {
    font-size: 22px;
    font-weight: bold;
    margin-bottom: 20px;
    text-align: center;
  }
  .leftside {
    margin: 30px 0;
    span {
      width: 400px;
      margin-left: 20px;
@@ -1714,9 +2043,11 @@
      border-radius: 10px;
    }
  }
  .offside {
    display: flex;
    flex-direction: row-reverse;
    .offside-value {
      padding: 10px;
      background: rgb(217, 173, 253);
@@ -1726,8 +2057,15 @@
    }
  }
}
.topic-dev[inert] {
  opacity: 0.5;
  pointer-events: none;
}
.CONTENT {
  padding: 10px;
  height: 100%;
  min-height: 660px; /* è®¾ç½®æœ€å°é«˜åº¦ */
  .title {
    font-size: 22px;
    font-weight: bold;
@@ -1735,40 +2073,47 @@
    text-align: center;
  }
}
.preview-left {
  margin: 20px;
  //   margin: 20px;
  padding: 30px;
  // background: #ffff;
  border: 1px solid #dcdfe6;
  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
    0 0 6px 0 rgba(0, 0, 0, 0.04);
  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
  max-height: 580px; /* è®¾ç½®æœ€å¤§é«˜åº¦ */
  overflow-y: auto; /* å†…容超过高度时显示滚动条 */
  .topic-dev {
    margin-bottom: 25px;
    font-size: 20px !important;
    .dev-text {
      margin-bottom: 10px;
    }
  }
}
.scriptTopic-isabnormal {
  color: red;
}
.detailed {
  width: 88%;
  border-radius: 8px;
  padding: 30px;
  margin-bottom: 30px;
  background-color: #ddf0f8;
  .bg-purple {
    margin-bottom: 20px;
  }
  .spanvalue {
    display: inline-block;
    min-width: 200px;
    border-bottom: 1px solid rgb(172, 172, 172);
  }
}
.headline {
  font-size: 24px;
  height: 40px;
@@ -1776,79 +2121,94 @@
  padding-left: 5px;
  margin-bottom: 10px;
  display: flex;
  // justify-content: space-between;
  .Add-details {
    font-size: 18px;
    color: #02a7f0;
    cursor: pointer;
  }
}
.red-star {
  ::v-deep.el-radio__label {
    position: relative;
    padding-right: 10px; /* æ ¹æ®éœ€è¦è°ƒæ•´ */
    padding-right: 10px;
  }
  ::v-deep.el-radio__label::after {
    content: "*";
    color: red;
    position: absolute;
    right: -5px; /* æ ¹æ®éœ€è¦è°ƒæ•´ */
    right: -5px;
    top: 0;
  }
  ::v-deep.el-input-group__textarea {
    white-space: pre-wrap; /* ä¿æŒç©ºç™½ç¬¦åºåˆ—并正常换行 */
    word-break: break-all; /* åœ¨é•¿å•词或URL地址内部进行换行 */
    white-space: pre-wrap;
    word-break: break-all;
  }
  ::v-deep.el-checkbox__label {
    position: relative;
    padding-right: 10px; /* æ ¹æ®éœ€è¦è°ƒæ•´ */
    padding-right: 10px;
  }
  ::v-deep.el-checkbox__label::after {
    content: "*";
    color: red;
    position: absolute;
    right: -5px; /* æ ¹æ®éœ€è¦è°ƒæ•´ */
    right: -5px;
    top: 0;
  }
}
::v-deep.offside-value .el-radio__label {
  color: #fff;
}
::v-deep.el-link.el-link--default {
  color: #02a7f0 !important;
}
.el-message-box__btns button:nth-child(2) {
  margin-left: 10px;
  background-color: #f57676;
  border-color: #f57676;
}
.el-icon-phone {
  transition: all 0.3s;
}
.el-button[disabled] .el-icon-phone {
  color: #c0c4cc;
}
.el-button:not([disabled]) .el-icon-phone {
  color: #409eff;
}
.el-button:not([disabled]):hover .el-icon-phone {
  color: #66b1ff;
  transform: scale(1.1);
}
.mulsz {
  font-size: 25px;
  margin-top: 20px;
}
.el-input.is-disabled .el-input__inner {
  background-color: #fff; /* èƒŒæ™¯é¢œè‰² */
  border-color: #dcdfe6; /* è¾¹æ¡†é¢œè‰² */
  color: #080808 !important; /* æ–‡å­—颜色 */
  cursor: not-allowed; /* é¼ æ ‡æ ·å¼ */
  background-color: #fff;
  border-color: #dcdfe6;
  color: #080808 !important;
  cursor: not-allowed;
}
.el-textarea.is-disabled .el-textarea__inner {
  background-color: #fff; /* èƒŒæ™¯é¢œè‰² */
  border-color: #dcdfe6; /* è¾¹æ¡†é¢œè‰² */
  color: #080808 !important; /* æ–‡å­—颜色 */
  cursor: not-allowed; /* é¼ æ ‡æ ·å¼ */
  background-color: #fff;
  border-color: #dcdfe6;
  color: #080808 !important;
  cursor: not-allowed;
}
</style>
src/views/followvisit/record/physical/index.vue
@@ -711,7 +711,6 @@
      const queryParams = {
        pid: Number(this.patid),
        allhosp: "0",
        pageNum: 1,
      };
      // æ‚£è€…基础信息
      messagelistpatient(queryParams).then((response) => {
src/views/followvisit/tasklist/index.vue
@@ -732,6 +732,7 @@
            label: "问卷随访",
          },
        ];
        this.topqueryParams.type=2;
      } else if (this.tasktopic == 4 || this.tasktopic == 8) {
        if (!this.topqueryParams.type) this.topqueryParams.type = "3";
        this.longtermlist = [
@@ -740,6 +741,7 @@
            label: "宣教关怀",
          },
        ];
        this.topqueryParams.type=3;
      } else if (this.tasktopic == 5) {
        if (!this.topqueryParams.type) this.topqueryParams.type = "1";
        this.longtermlist = [
@@ -753,10 +755,6 @@
          },
        ];
      }
      // this.topqueryParams.typename = this.findLabelByValue(
      //   this.taskoptions,
      //   this.tasktopic
      // );
      this.topqueryParams.beginTime = this.dateRange[0];
      this.topqueryParams.endTime = this.dateRange[1];
      getTasklist(this.topqueryParams).then((response) => {
src/views/followvisit/zbAgain/index.vue
@@ -1187,8 +1187,8 @@
      });
    },
    affiliation() {
      this.topqueryParams.drcode = store.getters.hisUserId;
      this.topqueryParams.nurseId = store.getters.hisUserId;
      this.topqueryParams.managementDoctorCode= store.getters.hisUserId;
      this.getList(1);
    },
    onthatday() {
src/views/index.vue
@@ -20,7 +20,7 @@
            <el-row :gutter="20">
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p>{{ OutpatientData.rs }}</p>
                  <p>{{ OutpatientData.rc }}</p>
                  <div class="text-color2">
                    <p>门诊就诊量(人次)</p>
                  </div>
@@ -28,7 +28,7 @@
              </el-col>
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p>{{ OutpatientData.rc }}</p>
                  <p>{{ OutpatientData.rs }}</p>
                  <div class="text-color2">
                    <p>门诊服务量(人次)</p>
                  </div>
@@ -62,7 +62,7 @@
            <el-row :gutter="20">
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p style="color: red">{{ DischargeData.rs }}</p>
                  <p style="color: red">{{ DischargeData.rc }}</p>
                </div>
                <div class="text-color2">
                  <p>出院就诊量(人次)</p>
@@ -70,7 +70,7 @@
              </el-col>
              <el-col :span="10">
                <div class="home-user-task-stats">
                  <p style="color: red">{{ DischargeData.rc }}</p>
                  <p style="color: red">{{ DischargeData.rs }}</p>
                  <div class="text-color2">
                    <p>出院服务量(人次)</p>
                  </div>
@@ -94,15 +94,30 @@
                style="margin-left: 390px"
                @change="changes"
              >
                <el-radio-button label="周" @click="dyat = 7"></el-radio-button>
                <el-radio-button
                  label="月"
                  @click="dyat = 30"
                  label="近一周"
                  @click="dyat = 7"
                ></el-radio-button>
                <el-radio-button
                  label="å¹´"
                  @click="dyat = 360"
                  label="近一月"
                  @click="dyat = 31"
                ></el-radio-button>
                <el-radio-button
                  label="近一年"
                  @click="dyat = 365"
                ></el-radio-button>
                <el-radio-button label="自定义">
                  <el-date-picker
                    v-if="radio1 === '自定义'"
                    v-model="customDateRange"
                    type="daterange"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期"
                    value-format="yyyy-MM-dd"
                    @change="handleCustomDateChange"
                  ></el-date-picker>
                </el-radio-button>
              </el-radio-group>
            </div>
            <!-- ä¸­éƒ¨çº¿æ€§æŸ±çж图 -->
@@ -113,13 +128,18 @@
        </el-col>
        <!-- å³è¾¹åˆ—表 -->
        <el-col :span="4" class="aside">
          <div class="grid-content bg-purple" style="margin-top: -180px">
          <div class="grid-contentsa bg-purple" style="margin-top: -180px">
            <div class="title">
              ç§‘室服务量
              <span>{{ endatd }} ~ {{ statd }}</span>
            </div>
            <div style="max-height: 690px; width: 100%; overflow: auto">
              <el-table style="width: 100%" :data="SkuTop">
            <div class="dept-table-container">
              <el-table
                v-if="SkuTop.length > 0"
                style="width: 100%"
                :data="SkuTop"
                :height="tableHeight"
              >
                <template v-for="(item, index) in SkuTop"></template>
                <el-table-column
                  prop="order"
@@ -129,7 +149,7 @@
                ></el-table-column>
                <el-table-column
                  prop="deptname"
                  width="88"
                  width="120"
                  class-name="name"
                ></el-table-column>
@@ -137,24 +157,26 @@
                  <template slot-scope="scope"> {{ scope.row.rc }}次 </template>
                </el-table-column>
              </el-table>
              <div v-else class="empty-tip">
                <el-empty description="暂无科室服务数据"></el-empty>
              </div>
            </div>
          </div>
        </el-col>
      </el-row>
      <!-- åº•部一个 -->
      <el-row :gutter="20" style="margin-bottom: 20px">
        <el-col :span="24">
        <!-- <el-col :span="24">
          <div class="grid-content bg-purple" style="min-height: 300px">
            <div class="title">
              å®£æ•™ç»Ÿè®¡
              <span class="el-icon-s-unfold moreIcon"></span>
            </div>
            <div class="cooperate">
              <!-- åˆä½œåŒºåŸŸ -->
              <div class="pieChart" id="pieCharts"></div>
            </div>
          </div>
        </el-col>
        </el-col> -->
        <!-- <el-col :span="9">
          <div class="grid-content bg-purple" style="min-height: 300px">
            <div class="title">
@@ -306,7 +328,7 @@
      mypPieCharts: null,
      lastWidth: window.innerWidth,
      lastHeight: window.innerHeight,
      radio1: "月",
      radio1: "近一年",
      ticketStatistics: {},
      timeTypeMap: {
        å‘¨: "day",
@@ -330,7 +352,8 @@
      SkuTop: [],
      cylinderSeries: [],
      cylinderXAxis: [],
      dyat: 30,
      customDateRange: [], // è‡ªå®šä¹‰æ—¥æœŸèŒƒå›´
      dyat: 365,
      intervalId: null,
    };
  },
@@ -344,16 +367,32 @@
      return dayjs().subtract(this.dyat, "day").format("YYYY-MM-DD HH:mm:ss");
    },
    statd() {
      if (this.radio1 === "自定义" && this.customDateRange.length > 0) {
        return this.customDateRange[1];
      }
      return dayjs().format("YYYY-MM-DD");
    },
    endatd() {
      if (this.radio1 === "自定义" && this.customDateRange.length > 0) {
        return this.customDateRange[0];
      }
      return dayjs().subtract(this.dyat, "day").format("YYYY-MM-DD");
    },
    tableHeight() {
      // æ ¹æ®æ•°æ®é‡åŠ¨æ€è®¡ç®—é«˜åº¦
      const rowHeight = 40; // æ¯è¡Œå¤§çº¦é«˜åº¦
      const headerHeight = 40; // è¡¨å¤´é«˜åº¦
      const minHeight = 500; // æœ€å°é«˜åº¦
      const maxHeight = 600; // æœ€å¤§é«˜åº¦
      const calculatedHeight = this.SkuTop.length * rowHeight + headerHeight;
      return Math.min(Math.max(calculatedHeight, minHeight), maxHeight);
    },
  },
  created() {
    this.getTopdata();
    this.getgraphdata();
    this.getranking();
    // this.getranking();
    this.$nextTick(function () {
      this.myEcharts2();
      this.getnodeCollect();
@@ -372,15 +411,35 @@
  methods: {
    // æ”¹å˜æ—¶é—´äº‹ä»¶
    changes() {
      if (this.radio1 == "周") {
      switch (this.radio1) {
        case "近一周":
        this.dyat = 7;
      } else if (this.radio1 == "月") {
          break;
        case "近一月":
        this.dyat = 30;
      } else {
        this.dyat = 360;
          break;
        case "近一年":
          this.dyat = 365;
          break;
        case "自定义":
          // è‡ªå®šä¹‰æ—¥æœŸå¤„理在handleCustomDateChange方法中
          return;
      }
      this.refreshData();
    },
    // å¤„理自定义日期变化
    handleCustomDateChange(range) {
      if (!range || range.length !== 2) return;
      this.customDateRange = range;
      this.refreshData();
    },
    // ç»Ÿä¸€åˆ·æ–°æ•°æ®çš„æ–¹æ³•
    refreshData() {
      this.getgraphdata();
      this.getranking();
      // this.getranking();
      this.getTopdata();
      this.myEcharts2();
      this.getnodeCollect();
@@ -461,12 +520,7 @@
      let params = {
        startDate: this.endatd,
        endDate: this.statd,
        timeType:
          this.radio1 === "周"
            ? "day"
            : this.radio1 === "月"
            ? "month"
            : "year",
        timeType: this.getTimeType(),
      };
      try {
@@ -477,6 +531,28 @@
      } catch (error) {
        console.error("获取图表数据失败:", error);
      }
    },
    // èŽ·å–æ—¶é—´ç±»åž‹
    getTimeType() {
      if (this.radio1 === "近一周" || this.radio1 === "近一月") {
        return "day";
      }
      if (this.radio1 === "近一年") {
        return "month";
      }
      // è‡ªå®šä¹‰æ—¥æœŸèŒƒå›´
      if (this.radio1 === "自定义" && this.customDateRange.length === 2) {
        const start = dayjs(this.customDateRange[0]);
        const end = dayjs(this.customDateRange[1]);
        const diffDays = end.diff(start, "day");
        return diffDays > 60 ? "month" : "day";
      }
      return "day"; // é»˜è®¤è¿”回day类型
    },
    processChartData(data) {
      // æŒ‰æ—¶é—´æŽ’序确保数据顺序正确
@@ -492,14 +568,11 @@
      sortedData.forEach((item) => {
        // æ ¹æ®æ—¶é—´ç±»åž‹æ ¼å¼åŒ–显示
        let timeLabel = item.timePeriod;
        if (this.radio1 === "周") {
          timeLabel = dayjs(item.timePeriod).format("MM-DD");
        } else if (this.radio1 === "月") {
          timeLabel = item.timePeriod.split("-")[1] + "月";
        } else {
          timeLabel = item.timePeriod.split("-")[0] + "å¹´";
        }
        const timeType = this.getTimeType();
        const timeLabel =
          timeType === "day"
            ? dayjs(item.timePeriod).format("MM-DD")
            : dayjs(item.timePeriod).format("YYYY-MM");
        xAxisData.push(timeLabel);
        dischargeFollowData.push(item.dischargeFollowCount);
@@ -623,7 +696,7 @@
          },
        },
        legend: {
          data: ["出院随访量", "门诊随访量", "出院服务人次", "门诊服务人次"],
          data: ["出院服务量", "门诊服务量", "出院就诊人次", "门诊就诊人次"],
        },
        xAxis: [
          {
@@ -655,7 +728,7 @@
        grid: { top: "35%" },
        series: [
          {
            name: "出院随访量",
            name: "出院服务量",
            type: "bar",
            tooltip: {
              valueFormatter: function (value) {
@@ -665,7 +738,7 @@
            data: [], // åˆå§‹ä¸ºç©ºï¼Œå°†é€šè¿‡API数据填充
          },
          {
            name: "门诊随访量",
            name: "门诊服务量",
            type: "bar",
            tooltip: {
              valueFormatter: function (value) {
@@ -675,7 +748,7 @@
            data: [], // åˆå§‹ä¸ºç©ºï¼Œå°†é€šè¿‡API数据填充
          },
          {
            name: "出院服务人次",
            name: "出院就诊人次",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
@@ -687,7 +760,7 @@
            data: [], // åˆå§‹ä¸ºç©ºï¼Œå°†é€šè¿‡API数据填充
          },
          {
            name: "门诊服务人次",
            name: "门诊就诊人次",
            type: "line",
            smooth: 0.3,
            yAxisIndex: 1,
@@ -836,6 +909,12 @@
  .echars1 {
    flex: 1;
  }
}
.dept-table-container {
  flex: 1;
  display: flex;
  flex-direction: column;
  min-height: 0; /* é‡è¦ï¼šå…è®¸å†…容收缩 */
}
::v-deep .el-table {
  td:first-child {
@@ -1094,6 +1173,12 @@
  padding: 0 10px;
  text-align: center;
}
.grid-contentsa {
  min-height: 600px;
  border-radius: 20px;
  padding: 0 10px;
  text-align: center;
}
.grid-contents {
  min-height: 36px;
src/views/knowledge/education/index.vue
@@ -88,7 +88,6 @@
                >
                  <el-option
                    v-for="item in courtyardlist"
                    :key="item.label"
                    :label="item.label"
                    :value="item.label"
                  >
@@ -112,7 +111,6 @@
                >
                  <el-option
                    v-for="(item, index) in qyoptions"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
src/views/knowledge/questionnaire/compilequer/index.vue
@@ -262,7 +262,7 @@
                  <el-option
                    class="ruleFormaa"
                    v-for="item in flatArray"
                    :key="item.deptCode"
                    :key="item.id"
                    :label="item.label"
                    :value="item.deptCode"
                  >
@@ -285,7 +285,7 @@
                  <el-option
                    class="ruleFormaa"
                    v-for="item in flatArray"
                    :key="item.deptCode"
                    :key="item.id"
                    :label="item.label"
                    :value="item.deptCode"
                  >
@@ -566,10 +566,10 @@
                    </el-form-item></el-col
                  >
                  <el-col :span="12"
                    ><el-form-item label="是否可用">
                      <el-radio-group v-model="topicobj.isenable">
                    ><el-form-item label="是否隐藏">
                      <el-radio-group v-model="topicobj.ishide">
                        <el-radio
                          v-for="(item, index) in usable"
                          v-for="(item, index) in hides"
                          :label="item.value"
                          >{{ item.label }}</el-radio
                        >
@@ -582,8 +582,8 @@
                  v-if="topicobj.scriptType == 1"
                >
                  <el-radio-group v-model="topicobj.branchFlag">
                    <el-radio :label="1">是</el-radio>
                    <el-radio :label="0">否</el-radio>
                    <el-radio label="1">是</el-radio>
                    <el-radio label="0">否</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-form-item label="选中提示" v-if="topicobj.scriptType != 1">
@@ -656,6 +656,12 @@
                        <el-radio-group v-model="item.isabnormal">
                          <el-radio :label="1">是</el-radio>
                          <el-radio :label="0">否</el-radio>
                        </el-radio-group>
                      </el-form-item>
                      <el-form-item label="是否选中收集附加信息">
                        <el-radio-group v-model="item.appendflag">
                          <el-radio label="1">是</el-radio>
                          <el-radio label="0">否</el-radio>
                        </el-radio-group>
                      </el-form-item>
                    </el-row>
@@ -749,9 +755,7 @@
        >
        <el-button type="primary" @click="laststep()">上一步</el-button>
        <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button>
        <el-button @click="toExamine('ruleForm')"
          >保存问题数据</el-button
        >
        <el-button @click="toExamine('ruleForm')">保存问题数据</el-button>
      </div>
      <!-- é—®å·é¢„览 -->
      <div v-if="Editprogress == 3">
@@ -1299,6 +1303,7 @@
        svyTemplateLibScripts: [],
        tempDetpRelevances: [],
        svyLibTemplateTagList: [],
        suitway: [],
        scoreType: "4",
        isenable: "0",
        longTemp: "0",
@@ -1404,6 +1409,10 @@
      usable: [
        { value: "0", label: "可用" },
        { value: "1", label: "停用" },
      ],
      hides: [
        { value: 0, label: "正常" },
        { value: 1, label: "隐藏" },
      ],
      longtype: [
        { value: "0", label: "普通任务" },
@@ -1622,8 +1631,8 @@
          this.confirmillness();
          this.putbelongDepts();
          this.$modal.closeLoading();
          // this.$router.go(-1);
          window.location.reload();
          this.$router.go(-1);
          // window.location.reload();
        });
      } else {
        this.ruleForm.isoperation = 1;
src/views/login.vue
@@ -119,6 +119,7 @@
        { value: "47231022633110211A2101", label: "丽水市中医院" },
        { value: "47246102433112211A2101", label: "缙云县中医医院 " },
        { value: "47240018433118111A2101", label: "龙泉市中医医院 " },
        { value: "47240004533118111A1001", label: "龙泉市人民医院 " },
        { value: "47243006833112611A2101", label: "庆元县中医医院 " },
        { value: "47234002X33112111A2101", label: "青田县中医医院 " },
       ],
src/views/patient/patient/outpatient.vue
@@ -152,6 +152,18 @@
              >删除</el-button
            >
          </el-col>
          <el-col :span="1.5">
            <el-button
              type="warning"
              plain
              icon="el-icon-plus"
              size="medium"
              :disabled="multiple"
              @click="handleBatchAddTask"
            >
              æ‰¹é‡æ·»åŠ ä»»åŠ¡</el-button
            >
          </el-col>
          <el-col :span="19">
            <div class="documentf">
              <div class="document">
@@ -228,7 +240,13 @@
              <el-button
                size="medium"
                type="text"
                @click="gettoken360(scope.row.idcardno,scope.row.drcode,scope.row.drname)"
                @click="
                  gettoken360(
                    scope.row.idcardno,
                    scope.row.drcode,
                    scope.row.drname
                  )
                "
                ><span class="button-textsc">{{
                  scope.row.patname
                }}</span></el-button
@@ -301,7 +319,23 @@
            prop="drname"
            width="120"
          />
          <el-table-column
            label="是否存在任务"
            align="center"
            key="serverState"
            prop="serverState"
            width="100"
          >
            <template slot-scope="scope">
              <span
                :style="{
                  color: scope.row.serverState == 1 ? 'green' : 'gray',
                }"
              >
                {{ scope.row.serverState == 1 ? "是" : "无" }}
              </span>
            </template>
          </el-table-column>
          <el-table-column
            label="操作"
            fixed="right"
@@ -337,7 +371,113 @@
        />
      </el-col>
    </el-row>
    <el-dialog
      title="批量添加任务"
      :visible.sync="batchTaskVisible"
      width="90%"
      append-to-body
    >
      <el-row :gutter="20">
        <!-- å·¦ä¾§ï¼šé€‰ä¸­æ‚£è€…列表 -->
        <el-col :span="12">
          <div class="batch-patient-section">
            <h4>选中患者({{ selectedPatients.length }}人)</h4>
            <el-table
              :data="selectedPatients"
              border
              style="width: 100%"
              size="small"
            >
              <el-table-column prop="patname" label="姓名" width="100" />
              <el-table-column prop="sex" label="性别" width="80">
                <template slot-scope="scope">
                  {{ scope.row.sex === 1 ? "男" : "女" }}
                </template>
              </el-table-column>
              <el-table-column
                label="就诊时间"
                align="center"
                key="admitdate"
                prop="admitdate"
              >
                <template slot-scope="scope">
                  <span>{{ formatTime(scope.row.admitdate) }}</span>
                </template>
              </el-table-column>
              <el-table-column prop="outhospno" label="病案号" />
              <el-table-column prop="deptname" label="科室" />
            </el-table>
          </div>
        </el-col>
        <!-- å³ä¾§ï¼šä»»åŠ¡åˆ—è¡¨ -->
        <el-col :span="12">
          <div class="batch-task-section">
            <h4>任务列表(请选择1个任务)</h4>
            <el-table
              :data="taskList"
              border
              style="width: 100%"
              size="small"
              @current-change="handleTaskSelectionChange"
              highlight-current-row
            >
              <el-table-column
                label="任务名称"
                fixed
                align="center"
                key="taskName"
                prop="taskName"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="服务项目"
                align="center"
                key="templatename"
                prop="templatename"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="创建人"
                align="center"
                key="createBy"
                prop="createBy"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="创建时间"
                sortable
                align="center"
                prop="createTime"
              >
                <template slot-scope="scope">
                  <span>{{ formatTime(scope.row.createTime) }}</span>
                </template>
              </el-table-column>
              <template #empty>
                <div class="empty-message">
                  <i class="el-icon-warning"></i>
                  <span>患者科室无匹配服务</span>
                </div>
              </template>
            </el-table>
          </div>
        </el-col>
      </el-row>
      <!-- åº•部按钮 -->
      <div slot="footer" class="dialog-footer">
        <el-button @click="batchTaskVisible = false">取 æ¶ˆ</el-button>
        <el-button
          type="primary"
          :loading="batchLoading"
          @click="submitBatchTask"
          >创建任务</el-button
        >
      </div>
    </el-dialog>
    <!-- ç”¨æˆ·å¯¼å…¥å¯¹è¯æ¡† -->
    <el-dialog
      :title="upload.title"
@@ -383,6 +523,7 @@
          </div>
        </el-upload>
      </div>
      <!-- å¯¼å…¥æ£€æŸ¥ -->
      <div class="uploading" v-else-if="dractive == 2">
        <el-table :data="uploadingData" style="width: 100%">
@@ -446,7 +587,7 @@
import { getToken } from "@/utils/auth";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { query360PatInfo } from "@/api/AiCentre/index";
import { query360PatInfo, getTasklist, addSubtask } from "@/api/AiCentre/index";
import store from "@/store";
@@ -509,6 +650,12 @@
      Labelchange: false, //修改新增弹窗
      propss: { multiple: true },
      optionstag: [], //标签列表
      batchTaskVisible: false, // å¼¹çª—可见性
      selectedPatients: [], // é€‰ä¸­çš„æ‚£è€…列表
      taskList: [], // ä»»åŠ¡åˆ—è¡¨
      selectedTask: null, // é€‰ä¸­çš„任务列表
      batchLoading: false, // æ‰¹é‡æäº¤åŠ è½½çŠ¶æ€
      deptcode: "",
      Patientrange: [
        {
          name: "全部",
@@ -681,8 +828,8 @@
        this.queryParams.beginTime = this.dateRange[0];
        this.queryParams.endTime = this.dateRange[1];
      }else{
        this.queryParams.beginTime = '';
        this.queryParams.endTime = '';
        this.queryParams.beginTime = "";
        this.queryParams.endTime = "";
      }
      listPatouthosp(this.queryParams).then((response) => {
        this.userList = response.rows;
@@ -735,9 +882,9 @@
    //患者360跳转
    gettoken360(sfzh,drcode,drname) {
      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
      if (this.postData.XiaoXiTou.ZuHuMC=='丽水市中医院') {
        this.postData.YeWuXX.YongHuXX.YongHuID = '1400398571877961728';
        this.postData.YeWuXX.YongHuXX.YongHuXM = 'LSZYY';
      if (this.postData.XiaoXiTou.ZuHuMC == "丽水市中医院") {
        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
      }
      query360PatInfo(this.postData).then((res) => {
@@ -913,6 +1060,125 @@
      this.upload.open = false;
      this.dractive = 1;
    },
    /** æ‰¹é‡æ·»åŠ ä»»åŠ¡æŒ‰é’®ç‚¹å‡» */
    handleBatchAddTask() {
      // æ ¡éªŒæ˜¯å¦é€‰ä¸­æ‚£è€…
      if (this.ids.length === 0) {
        this.$modal.msgWarning("请至少选中1名患者");
        return;
      }
      // æ£€æŸ¥é€‰ä¸­çš„æ‚£è€…中是否有已有任务的
      const hasTaskPatients = this.userList.filter(
        (item) => this.ids.includes(item.patid) && item.serverState == 1
      );
      if (hasTaskPatients.length > 0) {
        const patientNames = hasTaskPatients.map((p) => p.patname).join("、");
        this.$modal.msgError(
          `选中的患者 ${patientNames} å·²æœ‰ä»»åŠ¡ï¼Œæ— æ³•é‡å¤æ·»åŠ `
        );
        return;
      }
      // èŽ·å–é€‰ä¸­æ‚£è€…çš„ç§‘å®¤ä¿¡æ¯ï¼ˆç”¨äºŽæ ¡éªŒåŒä¸€ç§‘å®¤ï¼‰
      const patientDepts = new Set();
      let deptcode = "";
      this.ids.forEach((patId) => {
        const patient = this.userList.find((item) => item.patid === patId);
        if (patient) {
          patientDepts.add(patient.deptname);
          deptcode = patient.deptcode;
        }
      });
      // æ ¡éªŒæ˜¯å¦åŒä¸€ç§‘室
      if (patientDepts.size > 1) {
        this.$modal.msgError("选中的患者不属于同一科室,无法批量添加任务");
        return;
      }
      // èŽ·å–é€‰ä¸­æ‚£è€…åˆ—è¡¨
      this.selectedPatients = this.userList.filter((item) =>
        this.ids.includes(item.patid)
      );
      // æ˜¾ç¤ºå¼¹çª—
      this.batchTaskVisible = true;
      // èŽ·å–ä»»åŠ¡åˆ—è¡¨
      this.loadTaskList(deptcode);
    },
    /** åŠ è½½ä»»åŠ¡åˆ—è¡¨ */
    loadTaskList(deptcode) {
      this.batchLoading = true;
      let topqueryParams = {
        pageNum: 1,
        pageSize: 10,
        serviceType: 3,
        type: 2,
        deptcode: deptcode,
      };
      getTasklist(topqueryParams).then((response) => {
        this.taskList = response.rows;
        this.batchLoading = false;
      });
    },
    /** å¤„理任务选择变化 */
    handleTaskSelectionChange(currentRow) {
      this.selectedTask = currentRow;
    },
    // é‡å†™æ‰¹é‡æäº¤æ–¹æ³•
    async submitBatchTask() {
      // æ ¡éªŒæ˜¯å¦é€‰ä¸­ä»»åŠ¡
      if (!this.selectedTask) {
        this.$modal.msgWarning("请选择1个任务");
        return;
      }
      this.batchLoading = true;
      const successPatients = [];
      const failedPatients = [];
      try {
        // éåŽ†é€‰ä¸­çš„æ‚£è€…ï¼Œé€ä¸ªè°ƒç”¨æŽ¥å£
        for (const patient of this.selectedPatients) {
          const params = {
            taskid: this.selectedTask.taskid,
            taskName: this.selectedTask.taskName,
            serviceType: this.selectedTask.serviceType,
            sendstate:2,
            ...patient,
            age: "",
          };
          try {
            await addSubtask(params);
            successPatients.push(patient.patname);
          } catch (error) {
            failedPatients.push(patient.patname);
          }
        }
        // æ˜¾ç¤ºå¤„理结果
        let message = `成功为 ${successPatients.length} åæ‚£è€…添加任务`;
        if (failedPatients.length > 0) {
          message += `,${failedPatients.length} åæ‚£è€…添加失败`;
        }
        this.$modal.msgSuccess(message);
        this.batchTaskVisible = false;
        this.getList(); // åˆ·æ–°æ‚£è€…列表
      } catch (error) {
        this.$modal.msgError("批量添加任务过程中出错");
      } finally {
        this.batchLoading = false;
      }
    },
    /** æ‰¹é‡æ·»åŠ æ‚£è€…ä»»åŠ¡æŽ¥å£ */
    batchAddPatientTask(params) {},
  },
};
</script>
@@ -963,4 +1229,41 @@
.button-textsc {
  color: #28cfe6;
}
.batch-patient-section,
.batch-task-section {
  padding: 15px;
  border: 1px solid #ebeef5;
  border-radius: 4px;
  margin-bottom: 15px;
}
.el-table--enable-row-hover .el-table__body tr:hover > td {
  background-color: #f5f7fa;
}
.el-table__body tr.current-row > td {
  background-color: #e6f7ff;
}
/* ç¦ç”¨çŠ¶æ€ä¸‹æŒ‰é’®æ ·å¼ */
.el-button.is-disabled {
  cursor: not-allowed;
}
.batch-patient-section h4,
.batch-task-section h4 {
  margin-top: 0;
  margin-bottom: 15px;
  color: #303133;
  font-size: 16px;
}
/* è¡¨æ ¼æ ·å¼ä¼˜åŒ– */
.el-table {
  margin-bottom: 10px;
}
/* å¼¹çª—底部按钮间距 */
.dialog-footer {
  text-align: right;
  padding: 10px 20px 20px;
}
</style>
src/views/patient/propaganda/QuestionnaireTask.vue
@@ -84,6 +84,7 @@
                  <el-radio-group v-model="form.longTask">
                    <el-radio :label="0">自定义周期</el-radio>
                    <el-radio :label="1">长期任务</el-radio>
                    <el-radio :label="2">固定任务</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-row :gutter="20" v-if="form.longTask">
src/views/sfstatistics/percentage/index.vue
@@ -1,37 +1,6 @@
<template>
  <div class="Questionnairemanagement">
    <!-- å·¦ä¾§æ  -->
    <!-- <div class="sidecolumn">
      <div class="sidecolumn-top">
        <div class="top-wj">患者范围</div>
      </div>
      <div class="bottom-fl">
        <el-tabs
          tab-position="right"
          v-model="activeName"
          @tab-click="handleClick"
        >
          <el-tab-pane label="全部" name="first"></el-tab-pane>
          <el-tab-pane label="住院" name="bhospitalized"></el-tab-pane>
          <el-tab-pane label="在院" name="Inhospital"></el-tab-pane>
          <el-tab-pane label="门诊" name="outpatient"></el-tab-pane>
          <el-tab-pane label="体检" name="physical"></el-tab-pane>
        </el-tabs>
      </div>
    </div> -->
    <!-- å³ä¾§æ•°æ® -->
    <div class="leftvlue">
      <!-- <div class="leftvlue-top">
        <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
          <el-tab-pane name="Local">
            <span class="mulsz" slot="label">按出院病区统计 </span>
          </el-tab-pane>
          <el-tab-pane name="sharing">
            <span class="mulsz" slot="label">按出院科室统计 </span>
          </el-tab-pane>
        </el-tabs>
      </div> -->
      <div class="leftvlue-bg">
        <el-row :gutter="20">
          <!--标签数据-->
@@ -44,17 +13,6 @@
              v-show="showSearch"
              label-width="98px"
            >
              <!-- <el-form-item label="医院" prop="userName">
                <el-select v-model="queryParams.value1" placeholder="请选择">
                  <el-option
                    v-for="item in options"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item> -->
              <el-form-item label="统计类型" prop="userName">
                <el-select
                  v-model="queryParams.statisticaltype"
@@ -160,49 +118,231 @@
                  v-hasPermi="['system:user:add']"
                  >新增</el-button
                >
              </el-col>
              <el-col :span="1.5">
                <el-button
                  type="danger"
                  type="primary"
                  plain
                  icon="el-icon-delete"
                  icon="el-icon-data-line"
                  size="medium"
                  :disabled="multiple"
                  @click="handleDelete"
                  v-hasPermi="['system:user:remove']"
                  >删除</el-button
                  @click="showChartDialog"
                  >统计趋势图</el-button
                >
              </el-col>
              <el-col :span="1.5">
                <div class="documentf">
                  <div class="document">
                    <el-button
                      type="warning"
                      plain
                      icon="el-icon-download"
                      size="medium"
                      @click="handleExport"
                      v-hasPermi="['system:user:export']"
                      >导出</el-button
                    >
                  </div>
                </div>
              </el-col>
              <!-- <el-col :span="1.5"> </el-col> -->
            </el-row>
            <!-- <right-toolbar
          :showSearch.sync="showSearch"
          @queryTable="getList"
          :columns="columns"
        ></right-toolbar> -->
            <el-table
              v-loading="loading"
              :data="userList"
              :border="true"
              @selection-change="handleSelectionChange"
              @row-click="handleRowClick"
              @expand-change="handleRowClick"
              :row-key="getRowKey"
              :expand-row-keys="expands"
            >
              <!-- å±•开行箭头列 -->
              <el-table-column type="expand">
                <template slot-scope="props">
                  <el-table
                    :data="props.row.doctorStats"
                    border
                    style="width: 95%; margin: 0 auto"
                    class="inner-table"
                  >
                    <el-table-column
                      label="医生姓名"
                      prop="drname"
                      align="center"
                    />
                    <el-table-column
                      label="科室"
                      width="120"
                      prop="deptname"
                      align="center"
                    />
                    <el-table-column
                      label="出院人次"
                      prop="dischargeCount"
                      align="center"
                    />
                    <el-table-column
                      label="出院人次"
                      align="center"
                      key="dischargeCount"
                      prop="dischargeCount"
                    >
                    </el-table-column>
                    <el-table-column
                      label="无需随访人次"
                      align="center"
                      width="100"
                      key="nonFollowUp"
                      prop="nonFollowUp"
                    >
                    </el-table-column>
                    <el-table-column
                      label="应随访人次"
                      align="center"
                      width="100"
                      key="followUpNeeded"
                      prop="followUpNeeded"
                    >
                    </el-table-column>
                    <el-table-column align="center" label="首次出院随访">
                      <el-table-column
                        label="应随访"
                        align="center"
                        key="needFollowUp"
                        prop="needFollowUp"
                      >
                      </el-table-column>
                      <el-table-column
                        label="待随访"
                        align="center"
                        key="pendingFollowUp"
                        prop="pendingFollowUp"
                      >
                      </el-table-column>
                      <el-table-column
                        label="随访成功"
                        align="center"
                        key="followUpSuccess"
                        prop="followUpSuccess"
                      >
                      </el-table-column>
                      <el-table-column
                        label="随访失败"
                        align="center"
                        key="followUpFail"
                        prop="followUpFail"
                      >
                      </el-table-column>
                      <el-table-column
                        label="随访率"
                        align="center"
                        width="120"
                        key="followUpRate"
                        prop="followUpRate"
                      >
                        <!-- <template slot-scope="scope">
                    <span
                      >{{
                        (Number(scope.row.followUpRate) * 100).toFixed(2)
                      }}%</span
                    >
                  </template> -->
                      </el-table-column>
                      <el-table-column
                        label="及时率"
                        align="center"
                        width="120"
                        key="rate"
                        prop="rate"
                      >
                        <template slot-scope="scope">
                          <el-button
                            size="medium"
                            type="text"
                            @click="Seedetails(scope.row)"
                            ><span class="button-zx"
                              >{{
                                (Number(scope.row.rate) * 100).toFixed(2)
                              }}%</span
                            ></el-button
                          >
                        </template>
                      </el-table-column>
                      <el-table-column
                        label="人工"
                        align="center"
                        key="manual"
                        prop="manual"
                      >
                      </el-table-column>
                      <el-table-column
                        label="短信"
                        align="center"
                        key="sms"
                        prop="sms"
                      >
                      </el-table-column>
                      <el-table-column
                        label="微信"
                        align="center"
                        key="weChat"
                        prop="weChat"
                      >
                      </el-table-column>
                    </el-table-column>
                    <el-table-column align="center" label="再次出院随访">
                      <el-table-column
                        label="应随访"
                        align="center"
                        key="needFollowUpAgain"
                        prop="needFollowUpAgain"
                      >
                      </el-table-column>
                      <el-table-column
                        label="待随访"
                        align="center"
                        key="pendingFollowUpAgain"
                        prop="pendingFollowUpAgain"
                      >
                      </el-table-column>
                      <el-table-column
                        label="随访成功"
                        align="center"
                        key="followUpSuccessAgain"
                        prop="followUpSuccessAgain"
                      >
                      </el-table-column>
                      <el-table-column
                        label="随访失败"
                        align="center"
                        key="followUpFailAgain"
                        prop="followUpFailAgain"
                      >
                      </el-table-column>
                      <el-table-column
                        label="随访率"
                        align="center"
                        width="120"
                        key="followUpRateAgain"
                        prop="followUpRateAgain"
                      >
                        <!-- <template slot-scope="scope">
                    <span
                      >{{
                        (Number(scope.row.FollowUpRateAgain) * 100).toFixed(2)
                      }}%</span
                    >
                  </template> -->
                      </el-table-column>
                      <el-table-column
                        label="人工"
                        align="center"
                        key="manualAgain"
                        prop="manualAgain"
                      >
                      </el-table-column>
                      <el-table-column
                        label="短信"
                        align="center"
                        key="smsAgain"
                        prop="smsAgain"
                      >
                      </el-table-column>
                      <el-table-column
                        label="微信"
                        align="center"
                        key="weChatAgain"
                        prop="weChatAgain"
                      >
                      </el-table-column>
                    </el-table-column>
                  </el-table>
                </template>
              </el-table-column>
              <el-table-column
                label="出院病区"
                align="center"
@@ -379,6 +519,254 @@
        </el-row>
      </div>
    </div>
    <!-- ç»Ÿè®¡è¶‹åŠ¿å›¾å¼¹çª— -->
    <el-dialog
      title="随访统计趋势图"
      :visible.sync="chartDialogVisible"
      width="80%"
      :close-on-click-modal="false"
    >
      <div class="chart-container">
        <el-row :gutter="20">
          <el-col :span="12">
            <div class="chart-title">随访状态分布</div>
            <div id="pieChart" style="width: 100%; height: 400px"></div>
          </el-col>
          <el-col :span="12">
            <div class="chart-title">随访趋势分析</div>
            <div id="barLineChart" style="width: 100%; height: 400px"></div>
          </el-col>
        </el-row>
      </div>
    </el-dialog>
    <el-dialog
      title="未及时随访患者服务"
      :visible.sync="SeedetailsVisible"
      v-loading="Seedloading"
      width="70%"
      :close-on-click-modal="false"
    >
      <div class="examine-jic">
        <div class="jic-value">
          <el-row :gutter="20">
            <!--用户数据-->
            <el-form
              :model="patientqueryParams"
              ref="queryForm"
              size="small"
              :inline="true"
              label-width="98px"
            >
              <el-form-item label="患者:">
                <el-input
                  v-model="patientqueryParams.name"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item label="患者诊断:">
                <el-input
                  v-model="patientqueryParams.leavediagname"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item>
                <el-button
                  type="primary"
                  icon="el-icon-search"
                  size="medium"
                  @click="handleQuery"
                  >搜索</el-button
                >
                <el-button
                  icon="el-icon-refresh"
                  size="medium"
                  @click="resetQuery"
                  >取消创建</el-button
                >
              </el-form-item>
            </el-form>
            <!-- é€‰æ‹©æ‚£è€…列表 -->
            <el-table :data="logsheetlist" style="width: 100%">
              <el-table-column
                prop="sendname"
                align="center"
                label="姓名"
                width="100"
              >
              </el-table-column>
              <el-table-column
                prop="taskName"
                align="center"
                width="200"
                show-overflow-tooltip
                label="任务名称"
              >
              </el-table-column>
              <el-table-column
                prop="sendstate"
                align="center"
                width="200"
                label="任务状态"
              >
                <template slot-scope="scope">
                  <div v-if="scope.row.sendstate == 1">
                    <el-tag type="primary" :disable-transitions="false"
                      >表单已领取</el-tag
                    >
                  </div>
                  <div v-if="scope.row.sendstate == 2">
                    <el-tag type="primary" :disable-transitions="false"
                      >待随访</el-tag
                    >
                  </div>
                  <div v-if="scope.row.sendstate == 3">
                    <el-tag type="success" :disable-transitions="false"
                      >表单已发送</el-tag
                    >
                  </div>
                  <div v-if="scope.row.sendstate == 4">
                    <el-tag type="info" :disable-transitions="false"
                      >不执行</el-tag
                    >
                  </div>
                  <div v-if="scope.row.sendstate == 5">
                    <el-tag type="danger" :disable-transitions="false"
                      >发送失败</el-tag
                    >
                  </div>
                  <div v-if="scope.row.sendstate == 6">
                    <el-tag type="success" :disable-transitions="false"
                      >已完成</el-tag
                    >
                  </div>
                </template>
              </el-table-column>
              <el-table-column
                prop="visitTime"
                align="center"
                label="应随访时间"
                width="200"
                show-overflow-tooltip
              >
              </el-table-column>
              <el-table-column
                prop="finishtime"
                align="center"
                label="随访完成时间"
                width="200"
                show-overflow-tooltip
              >
              </el-table-column>
              <el-table-column
                label="出院日期"
                width="200"
                align="center"
                key="endtime"
                prop="endtime"
              >
                <template slot-scope="scope">
                  <span>{{ formatTime(scope.row.endtime) }}</span>
                </template></el-table-column
              >
              <el-table-column
                label="责任护士"
                width="120"
                align="center"
                key="nurseName"
                prop="nurseName"
              />
              <el-table-column
                label="主治医生"
                width="120"
                align="center"
                key="drname"
                prop="drname"
              />
              <el-table-column
                label="结果状态"
                align="center"
                key="excep"
                prop="excep"
                width="120"
              >
                <template slot-scope="scope">
                  <dict-tag
                    :options="dict.type.sys_yujing"
                    :value="scope.row.excep"
                  />
                </template>
              </el-table-column>
              <el-table-column
                label="处理意见"
                align="center"
                key="suggest"
                prop="suggest"
                width="120"
              >
                <template slot-scope="scope">
                  <dict-tag
                    :options="dict.type.sys_suggest"
                    :value="scope.row.suggest"
                  />
                </template>
              </el-table-column>
              <el-table-column
                prop="templatename"
                align="center"
                label="服务模板"
                width="200"
                show-overflow-tooltip
              >
              </el-table-column>
              <el-table-column
                prop="remark"
                align="center"
                label="服务记录"
                width="200"
                show-overflow-tooltip
              >
              </el-table-column>
              <el-table-column
                prop="bankcardno"
                align="center"
                label="呼叫状态"
                width="210"
              >
              </el-table-column>
              <el-table-column
                label="操作"
                fixed="right"
                align="center"
                width="200"
                class-name="small-padding fixed-width"
              >
                <template slot-scope="scope">
                  <el-button
                    size="medium"
                    type="text"
                    @click="SeedetailsgGo(scope.row)"
                    ><span class="button-zx"
                      ><i class="el-icon-s-order"></i>查看</span
                    ></el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </el-row>
          <pagination
            v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
            :total="patienttotal"
            :page.sync="patientqueryParams.pn"
            :limit.sync="patientqueryParams.ps"
            @pagination="Seedetails"
          />
        </div>
      </div>
    </el-dialog>
  </div>
</template>
@@ -431,8 +819,13 @@
    return {
      topactiveName: "Local", //顶部选择
      activeName: "first", //侧边选择
      expands: [],
      // é®ç½©å±‚
      loading: false,
      Seedloading: false,
      chartDialogVisible: false,
      pieChart: null,
      barLineChart: null,
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•个禁用
@@ -560,6 +953,8 @@
        serviceType: [2],
        dateRange: [],
        statisticaltype: 1,
        leavehospitaldistrictcodes: ["all"], // é»˜è®¤é€‰ä¸­å…¨éƒ¨ç—…区
        deptcodes: [], // é»˜è®¤é€‰ä¸­å…¨éƒ¨ç§‘室
      },
      // åˆ—信息
      columns: [
@@ -588,6 +983,40 @@
        this.userList = response.data;
      });
    },
    getRowKey(row) {
      return row.statisticaltype === 1
        ? row.leavehospitaldistrictcode
        : row.deptcode;
    },
    // å¤„理行点击展开
    handleRowClick(row) {
      console.log(row, "row");
      // å¦‚果已经展开则收起
      if (this.expands.includes(this.getRowKey(row))) {
        this.expands = [];
        return;
      }
      // å¤„理查询参数
      const params = {
        ...this.queryParams,
        // å¦‚果选择了"全部",则传所有病区/科室代码
        leavehospitaldistrictcodes: [row.leavehospitaldistrictcode],
        drcode: "1",
      };
      // å¦‚果该行还没有加载医生数据,则加载
      if (!row.doctorStats) {
        this.loading = true;
        getSfStatistics(params).then((res) => {
          this.$set(row, "doctorStats", res.data);
          this.expands = [this.getRowKey(row)];
          this.loading = false;
        });
      } else {
        this.expands = [this.getRowKey(row)];
      }
    },
    /** ä¿®æ”¹æ ‡ç­¾ */
    handleUpdate(row) {
      console.log(row, "修改标签");
@@ -611,6 +1040,25 @@
        this.flatArray = this.flattenArray(response.data);
        console.log(this.flatArray, "this.flatArray");
      });
      // å­˜å‚¨æ‰€æœ‰ç§‘室代码
      this.allDeptCodes = store.getters.belongDepts.map(
        (dept) => dept.deptCode
      );
      // ç—…区列表
      this.flatArrayhospit = store.getters.belongWards.map((ward) => {
        return {
          label: ward.districtName,
          value: ward.districtCode,
        };
      });
      // å­˜å‚¨æ‰€æœ‰ç—…区代码
      this.allWardCodes = store.getters.belongWards.map(
        (ward) => ward.districtCode
      );
      this.flatArraydept.push({ label: "全部", value: "all" });
      this.flatArrayhospit.push({ label: "全部", value: "all" });
    },
    flattenArray(multiArray) {
      let result = [];
@@ -762,6 +1210,354 @@
        `user_${new Date().getTime()}.xlsx`
      );
    },
    // æ˜¾ç¤ºå›¾è¡¨å¼¹çª—
    showChartDialog() {
      this.chartDialogVisible = true;
      this.$nextTick(() => {
        this.initPieChart();
        this.initBarLineChart();
      });
    },
    // åœ¨methods中修改统计方法
    showChartDialog() {
      this.chartDialogVisible = true;
      this.$nextTick(() => {
        console.log(this.userList, "this.userList");
        this.initCharts();
      });
    },
    // æ–°å¢žåˆå§‹åŒ–图表方法
    initCharts() {
      this.initPieChart();
      this.initBarLineChart();
    },
    // åˆå§‹åŒ–饼图
initPieChart() {
  const echarts = require("echarts");
  const pieDom = document.getElementById("pieChart");
  if (!pieDom) return;
  if (this.pieChart) {
    this.pieChart.dispose();
  }
  this.pieChart = echarts.init(pieDom);
  // è®¡ç®—饼图数据
  const followUpData = {
    pending: 0,
    success: 0,
    fail: 0,
  };
  this.userList.forEach((item) => {
    followUpData.pending += item.pendingFollowUp || 0;
    followUpData.success += item.followUpSuccess || 0;
    followUpData.fail += item.followUpFail || 0;
  });
  // ä½¿ç”¨æ›´ç¾Žè§‚的颜色方案
  const pieOption = {
    title: {
      text: "随访状态分布",
      left: "center",
      textStyle: {
        color: '#333',
        fontSize: 16
      }
    },
    tooltip: {
      trigger: "item",
      formatter: "{a} <br/>{b}: {c} ({d}%)",
    },
    legend: {
      orient: "vertical",
      left: "left",
      data: ["待随访", "随访成功", "随访失败"],
      textStyle: {
        color: '#666'
      }
    },
    color: ['#FF9D4D', '#36B37E', '#FF5C5C'], // æ–°çš„配色方案
    series: [
      {
        name: "随访状态",
        type: "pie",
        radius: ["40%", "70%"],
        avoidLabelOverlap: true,
        itemStyle: {
          borderRadius: 10,
          borderColor: "#fff",
          borderWidth: 2
        },
        label: {
          show: true,
          formatter: "{b}: {c} ({d}%)",
          color: '#333'
        },
        emphasis: {
          label: {
            show: true,
            fontSize: "18",
            fontWeight: "bold"
          },
          itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
        },
        data: [
          {
            value: followUpData.pending,
            name: "待随访"
          },
          {
            value: followUpData.success,
            name: "随访成功"
          },
          {
            value: followUpData.fail,
            name: "随访失败"
          }
        ]
      }
    ]
  };
  this.pieChart.setOption(pieOption);
  window.addEventListener("resize", this.resizePieChart);
},
// åˆå§‹åŒ–柱状折线图
initBarLineChart() {
  const echarts = require("echarts");
  const barDom = document.getElementById("barLineChart");
  if (!barDom) return;
  if (this.barLineChart) {
    this.barLineChart.dispose();
  }
  this.barLineChart = echarts.init(barDom);
  // å‡†å¤‡æ•°æ®
  const categories = this.userList.map(
    (item) => item.leavehospitaldistrictname || item.deptname
  );
  const dischargeData = this.userList.map(
    (item) => item.dischargeCount || 0
  );
  const followUpData = this.userList.map(
    (item) => item.followUpNeeded || 0
  );
  // æ–°å¢žä¸¤æ¡æŠ˜çº¿æ•°æ®
 const followUpRateData = this.userList.map(item => {
    if (!item.followUpRate) return 0;
    // åŽ»æŽ‰ç™¾åˆ†å·å¹¶è½¬ä¸ºæ•°å­—
    const rateStr = String(item.followUpRate).replace('%', '');
    return parseFloat(rateStr) || 0;
  });
  const timelyRateData = this.userList.map(item =>
    item.rate ? (Number(item.rate) * 100).toFixed(2) : 0
  );
  const option = {
    title: {
      text: "科室/病区随访趋势",
      left: "center",
      textStyle: {
        color: '#333',
        fontSize: 16
      }
    },
    tooltip: {
      trigger: "axis",
      axisPointer: {
        type: "cross",
        crossStyle: {
          color: "#999",
        },
      },
    },
    legend: {
      data: ["出院人次", "应随访人次", "随访率(%)", "及时率(%)"],
      top: "bottom",
      textStyle: {
        color: '#666'
      }
    },
    color: ['#5470C6', '#91CC75', '#EE6666', '#9A60B4'], // æ–°å¢žç´«è‰²ç”¨äºŽåŠæ—¶çއ
    xAxis: {
      type: "category",
      data: categories,
      axisLabel: {
        interval: 0,
        rotate: 30,
        color: '#666'
      },
      axisLine: {
        lineStyle: {
          color: '#ddd'
        }
      }
    },
    yAxis: [
      {
        type: "value",
        name: "人次",
        min: 0,
        axisLabel: {
          color: '#666'
        },
        axisLine: {
          lineStyle: {
            color: '#ddd'
          }
        },
        splitLine: {
          lineStyle: {
            color: '#f0f0f0'
          }
        }
      },
      {
        type: "value",
        name: "百分比(%)",
        min: 0,
        max: 100,
        axisLabel: {
          color: '#666',
          formatter: '{value}%'
        },
        axisLine: {
          lineStyle: {
            color: '#ddd'
          }
        },
        splitLine: {
          show: false
        }
      }
    ],
    series: [
      {
        name: "出院人次",
        type: "bar",
        barWidth: "25%",
        data: dischargeData,
        itemStyle: {
          borderRadius: [4, 4, 0, 0]
        }
      },
      {
        name: "应随访人次",
        type: "bar",
        barWidth: "25%",
        data: followUpData,
        itemStyle: {
          borderRadius: [4, 4, 0, 0]
        }
      },
      {
        name: "随访率(%)",
        type: "line",
        yAxisIndex: 1,
        data: followUpRateData,
        symbolSize: 8,
        lineStyle: {
          width: 3
        },
        markLine: {
          silent: true,
          data: [{
            yAxis: 80,
            lineStyle: {
              color: '#EE6666',
              type: 'dashed'
            },
            // label: {
            //   position: 'end',
            //   formatter: '目标80%'
            // }
          }]
        }
      },
      {
        name: "及时率(%)",
        type: "line",
        yAxisIndex: 1,
        data: timelyRateData,
        symbolSize: 8,
        lineStyle: {
          width: 3,
          type: 'dotted' // ä½¿ç”¨è™šçº¿åŒºåˆ†
        },
        markLine: {
          silent: true,
          data: [{
            yAxis: 90,
            lineStyle: {
              color: '#9A60B4',
              type: 'dashed'
            },
            // label: {
            //   position: 'end',
            //   formatter: '目标90%'
            // }
          }]
        }
      }
    ],
    grid: {
      top: '15%',
      left: '3%',
      right: '4%',
      bottom: '15%',
      containLabel: true
    }
  };
  this.barLineChart.setOption(option);
  window.addEventListener("resize", this.resizeBarLineChart);
},
    // å›¾è¡¨å“åº”式调整方法
    resizePieChart() {
      if (this.pieChart) {
        this.pieChart.resize();
      }
    },
    resizeBarLineChart() {
      if (this.barLineChart) {
        this.barLineChart.resize();
      }
    },
    // åœ¨ç»„件销毁时清理
    beforeDestroy() {
      // ç§»é™¤äº‹ä»¶ç›‘听
      window.removeEventListener("resize", this.resizePieChart);
      window.removeEventListener("resize", this.resizeBarLineChart);
      // é”€æ¯å›¾è¡¨å®žä¾‹
      if (this.pieChart) {
        this.pieChart.dispose();
        this.pieChart = null;
      }
      if (this.barLineChart) {
        this.barLineChart.dispose();
        this.barLineChart = null;
      }
    },
  },
};
</script>
@@ -858,6 +1654,52 @@
    font-size: 20px;
  }
}
/* ä½¿è¡Œæœ‰æ‰‹åž‹æŒ‡é’ˆ */
.el-table__row {
  cursor: pointer;
}
/* å†…层医生表格样式 */
.inner-table {
  // è¡¨å¤´èƒŒæ™¯è‰²
  ::v-deep .el-table__header-wrapper {
    background-color: #f0f7ff !important;
    th {
      background-color: #f0f7ff !important;
    }
  }
  // è¡¨æ ¼è¡ŒèƒŒæ™¯è‰²
  ::v-deep .el-table__body-wrapper {
    tr {
      background-color: #f9fbfe !important;
      &:hover {
        background-color: #e6f1ff !important;
      }
    }
  }
  // è¾¹æ¡†é¢œè‰²
  ::v-deep .el-table--border {
    border-color: #d9e8ff !important;
    td,
    th {
      border-color: #d9e8ff !important;
    }
  }
  // æ–‘马纹效果
  ::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
    background-color: #f5f9ff !important;
  }
}
/* å±•开行样式 */
.el-table__expanded-cell {
  padding: 10px 0 !important;
  background: #f8f8f8;
}
.document {
  width: 100px;
  height: 50px;