{const _=q,x=ee,i=A,f=Z,g=Y,N=O,I=X,P=Q,S=W,T=R,L=H;return V(),v(J,null,[e(_,{shadow:"never",class:"!border-none flex"},{default:t(()=>[...l[3]||(l[3]=[s("div",{class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2 text-xl font-medium"},[h(" 底部导航设置 "),s("span",{class:"form-tips ml-[10px] !mt-0"}," 至少添加2个导航,最多添加5个导航 ")],-1)])]),_:1}),e(L,{"label-width":"70px"},{default:t(()=>[e(_,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>[l[4]||(l[4]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"展示样式")],-1)),e(i,{label:"默认颜色"},{default:t(()=>[e(x,{class:"max-w-[400px]",modelValue:m(n).style.default_color,"onUpdate:modelValue":l[0]||(l[0]=u=>m(n).style.default_color=u),"default-color":"#999999"},null,8,["modelValue"])]),_:1}),e(i,{label:"选中颜色",style:{"margin-bottom":"0"}},{default:t(()=>[e(x,{class:"max-w-[400px]",modelValue:m(n).style.selected_color,"onUpdate:modelValue":l[1]||(l[1]=u=>m(n).style.selected_color=u),"default-color":"#4173ff"},null,8,["modelValue"])]),_:1})]),_:1}),e(_,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>{var u;return[l[7]||(l[7]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单设置"),s("div",{class:"text-xs text-tx-secondary ml-2"},"建议图片尺寸:100px*100px")],-1)),s("div",le,[e(m(K),{class:"draggable",modelValue:m(n).list,"onUpdate:modelValue":l[2]||(l[2]=o=>m(n).list=o),animation:"300",draggable:".draggable",handle:".drag-move",move:D,"item-key":"index"},{item:t(({element:o,index:r})=>[e(S,{onClose:d=>B(r),class:M(["max-w-[400px]",{draggable:r!=0}]),"show-close":r!==0},{default:t(()=>[s("div",oe,[e(i,{label:"导航图标"},{default:t(()=>[e(g,{modelValue:o.unselected,"onUpdate:modelValue":d=>o.unselected=d,"upload-class":"bg-body","exclude-domain":"",size:"60px"},{upload:t(()=>[s("div",te,[e(f,{name:"el-icon-Plus",size:16}),l[5]||(l[5]=s("span",{class:"text-xs leading-5"}," 未选中 ",-1))])]),_:1},8,["modelValue","onUpdate:modelValue"]),e(g,{modelValue:o.selected,"onUpdate:modelValue":d=>o.selected=d,"exclude-domain":"","upload-class":"bg-body",size:"60px"},{upload:t(()=>[s("div",se,[e(f,{name:"el-icon-Plus",size:16}),l[6]||(l[6]=s("span",{class:"text-xs leading-5"}," 选中 ",-1))])]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(i,{label:"导航名称"},{default:t(()=>[e(N,{modelValue:o.name,"onUpdate:modelValue":d=>o.name=d,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(i,{label:"链接地址"},{default:t(()=>[e(I,{"is-tab":!0,disabled:r===0,modelValue:o.link,"onUpdate:modelValue":d=>o.link=d},null,8,["disabled","modelValue","onUpdate:modelValue"])]),_:2},1024),e(i,{label:"是否显示"},{default:t(()=>[s("div",ae,[e(P,{disabled:r==0,modelValue:o.is_show,"onUpdate:modelValue":d=>o.is_show=d,"active-value":1,"inactive-value":0,onChange:d=>F(o)},null,8,["disabled","modelValue","onUpdate:modelValue","onChange"]),s("div",ne,[e(f,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])]),_:2},1032,["onClose","show-close","class"])]),_:1},8,["modelValue"])]),((u=m(n).list)==null?void 0:u.length) {const _=q,x=ee,i=A,f=Z,g=Y,N=O,I=X,P=Q,S=W,T=R,L=H;return V(),v(J,null,[e(_,{shadow:"never",class:"!border-none flex"},{default:t(()=>[...l[3]||(l[3]=[s("div",{class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2 text-xl font-medium"},[h(" 底部导航设置 "),s("span",{class:"form-tips ml-[10px] !mt-0"}," 至少添加2个导航,最多添加5个导航 ")],-1)])]),_:1}),e(L,{"label-width":"70px"},{default:t(()=>[e(_,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>[l[4]||(l[4]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"展示样式")],-1)),e(i,{label:"默认颜色"},{default:t(()=>[e(x,{class:"max-w-[400px]",modelValue:m(n).style.default_color,"onUpdate:modelValue":l[0]||(l[0]=u=>m(n).style.default_color=u),"default-color":"#999999"},null,8,["modelValue"])]),_:1}),e(i,{label:"选中颜色",style:{"margin-bottom":"0"}},{default:t(()=>[e(x,{class:"max-w-[400px]",modelValue:m(n).style.selected_color,"onUpdate:modelValue":l[1]||(l[1]=u=>m(n).style.selected_color=u),"default-color":"#4173ff"},null,8,["modelValue"])]),_:1})]),_:1}),e(_,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>{var u;return[l[7]||(l[7]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单设置"),s("div",{class:"text-xs text-tx-secondary ml-2"},"建议图片尺寸:100px*100px")],-1)),s("div",le,[e(m(K),{class:"draggable",modelValue:m(n).list,"onUpdate:modelValue":l[2]||(l[2]=o=>m(n).list=o),animation:"300",draggable:".draggable",handle:".drag-move",move:D,"item-key":"index"},{item:t(({element:o,index:r})=>[e(S,{onClose:d=>B(r),class:M(["max-w-[400px]",{draggable:r!=0}]),"show-close":r!==0},{default:t(()=>[s("div",oe,[e(i,{label:"导航图标"},{default:t(()=>[e(g,{modelValue:o.unselected,"onUpdate:modelValue":d=>o.unselected=d,"upload-class":"bg-body","exclude-domain":"",size:"60px"},{upload:t(()=>[s("div",te,[e(f,{name:"el-icon-Plus",size:16}),l[5]||(l[5]=s("span",{class:"text-xs leading-5"}," 未选中 ",-1))])]),_:1},8,["modelValue","onUpdate:modelValue"]),e(g,{modelValue:o.selected,"onUpdate:modelValue":d=>o.selected=d,"exclude-domain":"","upload-class":"bg-body",size:"60px"},{upload:t(()=>[s("div",se,[e(f,{name:"el-icon-Plus",size:16}),l[6]||(l[6]=s("span",{class:"text-xs leading-5"}," 选中 ",-1))])]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(i,{label:"导航名称"},{default:t(()=>[e(N,{modelValue:o.name,"onUpdate:modelValue":d=>o.name=d,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(i,{label:"链接地址"},{default:t(()=>[e(I,{"is-tab":!0,disabled:r===0,modelValue:o.link,"onUpdate:modelValue":d=>o.link=d},null,8,["disabled","modelValue","onUpdate:modelValue"])]),_:2},1024),e(i,{label:"是否显示"},{default:t(()=>[s("div",ae,[e(P,{disabled:r==0,modelValue:o.is_show,"onUpdate:modelValue":d=>o.is_show=d,"active-value":1,"inactive-value":0,onChange:d=>F(o)},null,8,["disabled","modelValue","onUpdate:modelValue","onChange"]),s("div",ne,[e(f,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])]),_:2},1032,["onClose","show-close","class"])]),_:1},8,["modelValue"])]),((u=m(n).list)==null?void 0:u.length) {var d;if(((d=c.content.data)==null?void 0:d.length)<=1)return v.msgError("最少保留一张图片");const e=b(c.content);e.data.splice(a,1),m("update:content",e)};return(a,e)=>{const d=H,y=z,_=q,E=G,U=A,C=T,B=S,D=K,N=O,$=Q;return i(),g("div",null,[t($,{"label-width":"70px"},{default:l(()=>[t(N,{shadow:"never",class:"!border-none flex mt-2"},{default:l(()=>{var x;return[e[2]||(e[2]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单"),s("div",{class:"text-xs text-tx-secondary ml-2"}," 最多添加5张,建议图片尺寸:750px*200px ")],-1)),t(u(j),{class:"draggable",modelValue:u(f).data,"onUpdate:modelValue":e[0]||(e[0]=o=>u(f).data=o),animation:"300",handle:".drag-move","item-key":"index"},{item:l(({element:o,index:V})=>[(i(),F(B,{key:V,onClose:n=>w(V),class:"w-[467px]"},{default:l(()=>[s("div",J,[t(d,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),s("div",M,[t(_,{label:"图片名称"},{default:l(()=>[t(y,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(_,{class:"mt-[18px]",label:"图片链接"},{default:l(()=>[t(E,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(_,{label:"是否显示",class:"mt-[18px]"},{default:l(()=>[s("div",W,[t(U,{modelValue:o.is_show,"onUpdate:modelValue":n=>o.is_show=n,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),s("div",X,[t(C,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"]),((x=r.content.data)==null?void 0:x.length) [...e[1]||(e[1]=[L("添加图片",-1)])]),_:1})])):P("",!0)]}),_:1})]),_:1})])}}});export{le as _};
+import{o as I,q as i,r as g,v as t,D as l,bg as O,s,u,bQ as j,O as F,b6 as q,b7 as z,I as A,K,L,P,b9 as Q,p as R,cm as b}from"./.pnpm-CC7b2w5D.js";import{_ as S}from"./index-iLAcvfHz.js";import{c as T,i as v}from"./index-qHIBxlsP.js";import{_ as G}from"./picker-DCmO0Ssq.js";import{_ as H}from"./picker-DSvElp-8.js";const J={class:"bg-fill-light flex items-center w-full p-4 mt-4"},M={class:"ml-3 flex-1"},W={class:"flex-1 flex items-center"},X={class:"drag-move cursor-move ml-auto"},Y={key:0,class:"mt-4"},p=5,le=I({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(r,{emit:h}){const m=h,c=r,f=R({get:()=>c.content,set:a=>{m("update:content",a)}}),k=()=>{var a;if(((a=c.content.data)==null?void 0:a.length) {var d;if(((d=c.content.data)==null?void 0:d.length)<=1)return v.msgError("最少保留一张图片");const e=b(c.content);e.data.splice(a,1),m("update:content",e)};return(a,e)=>{const d=H,y=z,_=q,E=G,U=A,C=T,B=S,D=K,N=O,$=Q;return i(),g("div",null,[t($,{"label-width":"70px"},{default:l(()=>[t(N,{shadow:"never",class:"!border-none flex mt-2"},{default:l(()=>{var x;return[e[2]||(e[2]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单"),s("div",{class:"text-xs text-tx-secondary ml-2"}," 最多添加5张,建议图片尺寸:750px*200px ")],-1)),t(u(j),{class:"draggable",modelValue:u(f).data,"onUpdate:modelValue":e[0]||(e[0]=o=>u(f).data=o),animation:"300",handle:".drag-move","item-key":"index"},{item:l(({element:o,index:V})=>[(i(),F(B,{key:V,onClose:n=>w(V),class:"w-[467px]"},{default:l(()=>[s("div",J,[t(d,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),s("div",M,[t(_,{label:"图片名称"},{default:l(()=>[t(y,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(_,{class:"mt-[18px]",label:"图片链接"},{default:l(()=>[t(E,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(_,{label:"是否显示",class:"mt-[18px]"},{default:l(()=>[s("div",W,[t(U,{modelValue:o.is_show,"onUpdate:modelValue":n=>o.is_show=n,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),s("div",X,[t(C,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"]),((x=r.content.data)==null?void 0:x.length) [...e[1]||(e[1]=[L("添加图片",-1)])]),_:1})])):P("",!0)]}),_:1})]),_:1})])}}});export{le as _};
diff --git a/server/public/admin/assets/attr.vue_vue_type_script_setup_true_lang-WcnANH0D.js b/server/public/admin/assets/attr.vue_vue_type_script_setup_true_lang-LUOzScqu.js
similarity index 97%
rename from server/public/admin/assets/attr.vue_vue_type_script_setup_true_lang-WcnANH0D.js
rename to server/public/admin/assets/attr.vue_vue_type_script_setup_true_lang-LUOzScqu.js
index 7d53e6bc5..b00c7817a 100644
--- a/server/public/admin/assets/attr.vue_vue_type_script_setup_true_lang-WcnANH0D.js
+++ b/server/public/admin/assets/attr.vue_vue_type_script_setup_true_lang-LUOzScqu.js
@@ -1 +1 @@
-import{o as E,q as s,O as r,D as t,v as l,bg as F,b6 as C,bc as N,u as a,bf as z,L as p,b7 as B,P as i,s as b,b9 as O,p as j}from"./.pnpm-CC7b2w5D.js";import{_ as D}from"./index.vue_vue_type_script_setup_true_lang-Bd2sXtUT.js";import{_ as I}from"./picker-DJ_b-DS3.js";const G=E({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(d,{emit:g}){const y=g,x=d,o=j({get:()=>x.content,set:f=>{y("update:content",f)}});return(f,e)=>{const m=z,_=N,u=C,v=B,V=I,k=D,U=F,w=O;return s(),r(w,{ref:"form","label-width":"80px",size:"large"},{default:t(()=>[l(U,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>[l(u,{label:"页面标题"},{default:t(()=>[l(_,{modelValue:a(o).title_type,"onUpdate:modelValue":e[0]||(e[0]=n=>a(o).title_type=n)},{default:t(()=>[l(m,{value:"1"},{default:t(()=>[...e[7]||(e[7]=[p("文字",-1)])]),_:1}),l(m,{value:"2"},{default:t(()=>[...e[8]||(e[8]=[p("图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),d.content.title_type==1?(s(),r(u,{key:0},{default:t(()=>[l(v,{modelValue:a(o).title,"onUpdate:modelValue":e[1]||(e[1]=n=>a(o).title=n),maxlength:"8","show-word-limit":"",class:"w-[300px]",placeholder:"请输入页面标题"},null,8,["modelValue"])]),_:1})):i("",!0),d.content.title_type==2?(s(),r(u,{key:1},{default:t(()=>[l(V,{modelValue:a(o).title_img,"onUpdate:modelValue":e[2]||(e[2]=n=>a(o).title_img=n),limit:1,size:"100px"},null,8,["modelValue"]),e[9]||(e[9]=b("div",{class:"form-tips"},"建议图片尺寸:300px*40px",-1))]),_:1})):i("",!0),d.content.title_type==1?(s(),r(u,{key:2,label:"文字颜色"},{default:t(()=>[l(_,{modelValue:a(o).text_color,"onUpdate:modelValue":e[3]||(e[3]=n=>a(o).text_color=n)},{default:t(()=>[l(m,{value:"1"},{default:t(()=>[...e[10]||(e[10]=[p("白色",-1)])]),_:1}),l(m,{value:"2"},{default:t(()=>[...e[11]||(e[11]=[p("黑色",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):i("",!0),l(u,{label:"页面背景"},{default:t(()=>[l(_,{modelValue:a(o).bg_type,"onUpdate:modelValue":e[4]||(e[4]=n=>a(o).bg_type=n)},{default:t(()=>[l(m,{value:"1"},{default:t(()=>[...e[12]||(e[12]=[p("背景颜色",-1)])]),_:1}),l(m,{value:"2"},{default:t(()=>[...e[13]||(e[13]=[p("背景图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),d.content.bg_type==1?(s(),r(u,{key:3},{default:t(()=>[l(k,{modelValue:a(o).bg_color,"onUpdate:modelValue":e[5]||(e[5]=n=>a(o).bg_color=n),"reset-color":"#F5F5F5"},null,8,["modelValue"])]),_:1})):i("",!0),d.content.bg_type==2?(s(),r(u,{key:4},{default:t(()=>[l(V,{modelValue:a(o).bg_image,"onUpdate:modelValue":e[6]||(e[6]=n=>a(o).bg_image=n),limit:1,size:"100px"},null,8,["modelValue"]),e[14]||(e[14]=b("div",{class:"form-tips"},"建议图片尺寸:750px*高度不限",-1))]),_:1})):i("",!0)]),_:1})]),_:1},512)}}});export{G as _};
+import{o as E,q as s,O as r,D as t,v as l,bg as F,b6 as C,bc as N,u as a,bf as z,L as p,b7 as B,P as i,s as b,b9 as O,p as j}from"./.pnpm-CC7b2w5D.js";import{_ as D}from"./index.vue_vue_type_script_setup_true_lang-Bd2sXtUT.js";import{_ as I}from"./picker-DSvElp-8.js";const G=E({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(d,{emit:g}){const y=g,x=d,o=j({get:()=>x.content,set:f=>{y("update:content",f)}});return(f,e)=>{const m=z,_=N,u=C,v=B,V=I,k=D,U=F,w=O;return s(),r(w,{ref:"form","label-width":"80px",size:"large"},{default:t(()=>[l(U,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>[l(u,{label:"页面标题"},{default:t(()=>[l(_,{modelValue:a(o).title_type,"onUpdate:modelValue":e[0]||(e[0]=n=>a(o).title_type=n)},{default:t(()=>[l(m,{value:"1"},{default:t(()=>[...e[7]||(e[7]=[p("文字",-1)])]),_:1}),l(m,{value:"2"},{default:t(()=>[...e[8]||(e[8]=[p("图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),d.content.title_type==1?(s(),r(u,{key:0},{default:t(()=>[l(v,{modelValue:a(o).title,"onUpdate:modelValue":e[1]||(e[1]=n=>a(o).title=n),maxlength:"8","show-word-limit":"",class:"w-[300px]",placeholder:"请输入页面标题"},null,8,["modelValue"])]),_:1})):i("",!0),d.content.title_type==2?(s(),r(u,{key:1},{default:t(()=>[l(V,{modelValue:a(o).title_img,"onUpdate:modelValue":e[2]||(e[2]=n=>a(o).title_img=n),limit:1,size:"100px"},null,8,["modelValue"]),e[9]||(e[9]=b("div",{class:"form-tips"},"建议图片尺寸:300px*40px",-1))]),_:1})):i("",!0),d.content.title_type==1?(s(),r(u,{key:2,label:"文字颜色"},{default:t(()=>[l(_,{modelValue:a(o).text_color,"onUpdate:modelValue":e[3]||(e[3]=n=>a(o).text_color=n)},{default:t(()=>[l(m,{value:"1"},{default:t(()=>[...e[10]||(e[10]=[p("白色",-1)])]),_:1}),l(m,{value:"2"},{default:t(()=>[...e[11]||(e[11]=[p("黑色",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):i("",!0),l(u,{label:"页面背景"},{default:t(()=>[l(_,{modelValue:a(o).bg_type,"onUpdate:modelValue":e[4]||(e[4]=n=>a(o).bg_type=n)},{default:t(()=>[l(m,{value:"1"},{default:t(()=>[...e[12]||(e[12]=[p("背景颜色",-1)])]),_:1}),l(m,{value:"2"},{default:t(()=>[...e[13]||(e[13]=[p("背景图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),d.content.bg_type==1?(s(),r(u,{key:3},{default:t(()=>[l(k,{modelValue:a(o).bg_color,"onUpdate:modelValue":e[5]||(e[5]=n=>a(o).bg_color=n),"reset-color":"#F5F5F5"},null,8,["modelValue"])]),_:1})):i("",!0),d.content.bg_type==2?(s(),r(u,{key:4},{default:t(()=>[l(V,{modelValue:a(o).bg_image,"onUpdate:modelValue":e[6]||(e[6]=n=>a(o).bg_image=n),limit:1,size:"100px"},null,8,["modelValue"]),e[14]||(e[14]=b("div",{class:"form-tips"},"建议图片尺寸:750px*高度不限",-1))]),_:1})):i("",!0)]),_:1})]),_:1},512)}}});export{G as _};
diff --git a/server/public/admin/assets/auth-CdazaJUU.js b/server/public/admin/assets/auth-CdazaJUU.js
new file mode 100644
index 000000000..655bf6f52
--- /dev/null
+++ b/server/public/admin/assets/auth-CdazaJUU.js
@@ -0,0 +1 @@
+import{_ as o}from"./auth.vue_vue_type_script_setup_true_lang-PR7C6UWy.js";import"./.pnpm-CC7b2w5D.js";import"./menu-C8eS5NXM.js";import"./index-qHIBxlsP.js";import"./role-2Xlg6VJY.js";import"./index-wDCk0akB.js";export{o as default};
diff --git a/server/public/admin/assets/auth-D0rD1Wnu.js b/server/public/admin/assets/auth-D0rD1Wnu.js
deleted file mode 100644
index 97f77be42..000000000
--- a/server/public/admin/assets/auth-D0rD1Wnu.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as o}from"./auth.vue_vue_type_script_setup_true_lang-BzdoWnAe.js";import"./.pnpm-CC7b2w5D.js";import"./menu-q2l5YDCZ.js";import"./index-fgtLtwvK.js";import"./role-C0EF5XYL.js";import"./index-BVt2vora.js";export{o as default};
diff --git a/server/public/admin/assets/auth.vue_vue_type_script_setup_true_lang-BzdoWnAe.js b/server/public/admin/assets/auth.vue_vue_type_script_setup_true_lang-PR7C6UWy.js
similarity index 92%
rename from server/public/admin/assets/auth.vue_vue_type_script_setup_true_lang-BzdoWnAe.js
rename to server/public/admin/assets/auth.vue_vue_type_script_setup_true_lang-PR7C6UWy.js
index 8c09d61c0..7d86928ff 100644
--- a/server/public/admin/assets/auth.vue_vue_type_script_setup_true_lang-BzdoWnAe.js
+++ b/server/public/admin/assets/auth.vue_vue_type_script_setup_true_lang-PR7C6UWy.js
@@ -1 +1 @@
-import{o as O,q as k,r as U,v as s,D as d,ac as H,O as I,b9 as j,u as c,a2 as z,b6 as G,s as y,bd as J,C as P,bU as Q,bi as W,a8 as f,M as r,ba as X,n as b}from"./.pnpm-CC7b2w5D.js";import{m as Y}from"./menu-q2l5YDCZ.js";import{a as Z}from"./role-C0EF5XYL.js";import{_ as $}from"./index-BVt2vora.js";import{x as ee}from"./index-fgtLtwvK.js";const te={class:"edit-popup"},re=O({__name:"auth",emits:["success","close"],setup(ae,{expose:x,emit:C}){const _=C,l=f(),h=f(),u=f(),g=r(!1),i=r(!0),m=r(!1),v=r([]),p=r([]),o=X({id:"",name:"",desc:"",sort:0,data_scope:1,menu_id:[]}),E={name:[{required:!0,message:"请输入名称",trigger:["blur"]}]},w=()=>{m.value=!0,Y().then(e=>{p.value=e,v.value=ee(e),b(()=>{A()}),m.value=!1})},R=()=>{var a,n;const e=(a=l.value)==null?void 0:a.getCheckedKeys(),t=(n=l.value)==null?void 0:n.getHalfCheckedKeys();return e==null||e.unshift.apply(e,t),e},A=()=>{o.menu_id.forEach(e=>{b(()=>{var t;(t=l.value)==null||t.setChecked(e,!0,!1)})})},D=e=>{const t=p.value;for(let a=0;a 订单池默认与处方订单列表同源:创建时间 start_time~end_time + fulfillment_status(默认完成态 3),账号列表可见性/数据域一并生效。 选结算月仍可套用「物流签收与尾款支付均须在结算月 7 日 24 点前」拆分「本期提成 / 顺延下期」 (仅有签收在范围内、尾款晚于截止仍会顺延); 展示部门/渠道下拉与列表不同,勾选后会与列表计数不同。 订单池默认与处方订单列表同源:创建时间 start_time~end_time + fulfillment_status(默认完成态 3),账号列表可见性/数据域一并生效。 选结算月仍可套用「物流签收与尾款支付均须在结算月 7 日 24 点前」拆分「本期提成 / 顺延下期」 (仅有签收在范围内、尾款晚于截止仍会顺延); 展示部门/渠道下拉与列表不同,勾选后会与列表计数不同。 提成结算业绩
提成结算业绩
{c} 单 ({d}%)"},legend:{type:"scroll",bottom:0,textStyle:{fontSize:11}},series:[{name:"诊单",type:"pie",radius:["46%","72%"],center:["50%","46%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
+import{o as K,R as rt,ba as U,ap as dt,q as l,r as c,s as t,v as a,D as n,L as O,u as w,by as I,K as ct,cT as pt,w as ut,T as r,bn as bt,bm as mt,c8 as _t,F as C,G as A,c7 as ht,O as v,cJ as D,bB as yt,P as W,d3 as wt,cL as vt,p as S,M as J}from"./.pnpm-CC7b2w5D.js";import{l as ft,O as V,Q as gt,_ as kt}from"./index-qHIBxlsP.js";import{aF as xt}from"./tcm-B5DtOF4K.js";import{u as St}from"./order-U-pWaaB7.js";import{u as j}from"./getExposeType-hLzUPRum.js";const Ot={class:"workbench-page"},Ct={class:"wb-hero"},At={class:"wb-section wb-section--order"},Dt={class:"wb-section-head"},Nt={class:"wb-section-title"},$t={class:"wb-section-icon wb-section-icon--violet"},zt={class:"wb-section-sub"},Lt={class:"wb-toolbar"},Et={class:"wb-section-body"},Vt={class:"wb-kpi wb-kpi--violet"},Rt={class:"wb-kpi-value"},Ft={class:"wb-kpi wb-kpi--amber"},Pt={class:"wb-kpi-value wb-kpi-value--sm"},Bt={class:"wb-rank-strip wb-rank-strip--compact"},Wt={key:0,class:"wb-rank-chips"},Tt={key:1,class:"wb-rank-empty"},Ht={class:"wb-chart-card"},Mt={class:"wb-chart-card"},Ut={class:"wb-chart-card"},It={class:"wb-chart-card wb-ranking-card"},jt={key:0,class:"wb-ranking-list"},qt={class:"wb-ranking-rank"},Gt={class:"wb-ranking-name"},Jt={class:"wb-ranking-meta"},Kt={class:"wb-ranking-money"},Qt={key:0,class:"wb-dept-block"},Yt={class:"wb-dept-card wb-dept-card--order"},Xt={class:"wb-dept-card-head"},Zt={class:"wb-dept-total"},te={class:"wb-dept-list"},ee={class:"wb-dept-num"},se={key:0,class:"wb-dept-empty"},ae={class:"wb-section wb-section--diagnosis"},oe={class:"wb-section-head"},le={class:"wb-section-title"},ne={class:"wb-section-icon wb-section-icon--blue"},ie={class:"wb-section-sub"},re={class:"wb-toolbar"},de={class:"wb-section-body"},ce={class:"wb-kpi wb-kpi--blue"},pe={class:"wb-kpi-value"},ue={class:"wb-rank-strip"},be={key:0,class:"wb-rank-chips"},me={key:1,class:"wb-rank-empty"},_e={class:"wb-chart-card"},he={class:"wb-chart-card"},ye={key:0,class:"wb-dept-block"},we={class:"wb-dept-card"},ve={class:"wb-dept-card-head"},fe={class:"wb-dept-total"},ge={class:"wb-dept-list"},ke={class:"wb-dept-num"},xe={key:0,class:"wb-dept-empty"},Se={class:"wb-section wb-section--trend"},Oe={class:"wb-section-head"},Ce={class:"wb-section-title"},Ae={class:"wb-section-icon wb-section-icon--teal"},De={class:"wb-section-body wb-trend-body"},Ne={class:"wb-chart-card wb-trend-card"},$e={class:"wb-chart-card wb-trend-card"},ze=K({name:"workbench"}),Le=K({...ze,setup(Ee){const g=ft(),T=j(),H=j(),Q=j(),M=["#5b7cfa","#36cfc9","#ffc53d","#ff7a45","#b37feb","#597ef7","#73d13d","#ff85c0"];function q(s){if(s==null)return 0;const e=parseFloat(String(s).replace(/,/g,""));return Number.isFinite(e)?e:0}const p=U({days:0,departments:[],today_ranking:[],ranking:[],chart:{xAxis:[],series:[]}}),Y=S(()=>(p.departments||[]).some(s=>Number(s.total)>0)),X=S(()=>{const s=(p.departments||[]).filter(e=>Number(e.total)>0).map(e=>({name:e.dept_name||"—",value:Number(e.total)}));return{color:M,tooltip:{trigger:"item",formatter:"{b}
{c} 单 ({d}%)"},legend:{type:"scroll",bottom:0,textStyle:{fontSize:11}},series:[{name:"诊单",type:"pie",radius:["46%","72%"],center:["50%","46%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
{c}`},data:s}]}}),Z=S(()=>{var b;const s=g.theme,e=(p.chart.series||[]).map(i=>({...i,name:i.name||"诊单数",type:"bar",barWidth:"46%",itemStyle:{borderRadius:[8,8,0,0],color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:V(s,.75)},{offset:1,color:s}]}}})),h=((b=e[0])==null?void 0:b.data)||[];return{color:[s,"#f0b429"],legend:{data:["诊单数","趋势"],top:4},xAxis:{type:"category",data:p.chart.xAxis||[],axisLabel:{rotate:28,fontSize:11},axisLine:{lineStyle:{color:"#e4e7ec"}}},yAxis:{type:"value",name:"诊单数",splitLine:{lineStyle:{type:"dashed",color:"#eef0f4"}}},tooltip:{trigger:"axis"},grid:{left:"2%",right:"2%",bottom:"12%",top:48,containLabel:!0},series:[...e,{name:"趋势",type:"line",smooth:.35,symbol:"circle",symbolSize:7,lineStyle:{width:3,color:"#f0b429"},itemStyle:{color:"#f0b429"},data:h}]}}),R=()=>{xt({days:p.days}).then(s=>{p.date_range=s.date_range,p.today_total=s.today_total??0,p.today_ranking=s.today_ranking||[],p.departments=s.departments||[],p.ranking=s.ranking||[],p.chart=s.chart||{xAxis:[],series:[]}}).catch(()=>{})},F=J(-1),P=J(0),_=U({order_type_name:"",date_range:[],today_total:0,today_amount:"0.00",today_ranking:[],departments:[],ranking:[],chart:{xAxis:[],series:[]}}),tt=S(()=>(_.departments||[]).some(s=>Number(s.total)>0)),et=S(()=>(_.departments||[]).some(s=>q(s.amount)>0)),st=S(()=>{const s=(_.departments||[]).filter(e=>Number(e.total)>0).map(e=>({name:e.dept_name||"—",value:Number(e.total)}));return{color:M,tooltip:{trigger:"item",formatter:"{b}
{c} 单 ({d}%)"},legend:{type:"scroll",bottom:0,textStyle:{fontSize:11}},series:[{name:"单数",type:"pie",radius:["44%","70%"],center:["50%","46%"],itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
{c}`},data:s}]}}),at=S(()=>{const s=(_.departments||[]).map(e=>({name:e.dept_name||"—",value:q(e.amount)})).filter(e=>e.value>0);return{color:M,tooltip:{trigger:"item",formatter:e=>{const h=e.value;return`${e.name}
¥${Number(h).toFixed(2)} (${e.percent}%)`}},legend:{type:"scroll",bottom:0,textStyle:{fontSize:11}},series:[{name:"金额",type:"pie",radius:["44%","70%"],center:["50%","46%"],itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{formatter:e=>`${e.name}
¥${Number(e.value).toFixed(0)}`},data:s}]}}),ot=S(()=>{const s=_.date_range;if((s==null?void 0:s.length)>=2)return`${s[0]} 至 ${s[1]}`;const e=P.value,h=new Date,b=new Date;return e===0?(b.setHours(0,0,0,0),`${B(b)} 至 ${B(h)}`):(b.setDate(b.getDate()-(e||7)),`${B(b)} 至 ${B(h)}`)});function B(s){return s.getFullYear()+"-"+String(s.getMonth()+1).padStart(2,"0")+"-"+String(s.getDate()).padStart(2,"0")}const lt=S(()=>{var b,i,k;const s=g.theme,e=(((b=_.chart)==null?void 0:b.series)||[]).map(m=>({...m,name:m.name||"单数",type:"bar",barWidth:"46%",itemStyle:{borderRadius:[8,8,0,0],color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:V(s,.72)},{offset:1,color:s}]}}})),h=((i=e[0])==null?void 0:i.data)||[];return{color:[s,"#fa8c16"],legend:{data:["单数","趋势"],top:4},xAxis:{type:"category",data:((k=_.chart)==null?void 0:k.xAxis)||[],axisLabel:{rotate:28,fontSize:11},axisLine:{lineStyle:{color:"#e4e7ec"}}},yAxis:{type:"value",name:"单数",splitLine:{lineStyle:{type:"dashed",color:"#eef0f4"}}},tooltip:{trigger:"axis"},grid:{left:"2%",right:"2%",bottom:"12%",top:48,containLabel:!0},series:[...e,{name:"趋势",type:"line",smooth:.35,symbol:"circle",symbolSize:7,lineStyle:{width:3,color:"#fa8c16"},itemStyle:{color:"#fa8c16"},data:h}]}}),N=()=>{St({order_type:F.value,days:P.value}).then(s=>{Object.assign(_,{order_type_name:s.order_type_name??"",date_range:s.date_range||[],today_total:s.today_total??0,today_amount:s.today_amount??"0.00",today_ranking:s.today_ranking||[],departments:s.departments||[],ranking:s.ranking||[],chart:s.chart||{xAxis:[],series:[]}})}).catch(()=>{})},nt=()=>{G(),R(),N()};rt(()=>g.theme,()=>{it()});const u=U({version:{version:"",website:"",based:"",channel:{gitee:"",website:""}},support:[],today:{},menu:[],visitor:[],article:[],visitorOption:{xAxis:{type:"category",data:[]},yAxis:{type:"value"},legend:{data:["访问量"],top:8},tooltip:{trigger:"axis"},grid:{left:"2%",right:"3%",bottom:"3%",top:40,containLabel:!0},series:[{name:"访问量",data:[],type:"line",smooth:!0,color:g.theme,lineStyle:{color:g.theme,width:2},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:g.theme},{offset:1,color:g.theme}]},opacity:.12}}]},saleOption:{xAxis:{type:"category",data:[]},yAxis:{type:"value",name:"万"},tooltip:{trigger:"axis"},grid:{left:"2%",right:"3%",bottom:"3%",top:36,containLabel:!0},series:[{name:"销售量",data:[],type:"bar",showBackground:!0,backgroundStyle:{color:"rgba(120, 130, 150, 0.08)",borderRadius:[10,10,0,0]},barWidth:"42%",itemStyle:{borderRadius:[10,10,0,0],color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:V(g.theme,.65)},{offset:1,color:g.theme}]}}}]}}),G=()=>{gt().then(s=>{var e,h,b,i,k,m,f,x,$,z,L,E;u.version=s.version,u.today=s.today,u.menu=s.menu,u.visitor=s.visitor,u.support=s.support,u.visitorOption.xAxis.data=[],u.visitorOption.series[0].data=[],u.saleOption.xAxis.data=[],u.saleOption.series[0].data=[],(h=(e=s.visitor)==null?void 0:e.date)==null||h.reverse().forEach(o=>{u.visitorOption.xAxis.data.push(o)}),(m=(k=(i=(b=s.visitor)==null?void 0:b.list)==null?void 0:i[0])==null?void 0:k.data)==null||m.forEach(o=>{u.visitorOption.series[0].data.push(o)}),(x=(f=s.sale)==null?void 0:f.date)==null||x.reverse().forEach(o=>{u.saleOption.xAxis.data.push(o)}),(E=(L=(z=($=s.sale)==null?void 0:$.list)==null?void 0:z[0])==null?void 0:L.data)==null||E.forEach(o=>{let d=o;o<=50&&(d={value:o,itemStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:V("#ff8729",.7)},{offset:1,color:"#ff8729"}]}}}),u.saleOption.series[0].data.push(d)})}).catch(s=>{console.log("err",s)})},it=()=>{var e,h,b,i;const s=g.theme;u.visitorOption.series[0].color=s,u.visitorOption.series[0].lineStyle.color=s,u.visitorOption.series[0].areaStyle.color.colorStops=[{offset:0,color:s},{offset:1,color:s}],u.saleOption.series[0].itemStyle.color.colorStops=[{offset:0,color:V(s,.65)},{offset:1,color:s}],(e=T.value)==null||e.clear(),(h=H.value)==null||h.clear(),(b=T.value)==null||b.setOption(u.saleOption),(i=H.value)==null||i.setOption(u.visitorOption)};return dt(()=>{G(),R(),N()}),(s,e)=>{var $,z,L,E;const h=ct,b=ut,i=bt,k=mt,m=_t,f=ht,x=yt;return l(),c("div",Ot,[t("header",Ct,[e[4]||(e[4]=t("div",{class:"wb-hero-text"},[t("h1",{class:"wb-hero-title"},"数据工作台"),t("p",{class:"wb-hero-desc"},"医助诊单、订单营收与运营趋势一屏掌握")],-1)),a(h,{type:"primary",icon:w(I),round:"",class:"wb-refresh-btn",onClick:nt},{default:n(()=>[...e[3]||(e[3]=[O(" 刷新全部 ",-1)])]),_:1},8,["icon"])]),t("section",At,[t("div",Dt,[t("div",Nt,[t("span",$t,[a(b,null,{default:n(()=>[a(w(pt))]),_:1})]),t("div",null,[e[5]||(e[5]=t("div",{class:"wb-section-name"},"订单统计",-1)),t("div",zt,r(ot.value)+" · "+r(_.order_type_name||"—"),1)])]),t("div",Lt,[a(k,{modelValue:F.value,"onUpdate:modelValue":e[0]||(e[0]=o=>F.value=o),class:"wb-select wb-select--wide",onChange:N},{default:n(()=>[a(i,{label:"全部(已支付)",value:-1}),a(i,{label:"挂号费",value:1}),a(i,{label:"问诊费",value:2}),a(i,{label:"药品费用",value:3}),a(i,{label:"首付费用",value:4}),a(i,{label:"尾款费用",value:5}),a(i,{label:"其他费用",value:6}),a(i,{label:"全部费用",value:7}),a(i,{label:"驼奶费用",value:8}),a(i,{label:"退款统计",value:0})]),_:1},8,["modelValue"]),a(k,{modelValue:P.value,"onUpdate:modelValue":e[1]||(e[1]=o=>P.value=o),class:"wb-select",onChange:N},{default:n(()=>[a(i,{label:"今天",value:0}),a(i,{label:"最近7天",value:7}),a(i,{label:"最近30天",value:30})]),_:1},8,["modelValue"]),a(h,{icon:w(I),circle:"",onClick:N},null,8,["icon"])])]),t("div",Et,[a(f,{gutter:16,class:"wb-kpi-row"},{default:n(()=>[a(m,{xs:24,sm:8},{default:n(()=>[t("div",Vt,[e[6]||(e[6]=t("div",{class:"wb-kpi-label"},"今日单数",-1)),t("div",Rt,r(_.today_total??0),1)])]),_:1}),a(m,{xs:24,sm:8},{default:n(()=>[t("div",Ft,[e[7]||(e[7]=t("div",{class:"wb-kpi-label"},"今日金额",-1)),t("div",Pt,"¥"+r(_.today_amount??"0.00"),1)])]),_:1}),a(m,{xs:24,sm:8},{default:n(()=>{var o;return[t("div",Bt,[e[8]||(e[8]=t("span",{class:"wb-rank-strip-label"},"今日 TOP",-1)),(o=_.today_ranking)!=null&&o.length?(l(),c("div",Wt,[(l(!0),c(C,null,A(_.today_ranking.slice(0,4),(d,y)=>(l(),c("span",{key:d.id,class:"wb-rank-chip wb-rank-chip--dense"},[t("em",null,r(Number(y)+1),1),O(" "+r(d.name)+" ",1),t("strong",null,r(d.count),1),t("small",null,"¥"+r(d.amount),1)]))),128))])):(l(),c("span",Tt,"暂无"))])]}),_:1})]),_:1}),a(f,{gutter:20,class:"wb-chart-row"},{default:n(()=>[a(m,{xs:24,lg:10},{default:n(()=>[t("div",Ht,[e[9]||(e[9]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"部门单数占比")],-1)),tt.value?(l(),v(w(D),{key:0,class:"wb-chart",style:{height:"300px"},option:st.value,autoresize:!0},null,8,["option"])):(l(),v(x,{key:1,class:"wb-chart-empty",description:"暂无数据"}))])]),_:1}),a(m,{xs:24,lg:14},{default:n(()=>{var o,d;return[t("div",Mt,[e[10]||(e[10]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"开单人 · 单数排行"),t("span",{class:"wb-chart-hint"},"柱状 + 趋势")],-1)),(d=(o=_.chart)==null?void 0:o.xAxis)!=null&&d.length?(l(),v(w(D),{key:"order-bar-"+F.value,class:"wb-chart",style:{height:"300px"},option:lt.value,autoresize:!0},null,8,["option"])):(l(),v(x,{key:1,class:"wb-chart-empty",description:"暂无图表数据"}))])]}),_:1})]),_:1}),a(f,{gutter:20,class:"wb-chart-row"},{default:n(()=>[a(m,{xs:24,lg:10},{default:n(()=>[t("div",Ut,[e[11]||(e[11]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"部门金额占比")],-1)),et.value?(l(),v(w(D),{key:0,class:"wb-chart",style:{height:"300px"},option:at.value,autoresize:!0},null,8,["option"])):(l(),v(x,{key:1,class:"wb-chart-empty",description:"暂无数据"}))])]),_:1}),a(m,{xs:24,lg:14},{default:n(()=>{var o;return[t("div",It,[e[13]||(e[13]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"周期内排行"),t("span",{class:"wb-chart-hint"},"单数 / 金额")],-1)),(o=_.ranking)!=null&&o.length?(l(),c("div",jt,[(l(!0),c(C,null,A(_.ranking,(d,y)=>(l(),c("div",{key:d.id,class:"wb-ranking-item"},[t("span",qt,r(Number(y)+1),1),t("span",Gt,r(d.name),1),t("span",Jt,[t("b",null,r(d.count),1),e[12]||(e[12]=O(" 单 ",-1)),t("span",Kt,"¥"+r(d.amount),1)])]))),128))])):(l(),v(x,{key:1,description:"暂无排行"}))])]}),_:1})]),_:1}),($=_.departments)!=null&&$.length?(l(),c("div",Qt,[e[14]||(e[14]=t("div",{class:"wb-dept-title"},"按部门统计",-1)),a(f,{gutter:16},{default:n(()=>[(l(!0),c(C,null,A(_.departments,o=>(l(),v(m,{key:o.dept_id,xs:24,sm:12,lg:8},{default:n(()=>{var d;return[t("div",Yt,[t("div",Xt,[O(r(o.dept_name)+" ",1),t("span",Zt,r(o.total)+" 单 · ¥"+r(o.amount),1)]),t("div",te,[(l(!0),c(C,null,A(o.members,y=>(l(),c("div",{key:`${o.dept_id}-${y.id}`,class:"wb-dept-row"},[t("span",null,r(y.name),1),t("span",ee,[O(r(y.count)+" ",1),t("small",null,"¥"+r(y.amount),1)])]))),128)),(d=o.members)!=null&&d.length?W("",!0):(l(),c("div",se,"暂无"))])])]}),_:2},1024))),128))]),_:1})])):W("",!0)])]),t("section",ae,[t("div",oe,[t("div",le,[t("span",ne,[a(b,null,{default:n(()=>[a(w(wt))]),_:1})]),t("div",null,[e[15]||(e[15]=t("div",{class:"wb-section-name"},"医助理诊单统计",-1)),t("div",ie,r((z=p.date_range)==null?void 0:z[0])+" 至 "+r((L=p.date_range)==null?void 0:L[1]),1)])]),t("div",re,[a(k,{modelValue:p.days,"onUpdate:modelValue":e[2]||(e[2]=o=>p.days=o),class:"wb-select",onChange:R},{default:n(()=>[a(i,{label:"今天",value:0}),a(i,{label:"最近7天",value:7}),a(i,{label:"最近14天",value:14}),a(i,{label:"最近30天",value:30})]),_:1},8,["modelValue"]),a(h,{icon:w(I),circle:"",onClick:R},null,8,["icon"])])]),t("div",de,[a(f,{gutter:16,class:"wb-kpi-row"},{default:n(()=>[a(m,{xs:24,sm:8,lg:6},{default:n(()=>[t("div",ce,[e[16]||(e[16]=t("div",{class:"wb-kpi-label"},"今日创建诊单",-1)),t("div",pe,r(p.today_total??0),1),e[17]||(e[17]=t("div",{class:"wb-kpi-hint"},"当日新增总量",-1))])]),_:1}),a(m,{xs:24,sm:16,lg:18},{default:n(()=>{var o;return[t("div",ue,[e[18]||(e[18]=t("span",{class:"wb-rank-strip-label"},"今日排行",-1)),(o=p.today_ranking)!=null&&o.length?(l(),c("div",be,[(l(!0),c(C,null,A(p.today_ranking.slice(0,6),(d,y)=>(l(),c("span",{key:d.id,class:"wb-rank-chip"},[t("em",null,r(y+1),1),O(" "+r(d.name)+" ",1),t("strong",null,r(d.count),1)]))),128))])):(l(),c("span",me,"暂无排行数据"))])]}),_:1})]),_:1}),a(f,{gutter:20,class:"wb-chart-row"},{default:n(()=>[a(m,{xs:24,lg:15},{default:n(()=>{var o;return[t("div",_e,[e[19]||(e[19]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"诊单量分布"),t("span",{class:"wb-chart-hint"},"柱状 + 趋势线")],-1)),(o=p.chart.xAxis)!=null&&o.length?(l(),v(w(D),{key:0,ref_key:"assistantChart",ref:Q,class:"wb-chart",style:{height:"340px"},option:Z.value,autoresize:!0},null,8,["option"])):(l(),v(x,{key:1,class:"wb-chart-empty",description:"暂无图表数据"}))])]}),_:1}),a(m,{xs:24,lg:9},{default:n(()=>[t("div",he,[e[20]||(e[20]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"部门占比"),t("span",{class:"wb-chart-hint"},"按诊单数")],-1)),Y.value?(l(),v(w(D),{key:0,class:"wb-chart",style:{height:"340px"},option:X.value,autoresize:!0},null,8,["option"])):(l(),v(x,{key:1,class:"wb-chart-empty",description:"暂无部门数据"}))])]),_:1})]),_:1}),(E=p.departments)!=null&&E.length?(l(),c("div",ye,[e[21]||(e[21]=t("div",{class:"wb-dept-title"},"按部门明细",-1)),a(f,{gutter:16},{default:n(()=>[(l(!0),c(C,null,A(p.departments,o=>(l(),v(m,{key:o.dept_id,xs:24,sm:12,lg:8},{default:n(()=>{var d;return[t("div",we,[t("div",ve,[O(r(o.dept_name)+" ",1),t("span",fe,"共 "+r(o.total),1)]),t("div",ge,[(l(!0),c(C,null,A(o.assistants,y=>(l(),c("div",{key:`${o.dept_id}-${y.id}`,class:"wb-dept-row"},[t("span",null,r(y.name),1),t("span",ke,r(y.count),1)]))),128)),(d=o.assistants)!=null&&d.length?W("",!0):(l(),c("div",xe,"暂无医助"))])])]}),_:2},1024))),128))]),_:1})])):W("",!0)])]),t("section",Se,[t("div",Oe,[t("div",Ce,[t("span",Ae,[a(b,null,{default:n(()=>[a(w(vt))]),_:1})]),e[22]||(e[22]=t("div",null,[t("div",{class:"wb-section-name"},"运营趋势"),t("div",{class:"wb-section-sub"},"访问量与销售额走势")],-1))])]),t("div",De,[a(f,{gutter:20},{default:n(()=>[a(m,{xs:24,lg:14},{default:n(()=>[t("div",Ne,[e[23]||(e[23]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"访问量趋势")],-1)),a(w(D),{ref_key:"visitorChart",ref:H,class:"wb-chart",style:{height:"320px"},option:u.visitorOption,autoresize:!0},null,8,["option"])])]),_:1}),a(m,{xs:24,lg:10},{default:n(()=>[t("div",$e,[e[24]||(e[24]=t("div",{class:"wb-chart-card-head"},[t("span",{class:"wb-chart-title"},"销售额趋势"),t("span",{class:"wb-chart-hint"},"单位(万)")],-1)),a(w(D),{ref_key:"saleChart",ref:T,class:"wb-chart",style:{height:"320px"},option:u.saleOption,autoresize:!0},null,8,["option"])])]),_:1})]),_:1})])])])}}}),We=kt(Le,[["__scopeId","data-v-2f6eaa33"]]);export{We as default};
diff --git a/server/public/admin/assets/index-DOyERQcN.js b/server/public/admin/assets/index-BSA3IkQe.js
similarity index 86%
rename from server/public/admin/assets/index-DOyERQcN.js
rename to server/public/admin/assets/index-BSA3IkQe.js
index 288e3c78a..e5faacd6c 100644
--- a/server/public/admin/assets/index-DOyERQcN.js
+++ b/server/public/admin/assets/index-BSA3IkQe.js
@@ -1 +1 @@
-import{o as u,be as C,q as s,r as h,ac as f,bi as E,u as p,O as n,D as t,v as o,bj as x,bk as L,br as B,L as d,K as T,bg as D,a8 as R,ba as N}from"./.pnpm-CC7b2w5D.js";import{d as S}from"./message-ORy7klaq.js";import{_ as V}from"./edit.vue_vue_type_script_setup_true_lang-BvBFX-T8.js";import"./index-fgtLtwvK.js";import"./index-BVt2vora.js";const $=u({name:"shortLetter"}),G=u({...$,setup(j){const c=R(),a=N({loading:!1,lists:[]}),_=async()=>{try{a.loading=!0,a.lists=await S(),a.loading=!1}catch{a.loading=!1}},b=l=>{var e;(e=c.value)==null||e.open(l)};return _(),(l,e)=>{const i=L,m=B,g=T,v=x,k=D,y=C("perms"),w=E;return s(),h("div",null,[f((s(),n(k,{class:"!border-none",shadow:"never"},{default:t(()=>[o(v,{size:"large",data:p(a).lists},{default:t(()=>[o(i,{label:"短信渠道",prop:"name","min-width":"120"}),o(i,{label:"状态","min-width":"120"},{default:t(({row:r})=>[r.status==1?(s(),n(m,{key:0},{default:t(()=>[...e[0]||(e[0]=[d("开启",-1)])]),_:1})):(s(),n(m,{key:1,type:"danger"},{default:t(()=>[...e[1]||(e[1]=[d("关闭",-1)])]),_:1}))]),_:1}),o(i,{label:"操作","min-width":"120",fixed:"right"},{default:t(({row:r})=>[f((s(),n(g,{type:"primary",link:"",onClick:q=>b(r.type)},{default:t(()=>[...e[2]||(e[2]=[d(" 设置 ",-1)])]),_:1},8,["onClick"])),[[y,["notice.sms_config/setConfig"]]])]),_:1})]),_:1},8,["data"])]),_:1})),[[w,p(a).loading]]),o(V,{ref_key:"editRef",ref:c,onSuccess:_},null,512)])}}});export{G as default};
+import{o as u,be as C,q as s,r as h,ac as f,bi as E,u as p,O as n,D as t,v as o,bj as x,bk as L,br as B,L as d,K as T,bg as D,a8 as R,ba as N}from"./.pnpm-CC7b2w5D.js";import{d as S}from"./message-C9MYD2nL.js";import{_ as V}from"./edit.vue_vue_type_script_setup_true_lang-D-Ff7HMd.js";import"./index-qHIBxlsP.js";import"./index-wDCk0akB.js";const $=u({name:"shortLetter"}),G=u({...$,setup(j){const c=R(),a=N({loading:!1,lists:[]}),_=async()=>{try{a.loading=!0,a.lists=await S(),a.loading=!1}catch{a.loading=!1}},b=l=>{var e;(e=c.value)==null||e.open(l)};return _(),(l,e)=>{const i=L,m=B,g=T,v=x,k=D,y=C("perms"),w=E;return s(),h("div",null,[f((s(),n(k,{class:"!border-none",shadow:"never"},{default:t(()=>[o(v,{size:"large",data:p(a).lists},{default:t(()=>[o(i,{label:"短信渠道",prop:"name","min-width":"120"}),o(i,{label:"状态","min-width":"120"},{default:t(({row:r})=>[r.status==1?(s(),n(m,{key:0},{default:t(()=>[...e[0]||(e[0]=[d("开启",-1)])]),_:1})):(s(),n(m,{key:1,type:"danger"},{default:t(()=>[...e[1]||(e[1]=[d("关闭",-1)])]),_:1}))]),_:1}),o(i,{label:"操作","min-width":"120",fixed:"right"},{default:t(({row:r})=>[f((s(),n(g,{type:"primary",link:"",onClick:q=>b(r.type)},{default:t(()=>[...e[2]||(e[2]=[d(" 设置 ",-1)])]),_:1},8,["onClick"])),[[y,["notice.sms_config/setConfig"]]])]),_:1})]),_:1},8,["data"])]),_:1})),[[w,p(a).loading]]),o(V,{ref_key:"editRef",ref:c,onSuccess:_},null,512)])}}});export{G as default};
diff --git a/server/public/admin/assets/index-nPAszB2l.js b/server/public/admin/assets/index-BVOWjEBq.js
similarity index 97%
rename from server/public/admin/assets/index-nPAszB2l.js
rename to server/public/admin/assets/index-BVOWjEBq.js
index 10252cd93..22b3274f7 100644
--- a/server/public/admin/assets/index-nPAszB2l.js
+++ b/server/public/admin/assets/index-BVOWjEBq.js
@@ -1 +1 @@
-var M=Object.defineProperty;var q=(e,r,s)=>r in e?M(e,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[r]=s;var D=(e,r,s)=>q(e,typeof r!="symbol"?r+"":r,s);import{bV as I,o as V,M as k,a8 as j,p as C,q as w,r as P,v as U,D as _,ah as N,bW as K,O as X,s as $,F as x,G as H,T as W,bX as G,bt as J,P as Y}from"./.pnpm-CC7b2w5D.js";import{u as Z,e as Q,p as z,R as L,i as E,_ as ee}from"./index-fgtLtwvK.js";import{j as re,k as ae}from"./file-DnEJKbC_.js";const te=5*1024*1024,se=3;function le(e,r){const s=(r.name.split(".").pop()||"mp4").toLowerCase(),S=Date.now(),h=Math.random().toString(36).slice(2,10);return`${e}${S}-${h}.${s}`}async function ce(e){var o,d;const r=await re({type:e.type});if(r.fallback)throw((o=e.onFallback)==null?void 0:o.call(e,r.provider))??!1?new T(r.provider):new T(r.provider);if(!r.credentials||!r.bucket||!r.region||!r.key_prefix)throw new Error("STS 凭证返回缺失字段");if(r.max_size&&e.file.size>r.max_size){const m=Math.round(r.max_size/1024/1024);throw new Error(`视频体积超出上限(${m}MB)`)}const s=r.credentials,S=r.expired_time??0,h=r.start_time??Math.floor(Date.now()/1e3),y=new I({getAuthorization(m,i){i({TmpSecretId:s.tmpSecretId,TmpSecretKey:s.tmpSecretKey,SecurityToken:s.sessionToken,StartTime:h,ExpiredTime:S})}}),p=le(r.key_prefix,e.file);await new Promise((m,i)=>{y.uploadFile({Bucket:r.bucket,Region:r.region,Key:p,Body:e.file,SliceSize:te,AsyncLimit:se,onProgress(f){if(!e.onProgress)return;const b=f.total||e.file.size;e.onProgress({percent:Math.min(99,Math.round((f.percent||0)*100)),loaded:f.loaded||0,total:b,speed:f.speed||0})}},f=>{if(f){i(f);return}m()})});const u=await ae({type:e.type,key:p,name:e.file.name,size:e.file.size,content_type:e.file.type||"",cid:e.cid??0});return(d=e.onProgress)==null||d.call(e,{percent:100,loaded:e.file.size,total:e.file.size,speed:0}),u}class T extends Error{constructor(s){super(`COS 直传不可用,当前驱动: ${s}`);D(this,"provider");this.name="DirectUploadFallbackError",this.provider=s}}const ne=V({components:{},props:{type:{type:String,default:"image"},multiple:{type:Boolean,default:!0},limit:{type:Number,default:10},data:{type:Object,default:()=>({})},showProgress:{type:Boolean,default:!1},direct:{type:Boolean,default:!1}},emits:["change","error","success","allSuccess"],setup(e,{emit:r}){const s=Z(),S=Q(),h=j(),y=k(`${z.baseUrl}${z.urlPrefix}/upload/${e.type}`),p=C(()=>({token:s.token,version:S.config.version})),u=k(!1),o=k([]),d=C(()=>e.direct&&["video","voice"].includes(e.type)),m=()=>{u.value=!0};let i=0;const f=(a,c)=>{i++,i==o.value.length&&(i=0,o.value=[],r("allSuccess")),r("change",c),a.code==L.SUCCESS&&r("success",a),a.code==L.FAIL&&a.msg&&E.msgError(a.msg)},b=(a,c)=>{var l;i++,i==o.value.length&&(i=0,o.value=[],r("allSuccess")),E.msgError(`${c.name}文件上传失败`),(l=h.value)==null||l.abort(c),u.value=!1,r("change",c),r("error",c)},B=()=>{E.msgError(`超出上传上限${e.limit},请重新上传`)},F=()=>{o.value=[],u.value=!1},O=C(()=>{switch(e.type){case"image":return".jpg,.png,.gif,.jpeg,.ico";case"video":return".wmv,.avi,.mpg,.mpeg,.3gp,.mov,.mp4,.flv,.rmvb,.mkv";case"voice":return".mp3,.wav,.wma,.m4a,.aac,.amr";default:return"*"}}),R=async a=>{var c,l,v;u.value=!0;try{const t=await ce({file:a.file,type:e.type,cid:Number(((c=a.data)==null?void 0:c.cid)??0),onProgress(n){var g;(g=a.onProgress)==null||g.call(a,{percent:n.percent,loaded:n.loaded,total:n.total})}});(l=a.onSuccess)==null||l.call(a,{code:L.SUCCESS,msg:"ok",data:t})}catch(t){if(t instanceof T){E.msgWarning("当前存储不支持直传,已切换为普通上传"),await A(a);return}(v=a.onError)==null||v.call(a,t instanceof Error?t:new Error(String((t==null?void 0:t.message)??t)))}},A=a=>new Promise(c=>{const l=new XMLHttpRequest;l.open("POST",y.value),Object.entries(p.value).forEach(([t,n])=>l.setRequestHeader(t,String(n??""))),l.upload.onprogress=t=>{var g;if(!t.lengthComputable)return;const n=t.loaded/t.total*100;(g=a.onProgress)==null||g.call(a,{percent:n,loaded:t.loaded,total:t.total})},l.onload=()=>{var t,n;try{const g=JSON.parse(l.responseText);(t=a.onSuccess)==null||t.call(a,g)}catch{(n=a.onError)==null||n.call(a,new Error("上传响应解析失败"))}c()},l.onerror=()=>{var t;(t=a.onError)==null||t.call(a,new Error("网络错误")),c()};const v=new FormData;v.append("file",a.file),Object.entries(a.data||{}).forEach(([t,n])=>v.append(t,String(n))),l.send(v)});return{uploadRefs:h,action:y,headers:p,visible:u,fileList:o,useDirect:d,httpRequest:R,getAccept:O,handleProgress:m,handleSuccess:f,handleError:b,handleExceed:B,handleClose:F}}}),oe={class:"upload"},de={class:"file-list p-4"},ie={class:"flex-1"};function ue(e,r,s,S,h,y){const p=K,u=G,o=J;return w(),P("div",oe,[U(p,{"file-list":e.fileList,"onUpdate:fileList":r[0]||(r[0]=d=>e.fileList=d),ref:"uploadRefs",action:e.action,multiple:e.multiple,limit:e.limit,"show-file-list":!1,headers:e.headers,data:e.data,"http-request":e.useDirect?e.httpRequest:void 0,"on-progress":e.handleProgress,"on-success":e.handleSuccess,"on-exceed":e.handleExceed,"on-error":e.handleError,accept:e.getAccept},{default:_(()=>[N(e.$slots,"default")]),_:3},8,["file-list","action","multiple","limit","headers","data","http-request","on-progress","on-success","on-exceed","on-error","accept"]),e.showProgress&&e.fileList.length?(w(),X(o,{key:0,modelValue:e.visible,"onUpdate:modelValue":r[1]||(r[1]=d=>e.visible=d),title:"上传进度","close-on-click-modal":!1,width:"500px",modal:!1,onClose:e.handleClose},{default:_(()=>[$("div",de,[(w(!0),P(x,null,H(e.fileList,(d,m)=>(w(),P("div",{key:m,class:"mb-5"},[$("div",null,W(d.name),1),$("div",ie,[U(u,{percentage:parseInt(d.percentage)},null,8,["percentage"])])]))),128))])]),_:1},8,["modelValue","onClose"])):Y("",!0)])}const pe=ee(ne,[["render",ue]]);export{pe as U};
+var M=Object.defineProperty;var q=(e,r,s)=>r in e?M(e,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[r]=s;var D=(e,r,s)=>q(e,typeof r!="symbol"?r+"":r,s);import{bV as I,o as V,M as k,a8 as j,p as C,q as w,r as P,v as U,D as _,ah as N,bW as K,O as X,s as $,F as x,G as H,T as W,bX as G,bt as J,P as Y}from"./.pnpm-CC7b2w5D.js";import{u as Z,e as Q,p as z,R as L,i as E,_ as ee}from"./index-qHIBxlsP.js";import{j as re,k as ae}from"./file-CZJVULge.js";const te=5*1024*1024,se=3;function le(e,r){const s=(r.name.split(".").pop()||"mp4").toLowerCase(),S=Date.now(),h=Math.random().toString(36).slice(2,10);return`${e}${S}-${h}.${s}`}async function ce(e){var o,d;const r=await re({type:e.type});if(r.fallback)throw((o=e.onFallback)==null?void 0:o.call(e,r.provider))??!1?new T(r.provider):new T(r.provider);if(!r.credentials||!r.bucket||!r.region||!r.key_prefix)throw new Error("STS 凭证返回缺失字段");if(r.max_size&&e.file.size>r.max_size){const m=Math.round(r.max_size/1024/1024);throw new Error(`视频体积超出上限(${m}MB)`)}const s=r.credentials,S=r.expired_time??0,h=r.start_time??Math.floor(Date.now()/1e3),y=new I({getAuthorization(m,i){i({TmpSecretId:s.tmpSecretId,TmpSecretKey:s.tmpSecretKey,SecurityToken:s.sessionToken,StartTime:h,ExpiredTime:S})}}),p=le(r.key_prefix,e.file);await new Promise((m,i)=>{y.uploadFile({Bucket:r.bucket,Region:r.region,Key:p,Body:e.file,SliceSize:te,AsyncLimit:se,onProgress(f){if(!e.onProgress)return;const b=f.total||e.file.size;e.onProgress({percent:Math.min(99,Math.round((f.percent||0)*100)),loaded:f.loaded||0,total:b,speed:f.speed||0})}},f=>{if(f){i(f);return}m()})});const u=await ae({type:e.type,key:p,name:e.file.name,size:e.file.size,content_type:e.file.type||"",cid:e.cid??0});return(d=e.onProgress)==null||d.call(e,{percent:100,loaded:e.file.size,total:e.file.size,speed:0}),u}class T extends Error{constructor(s){super(`COS 直传不可用,当前驱动: ${s}`);D(this,"provider");this.name="DirectUploadFallbackError",this.provider=s}}const ne=V({components:{},props:{type:{type:String,default:"image"},multiple:{type:Boolean,default:!0},limit:{type:Number,default:10},data:{type:Object,default:()=>({})},showProgress:{type:Boolean,default:!1},direct:{type:Boolean,default:!1}},emits:["change","error","success","allSuccess"],setup(e,{emit:r}){const s=Z(),S=Q(),h=j(),y=k(`${z.baseUrl}${z.urlPrefix}/upload/${e.type}`),p=C(()=>({token:s.token,version:S.config.version})),u=k(!1),o=k([]),d=C(()=>e.direct&&["video","voice"].includes(e.type)),m=()=>{u.value=!0};let i=0;const f=(a,c)=>{i++,i==o.value.length&&(i=0,o.value=[],r("allSuccess")),r("change",c),a.code==L.SUCCESS&&r("success",a),a.code==L.FAIL&&a.msg&&E.msgError(a.msg)},b=(a,c)=>{var l;i++,i==o.value.length&&(i=0,o.value=[],r("allSuccess")),E.msgError(`${c.name}文件上传失败`),(l=h.value)==null||l.abort(c),u.value=!1,r("change",c),r("error",c)},B=()=>{E.msgError(`超出上传上限${e.limit},请重新上传`)},F=()=>{o.value=[],u.value=!1},O=C(()=>{switch(e.type){case"image":return".jpg,.png,.gif,.jpeg,.ico";case"video":return".wmv,.avi,.mpg,.mpeg,.3gp,.mov,.mp4,.flv,.rmvb,.mkv";case"voice":return".mp3,.wav,.wma,.m4a,.aac,.amr";default:return"*"}}),R=async a=>{var c,l,v;u.value=!0;try{const t=await ce({file:a.file,type:e.type,cid:Number(((c=a.data)==null?void 0:c.cid)??0),onProgress(n){var g;(g=a.onProgress)==null||g.call(a,{percent:n.percent,loaded:n.loaded,total:n.total})}});(l=a.onSuccess)==null||l.call(a,{code:L.SUCCESS,msg:"ok",data:t})}catch(t){if(t instanceof T){E.msgWarning("当前存储不支持直传,已切换为普通上传"),await A(a);return}(v=a.onError)==null||v.call(a,t instanceof Error?t:new Error(String((t==null?void 0:t.message)??t)))}},A=a=>new Promise(c=>{const l=new XMLHttpRequest;l.open("POST",y.value),Object.entries(p.value).forEach(([t,n])=>l.setRequestHeader(t,String(n??""))),l.upload.onprogress=t=>{var g;if(!t.lengthComputable)return;const n=t.loaded/t.total*100;(g=a.onProgress)==null||g.call(a,{percent:n,loaded:t.loaded,total:t.total})},l.onload=()=>{var t,n;try{const g=JSON.parse(l.responseText);(t=a.onSuccess)==null||t.call(a,g)}catch{(n=a.onError)==null||n.call(a,new Error("上传响应解析失败"))}c()},l.onerror=()=>{var t;(t=a.onError)==null||t.call(a,new Error("网络错误")),c()};const v=new FormData;v.append("file",a.file),Object.entries(a.data||{}).forEach(([t,n])=>v.append(t,String(n))),l.send(v)});return{uploadRefs:h,action:y,headers:p,visible:u,fileList:o,useDirect:d,httpRequest:R,getAccept:O,handleProgress:m,handleSuccess:f,handleError:b,handleExceed:B,handleClose:F}}}),oe={class:"upload"},de={class:"file-list p-4"},ie={class:"flex-1"};function ue(e,r,s,S,h,y){const p=K,u=G,o=J;return w(),P("div",oe,[U(p,{"file-list":e.fileList,"onUpdate:fileList":r[0]||(r[0]=d=>e.fileList=d),ref:"uploadRefs",action:e.action,multiple:e.multiple,limit:e.limit,"show-file-list":!1,headers:e.headers,data:e.data,"http-request":e.useDirect?e.httpRequest:void 0,"on-progress":e.handleProgress,"on-success":e.handleSuccess,"on-exceed":e.handleExceed,"on-error":e.handleError,accept:e.getAccept},{default:_(()=>[N(e.$slots,"default")]),_:3},8,["file-list","action","multiple","limit","headers","data","http-request","on-progress","on-success","on-exceed","on-error","accept"]),e.showProgress&&e.fileList.length?(w(),X(o,{key:0,modelValue:e.visible,"onUpdate:modelValue":r[1]||(r[1]=d=>e.visible=d),title:"上传进度","close-on-click-modal":!1,width:"500px",modal:!1,onClose:e.handleClose},{default:_(()=>[$("div",de,[(w(!0),P(x,null,H(e.fileList,(d,m)=>(w(),P("div",{key:m,class:"mb-5"},[$("div",null,W(d.name),1),$("div",ie,[U(u,{percentage:parseInt(d.percentage)},null,8,["percentage"])])]))),128))])]),_:1},8,["modelValue","onClose"])):Y("",!0)])}const pe=ee(ne,[["render",ue]]);export{pe as U};
diff --git a/server/public/admin/assets/index-Cctd5dgC.js b/server/public/admin/assets/index-BZw3HUfb.js
similarity index 91%
rename from server/public/admin/assets/index-Cctd5dgC.js
rename to server/public/admin/assets/index-BZw3HUfb.js
index 9802a4ad9..faa4c5c23 100644
--- a/server/public/admin/assets/index-Cctd5dgC.js
+++ b/server/public/admin/assets/index-BZw3HUfb.js
@@ -1 +1 @@
-import{o as k,be as N,q as s,r as R,v as t,D as n,bh as T,bg as P,ac as m,bi as U,u as i,O as _,s as w,K as j,L as b,bj as A,bk as q,I as z,C as F,P as I,a8 as K,M,n as h}from"./.pnpm-CC7b2w5D.js";import{_ as O}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{c as G,i as H}from"./index-fgtLtwvK.js";import{a as J,b as Q,c as W}from"./article-BmSadPNg.js";import{u as X}from"./usePaging-Cer8s1LR.js";import{_ as Y}from"./edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-BVmv-S7q.js";import"./index-BVt2vora.js";const Z={class:"flex justify-end mt-4"},ee=k({name:"articleColumn"}),ce=k({...ee,setup(te){const p=K(),f=M(!1),{pager:r,getLists:o}=X({fetchFun:J}),y=async()=>{var l;f.value=!0,await h(),(l=p.value)==null||l.open("add")},V=async l=>{var e,c;f.value=!0,await h(),(e=p.value)==null||e.open("edit"),(c=p.value)==null||c.getDetail(l)},E=async l=>{await H.confirm("确定要删除?"),await Q({id:l}),o()},x=async(l,e)=>{try{await W({id:e,is_show:l}),o()}catch{o()}};return o(),(l,e)=>{const c=T,g=P,$=G,C=j,d=q,D=z,S=A,B=O,v=N("perms"),L=U;return s(),R("div",null,[t(g,{class:"!border-none",shadow:"never"},{default:n(()=>[t(c,{type:"warning",title:"温馨提示:用于管理网站的分类,只可添加到一级",closable:!1,"show-icon":""})]),_:1}),m((s(),_(g,{class:"!border-none mt-4",shadow:"never"},{default:n(()=>[w("div",null,[m((s(),_(C,{class:"mb-4",type:"primary",onClick:e[0]||(e[0]=a=>y())},{icon:n(()=>[t($,{name:"el-icon-Plus"})]),default:n(()=>[e[3]||(e[3]=b(" 新增 ",-1))]),_:1})),[[v,["article.articleCate/add"]]])]),t(S,{size:"large",data:i(r).lists},{default:n(()=>[t(d,{label:"栏目名称",prop:"name","min-width":"120"}),t(d,{label:"文章数",prop:"article_count","min-width":"120"}),t(d,{label:"状态","min-width":"120"},{default:n(({row:a})=>[m(t(D,{modelValue:a.is_show,"onUpdate:modelValue":u=>a.is_show=u,"active-value":1,"inactive-value":0,onChange:u=>x(u,a.id)},null,8,["modelValue","onUpdate:modelValue","onChange"]),[[v,["article.articleCate/updateStatus"]]])]),_:1}),t(d,{label:"排序",prop:"sort","min-width":"120"}),t(d,{label:"操作",width:"120",fixed:"right"},{default:n(({row:a})=>[m((s(),_(C,{type:"primary",link:"",onClick:u=>V(a)},{default:n(()=>[...e[4]||(e[4]=[b(" 编辑 ",-1)])]),_:1},8,["onClick"])),[[v,["article.articleCate/edit"]]]),m((s(),_(C,{type:"danger",link:"",onClick:u=>E(a.id)},{default:n(()=>[...e[5]||(e[5]=[b(" 删除 ",-1)])]),_:1},8,["onClick"])),[[v,["article.articleCate/delete"]]])]),_:1})]),_:1},8,["data"]),w("div",Z,[t(B,{modelValue:i(r),"onUpdate:modelValue":e[1]||(e[1]=a=>F(r)?r.value=a:null),onChange:i(o)},null,8,["modelValue","onChange"])])]),_:1})),[[L,i(r).loading]]),i(f)?(s(),_(Y,{key:0,ref_key:"editRef",ref:p,onSuccess:i(o),onClose:e[2]||(e[2]=a=>f.value=!1)},null,8,["onSuccess"])):I("",!0)])}}});export{ce as default};
+import{o as k,be as N,q as s,r as R,v as t,D as n,bh as T,bg as P,ac as m,bi as U,u as i,O as _,s as w,K as j,L as b,bj as A,bk as q,I as z,C as F,P as I,a8 as K,M,n as h}from"./.pnpm-CC7b2w5D.js";import{_ as O}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{c as G,i as H}from"./index-qHIBxlsP.js";import{a as J,b as Q,c as W}from"./article-DsWTfLRA.js";import{u as X}from"./usePaging-Cer8s1LR.js";import{_ as Y}from"./edit.vue_vue_type_script_setup_true_name_articleColumnEdit_lang-CEDk_gsz.js";import"./index-wDCk0akB.js";const Z={class:"flex justify-end mt-4"},ee=k({name:"articleColumn"}),ce=k({...ee,setup(te){const p=K(),f=M(!1),{pager:r,getLists:o}=X({fetchFun:J}),y=async()=>{var l;f.value=!0,await h(),(l=p.value)==null||l.open("add")},V=async l=>{var e,c;f.value=!0,await h(),(e=p.value)==null||e.open("edit"),(c=p.value)==null||c.getDetail(l)},E=async l=>{await H.confirm("确定要删除?"),await Q({id:l}),o()},x=async(l,e)=>{try{await W({id:e,is_show:l}),o()}catch{o()}};return o(),(l,e)=>{const c=T,g=P,$=G,C=j,d=q,D=z,S=A,B=O,v=N("perms"),L=U;return s(),R("div",null,[t(g,{class:"!border-none",shadow:"never"},{default:n(()=>[t(c,{type:"warning",title:"温馨提示:用于管理网站的分类,只可添加到一级",closable:!1,"show-icon":""})]),_:1}),m((s(),_(g,{class:"!border-none mt-4",shadow:"never"},{default:n(()=>[w("div",null,[m((s(),_(C,{class:"mb-4",type:"primary",onClick:e[0]||(e[0]=a=>y())},{icon:n(()=>[t($,{name:"el-icon-Plus"})]),default:n(()=>[e[3]||(e[3]=b(" 新增 ",-1))]),_:1})),[[v,["article.articleCate/add"]]])]),t(S,{size:"large",data:i(r).lists},{default:n(()=>[t(d,{label:"栏目名称",prop:"name","min-width":"120"}),t(d,{label:"文章数",prop:"article_count","min-width":"120"}),t(d,{label:"状态","min-width":"120"},{default:n(({row:a})=>[m(t(D,{modelValue:a.is_show,"onUpdate:modelValue":u=>a.is_show=u,"active-value":1,"inactive-value":0,onChange:u=>x(u,a.id)},null,8,["modelValue","onUpdate:modelValue","onChange"]),[[v,["article.articleCate/updateStatus"]]])]),_:1}),t(d,{label:"排序",prop:"sort","min-width":"120"}),t(d,{label:"操作",width:"120",fixed:"right"},{default:n(({row:a})=>[m((s(),_(C,{type:"primary",link:"",onClick:u=>V(a)},{default:n(()=>[...e[4]||(e[4]=[b(" 编辑 ",-1)])]),_:1},8,["onClick"])),[[v,["article.articleCate/edit"]]]),m((s(),_(C,{type:"danger",link:"",onClick:u=>E(a.id)},{default:n(()=>[...e[5]||(e[5]=[b(" 删除 ",-1)])]),_:1},8,["onClick"])),[[v,["article.articleCate/delete"]]])]),_:1})]),_:1},8,["data"]),w("div",Z,[t(B,{modelValue:i(r),"onUpdate:modelValue":e[1]||(e[1]=a=>F(r)?r.value=a:null),onChange:i(o)},null,8,["modelValue","onChange"])])]),_:1})),[[L,i(r).loading]]),i(f)?(s(),_(Y,{key:0,ref_key:"editRef",ref:p,onSuccess:i(o),onClose:e[2]||(e[2]=a=>f.value=!1)},null,8,["onSuccess"])):I("",!0)])}}});export{ce as default};
diff --git a/server/public/admin/assets/index-DHpSmtNl.js b/server/public/admin/assets/index-BaeOo-2v.js
similarity index 95%
rename from server/public/admin/assets/index-DHpSmtNl.js
rename to server/public/admin/assets/index-BaeOo-2v.js
index d7b12b6fe..5dc25a1f1 100644
--- a/server/public/admin/assets/index-DHpSmtNl.js
+++ b/server/public/admin/assets/index-BaeOo-2v.js
@@ -1 +1 @@
-import{o as N,Q as M,ba as B,be as Q,q as s,r as V,v as t,D as a,bl as J,b9 as W,u as l,b6 as X,bm as Y,F as Z,G as ee,O as r,bn as te,b7 as ae,b8 as le,K as ne,L as u,bg as oe,s as D,ac as y,bj as se,bk as ie,br as de,C as re,bi as ue,P as me,M as L,a8 as pe,n as R}from"./.pnpm-CC7b2w5D.js";import{_ as ce}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{c as _e,i as fe}from"./index-fgtLtwvK.js";import{c as be,e as ye,f as ve}from"./dict-CewI_Tn_.js";import{u as ge}from"./usePaging-Cer8s1LR.js";import{_ as ke}from"./edit.vue_vue_type_script_setup_true_lang-C7AgsS7N.js";import"./index-BVt2vora.js";const Ce={class:"dict-type"},we={class:"mt-4"},Ve={class:"flex justify-end mt-4"},De=N({name:"dictData"}),Re=N({...De,setup(Ee){const{query:S}=M(),v=L(!1),_=pe(),i=B({type:"",type_id:Number(S.id),name:"",status:""}),C=B({dict_type:[]}),{pager:f,getLists:b,resetPage:E,resetParams:K}=ge({fetchFun:be,params:i}),w=L([]),U=o=>{w.value=o.map(({id:e})=>e)},q=async()=>{var e,m;v.value=!0,await R();const o=C.dict_type.find(p=>p.id==i.type_id);(e=_.value)==null||e.setFormData({type_value:o==null?void 0:o.type,type_id:o.id}),(m=_.value)==null||m.open("add")},I=async o=>{var e,m;v.value=!0,await R(),(e=_.value)==null||e.open("edit"),(m=_.value)==null||m.setFormData(o)},x=async o=>{await fe.confirm("确定要删除?"),await ye({id:o}),b()},h=async()=>{const o=await ve({page_type:0});C.dict_type=o.lists};return b(),h(),(o,e)=>{const m=J,p=te,$=Y,g=X,j=ae,c=ne,O=W,F=oe,P=_e,d=ie,T=de,z=se,A=ce,k=Q("perms"),G=ue;return s(),V("div",Ce,[t(F,{class:"!border-none",shadow:"never"},{default:a(()=>[t(m,{class:"mb-4",content:"数据管理",onBack:e[0]||(e[0]=n=>o.$router.back())}),t(O,{ref:"formRef",class:"mb-[-16px]",model:l(i),inline:""},{default:a(()=>[t(g,{class:"w-[280px]",label:"字典名称"},{default:a(()=>[t($,{modelValue:l(i).type_id,"onUpdate:modelValue":e[1]||(e[1]=n=>l(i).type_id=n),onChange:l(b)},{default:a(()=>[(s(!0),V(Z,null,ee(l(C).dict_type,n=>(s(),r(p,{label:n.name,value:n.id,key:n.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onChange"])]),_:1}),t(g,{class:"w-[280px]",label:"数据名称"},{default:a(()=>[t(j,{modelValue:l(i).name,"onUpdate:modelValue":e[2]||(e[2]=n=>l(i).name=n),clearable:"",onKeyup:le(l(E),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),t(g,{class:"w-[280px]",label:"数据状态"},{default:a(()=>[t($,{modelValue:l(i).status,"onUpdate:modelValue":e[3]||(e[3]=n=>l(i).status=n)},{default:a(()=>[t(p,{label:"全部",value:""}),t(p,{label:"正常",value:1}),t(p,{label:"停用",value:0})]),_:1},8,["modelValue"])]),_:1}),t(g,null,{default:a(()=>[t(c,{type:"primary",onClick:l(E)},{default:a(()=>[...e[7]||(e[7]=[u("查询",-1)])]),_:1},8,["onClick"]),t(c,{onClick:l(K)},{default:a(()=>[...e[8]||(e[8]=[u("重置",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["model"])]),_:1}),t(F,{class:"!border-none mt-4",shadow:"never"},{default:a(()=>[D("div",null,[y((s(),r(c,{type:"primary",onClick:q},{icon:a(()=>[t(P,{name:"el-icon-Plus"})]),default:a(()=>[e[9]||(e[9]=u(" 添加数据 ",-1))]),_:1})),[[k,["setting.dict.dict_data/add"]]]),y((s(),r(c,{disabled:!l(w).length,type:"danger",onClick:e[4]||(e[4]=n=>x(l(w)))},{icon:a(()=>[t(P,{name:"el-icon-Delete"})]),default:a(()=>[e[10]||(e[10]=u(" 删除 ",-1))]),_:1},8,["disabled"])),[[k,["setting.dict.dict_data/delete"]]])]),y((s(),V("div",we,[D("div",null,[t(z,{data:l(f).lists,size:"large",onSelectionChange:U},{default:a(()=>[t(d,{type:"selection",width:"55"}),t(d,{label:"ID",prop:"id"}),t(d,{label:"数据名称",prop:"name","min-width":"120"}),t(d,{label:"数据值",prop:"value","min-width":"120"}),t(d,{label:"状态"},{default:a(({row:n})=>[n.status==1?(s(),r(T,{key:0},{default:a(()=>[...e[11]||(e[11]=[u("正常",-1)])]),_:1})):(s(),r(T,{key:1,type:"danger"},{default:a(()=>[...e[12]||(e[12]=[u("停用",-1)])]),_:1}))]),_:1}),t(d,{label:"备注",prop:"remark","min-width":"120","show-tooltip-when-overflow":""}),t(d,{label:"排序",prop:"sort"}),t(d,{label:"操作",width:"120",fixed:"right"},{default:a(({row:n})=>[y((s(),r(c,{link:"",type:"primary",onClick:H=>I(n)},{default:a(()=>[...e[13]||(e[13]=[u(" 编辑 ",-1)])]),_:1},8,["onClick"])),[[k,["setting.dict.dict_data/edit"]]]),y((s(),r(c,{link:"",type:"danger",onClick:H=>x(n.id)},{default:a(()=>[...e[14]||(e[14]=[u(" 删除 ",-1)])]),_:1},8,["onClick"])),[[k,["setting.dict.dict_data/delete"]]])]),_:1})]),_:1},8,["data"])]),D("div",Ve,[t(A,{modelValue:l(f),"onUpdate:modelValue":e[5]||(e[5]=n=>re(f)?f.value=n:null),onChange:l(b)},null,8,["modelValue","onChange"])])])),[[G,l(f).loading]])]),_:1}),l(v)?(s(),r(ke,{key:0,ref_key:"editRef",ref:_,onSuccess:l(b),onClose:e[6]||(e[6]=n=>v.value=!1)},null,8,["onSuccess"])):me("",!0)])}}});export{Re as default};
+import{o as N,Q as M,ba as B,be as Q,q as s,r as V,v as t,D as a,bl as J,b9 as W,u as l,b6 as X,bm as Y,F as Z,G as ee,O as r,bn as te,b7 as ae,b8 as le,K as ne,L as u,bg as oe,s as D,ac as y,bj as se,bk as ie,br as de,C as re,bi as ue,P as me,M as L,a8 as pe,n as R}from"./.pnpm-CC7b2w5D.js";import{_ as ce}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{c as _e,i as fe}from"./index-qHIBxlsP.js";import{c as be,e as ye,f as ve}from"./dict-B1a70FY8.js";import{u as ge}from"./usePaging-Cer8s1LR.js";import{_ as ke}from"./edit.vue_vue_type_script_setup_true_lang-ddFedeJF.js";import"./index-wDCk0akB.js";const Ce={class:"dict-type"},we={class:"mt-4"},Ve={class:"flex justify-end mt-4"},De=N({name:"dictData"}),Re=N({...De,setup(Ee){const{query:S}=M(),v=L(!1),_=pe(),i=B({type:"",type_id:Number(S.id),name:"",status:""}),C=B({dict_type:[]}),{pager:f,getLists:b,resetPage:E,resetParams:K}=ge({fetchFun:be,params:i}),w=L([]),U=o=>{w.value=o.map(({id:e})=>e)},q=async()=>{var e,m;v.value=!0,await R();const o=C.dict_type.find(p=>p.id==i.type_id);(e=_.value)==null||e.setFormData({type_value:o==null?void 0:o.type,type_id:o.id}),(m=_.value)==null||m.open("add")},I=async o=>{var e,m;v.value=!0,await R(),(e=_.value)==null||e.open("edit"),(m=_.value)==null||m.setFormData(o)},x=async o=>{await fe.confirm("确定要删除?"),await ye({id:o}),b()},h=async()=>{const o=await ve({page_type:0});C.dict_type=o.lists};return b(),h(),(o,e)=>{const m=J,p=te,$=Y,g=X,j=ae,c=ne,O=W,F=oe,P=_e,d=ie,T=de,z=se,A=ce,k=Q("perms"),G=ue;return s(),V("div",Ce,[t(F,{class:"!border-none",shadow:"never"},{default:a(()=>[t(m,{class:"mb-4",content:"数据管理",onBack:e[0]||(e[0]=n=>o.$router.back())}),t(O,{ref:"formRef",class:"mb-[-16px]",model:l(i),inline:""},{default:a(()=>[t(g,{class:"w-[280px]",label:"字典名称"},{default:a(()=>[t($,{modelValue:l(i).type_id,"onUpdate:modelValue":e[1]||(e[1]=n=>l(i).type_id=n),onChange:l(b)},{default:a(()=>[(s(!0),V(Z,null,ee(l(C).dict_type,n=>(s(),r(p,{label:n.name,value:n.id,key:n.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onChange"])]),_:1}),t(g,{class:"w-[280px]",label:"数据名称"},{default:a(()=>[t(j,{modelValue:l(i).name,"onUpdate:modelValue":e[2]||(e[2]=n=>l(i).name=n),clearable:"",onKeyup:le(l(E),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),t(g,{class:"w-[280px]",label:"数据状态"},{default:a(()=>[t($,{modelValue:l(i).status,"onUpdate:modelValue":e[3]||(e[3]=n=>l(i).status=n)},{default:a(()=>[t(p,{label:"全部",value:""}),t(p,{label:"正常",value:1}),t(p,{label:"停用",value:0})]),_:1},8,["modelValue"])]),_:1}),t(g,null,{default:a(()=>[t(c,{type:"primary",onClick:l(E)},{default:a(()=>[...e[7]||(e[7]=[u("查询",-1)])]),_:1},8,["onClick"]),t(c,{onClick:l(K)},{default:a(()=>[...e[8]||(e[8]=[u("重置",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["model"])]),_:1}),t(F,{class:"!border-none mt-4",shadow:"never"},{default:a(()=>[D("div",null,[y((s(),r(c,{type:"primary",onClick:q},{icon:a(()=>[t(P,{name:"el-icon-Plus"})]),default:a(()=>[e[9]||(e[9]=u(" 添加数据 ",-1))]),_:1})),[[k,["setting.dict.dict_data/add"]]]),y((s(),r(c,{disabled:!l(w).length,type:"danger",onClick:e[4]||(e[4]=n=>x(l(w)))},{icon:a(()=>[t(P,{name:"el-icon-Delete"})]),default:a(()=>[e[10]||(e[10]=u(" 删除 ",-1))]),_:1},8,["disabled"])),[[k,["setting.dict.dict_data/delete"]]])]),y((s(),V("div",we,[D("div",null,[t(z,{data:l(f).lists,size:"large",onSelectionChange:U},{default:a(()=>[t(d,{type:"selection",width:"55"}),t(d,{label:"ID",prop:"id"}),t(d,{label:"数据名称",prop:"name","min-width":"120"}),t(d,{label:"数据值",prop:"value","min-width":"120"}),t(d,{label:"状态"},{default:a(({row:n})=>[n.status==1?(s(),r(T,{key:0},{default:a(()=>[...e[11]||(e[11]=[u("正常",-1)])]),_:1})):(s(),r(T,{key:1,type:"danger"},{default:a(()=>[...e[12]||(e[12]=[u("停用",-1)])]),_:1}))]),_:1}),t(d,{label:"备注",prop:"remark","min-width":"120","show-tooltip-when-overflow":""}),t(d,{label:"排序",prop:"sort"}),t(d,{label:"操作",width:"120",fixed:"right"},{default:a(({row:n})=>[y((s(),r(c,{link:"",type:"primary",onClick:H=>I(n)},{default:a(()=>[...e[13]||(e[13]=[u(" 编辑 ",-1)])]),_:1},8,["onClick"])),[[k,["setting.dict.dict_data/edit"]]]),y((s(),r(c,{link:"",type:"danger",onClick:H=>x(n.id)},{default:a(()=>[...e[14]||(e[14]=[u(" 删除 ",-1)])]),_:1},8,["onClick"])),[[k,["setting.dict.dict_data/delete"]]])]),_:1})]),_:1},8,["data"])]),D("div",Ve,[t(A,{modelValue:l(f),"onUpdate:modelValue":e[5]||(e[5]=n=>re(f)?f.value=n:null),onChange:l(b)},null,8,["modelValue","onChange"])])])),[[G,l(f).loading]])]),_:1}),l(v)?(s(),r(ke,{key:0,ref_key:"editRef",ref:_,onSuccess:l(b),onClose:e[6]||(e[6]=n=>v.value=!1)},null,8,["onSuccess"])):me("",!0)])}}});export{Re as default};
diff --git a/server/public/admin/assets/index-Vpi2nlpe.js b/server/public/admin/assets/index-BcD3Vwdi.js
similarity index 98%
rename from server/public/admin/assets/index-Vpi2nlpe.js
rename to server/public/admin/assets/index-BcD3Vwdi.js
index 3aa123652..97accc2c0 100644
--- a/server/public/admin/assets/index-Vpi2nlpe.js
+++ b/server/public/admin/assets/index-BcD3Vwdi.js
@@ -1 +1 @@
-import{o as U,R as $,ap as J,be as Q,q as r,r as b,v as t,D as s,b9 as X,b6 as Z,bp as ee,bm as le,bn as ae,b7 as te,b8 as se,K as ne,L as u,s as c,bg as oe,ac as D,O as C,T as i,P as B,bj as ie,u as N,bk as de,br as re,F as M,bi as ue,C as ce,M as h,ba as _e}from"./.pnpm-CC7b2w5D.js";import{_ as me}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{s as be,t as pe}from"./stats-Dc0L2-25.js";import{u as fe}from"./usePaging-Cer8s1LR.js";import{i as L,_ as ge}from"./index-fgtLtwvK.js";const ke={class:"auto-assign-log-page"},he={class:"toolbar mb-3"},ye={key:0,class:"toolbar-tip"},ve={class:"cell-sub"},we={class:"cell-sub"},Ve={key:0,class:"cell-sub"},Ce={key:2},Ne={class:"cell-sub"},xe={key:1},Re={class:"cell-sub"},Ee={key:1,class:"cell-sub"},De={class:"flex justify-end mt-4"},Le=U({name:"statsAutoAssignLog"}),Se=U({...Le,setup(Ae){const y=h(null),v=h(null),x=h(),_=h([]),w=h(!1),n=_e({start_date:"",end_date:"",start_time:"",end_time:"",action:"",is_rollback:"",keyword:""});$(y,a=>{n.start_date=(a==null?void 0:a[0])??"",n.end_date=(a==null?void 0:a[1])??""}),$(v,a=>{n.start_time=(a==null?void 0:a[0])??"",n.end_time=(a==null?void 0:a[1])??""});const{pager:f,getLists:R,resetPage:F}=fe({fetchFun:be,params:n}),m=()=>{var a,l;_.value=[],(l=(a=x.value)==null?void 0:a.clearSelection)==null||l.call(a),F()},P=()=>{y.value=null,v.value=null,n.start_date="",n.end_date="",n.start_time="",n.end_time="",n.action="",n.is_rollback="",n.keyword="",m()},T=a=>a==null?"—":`${a}%`,z=a=>Number(a.can_rollback)===1,I=a=>{_.value=a.filter(l=>Number(l.can_rollback)===1)},S=async a=>{var l,g;if(a.length!==0){await L.confirm(`确认回退选中的 ${a.length} 条自动分配?将把诊单医助撤回到自动分配前的原医助,并写入指派日志。`),w.value=!0;try{const o=await pe({ids:a}),p=Number((o==null?void 0:o.success)??0),k=Number((o==null?void 0:o.failed)??0);k>0&&Array.isArray(o==null?void 0:o.messages)&&o.messages.length?L.msgWarning(`回退成功 ${p} 条,跳过/失败 ${k} 条:${o.messages.slice(0,3).join(";")}`):L.msgSuccess(`回退成功 ${p} 条`),_.value=[],(g=(l=x.value)==null?void 0:l.clearSelection)==null||g.call(l),await R()}finally{w.value=!1}}},j=()=>{const a=_.value.map(l=>Number(l.id)).filter(l=>l>0);return S(a)},K=a=>{const l=Number((a==null?void 0:a.id)??0);if(!(l<=0))return S([l])};return J(()=>R()),(a,l)=>{const g=ee,o=Z,p=ae,k=le,q=te,V=ne,H=X,A=oe,d=de,E=re,O=ie,W=me,Y=Q("perms"),G=ue;return r(),b("div",ke,[t(A,{class:"!border-none",shadow:"never"},{default:s(()=>[t(H,{inline:!0,class:"log-filter-form"},{default:s(()=>[t(o,{label:"记录时间"},{default:s(()=>[t(g,{modelValue:v.value,"onUpdate:modelValue":l[0]||(l[0]=e=>v.value=e),type:"datetimerange","range-separator":"至","start-placeholder":"开始时间","end-placeholder":"结束时间","value-format":"YYYY-MM-DD HH:mm:ss",clearable:"",onChange:m},null,8,["modelValue"])]),_:1}),t(o,{label:"执行日期"},{default:s(()=>[t(g,{modelValue:y.value,"onUpdate:modelValue":l[1]||(l[1]=e=>y.value=e),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",clearable:"",onChange:m},null,8,["modelValue"])]),_:1}),t(o,{label:"结果"},{default:s(()=>[t(k,{modelValue:n.action,"onUpdate:modelValue":l[2]||(l[2]=e=>n.action=e),clearable:"",placeholder:"全部",class:"w-[120px]",onChange:m},{default:s(()=>[t(p,{label:"已分配",value:"1"}),t(p,{label:"未分配",value:"0"})]),_:1},8,["modelValue"])]),_:1}),t(o,{label:"回退"},{default:s(()=>[t(k,{modelValue:n.is_rollback,"onUpdate:modelValue":l[3]||(l[3]=e=>n.is_rollback=e),clearable:"",placeholder:"全部",class:"w-[120px]",onChange:m},{default:s(()=>[t(p,{label:"未回退",value:"0"}),t(p,{label:"已回退",value:"1"})]),_:1},8,["modelValue"])]),_:1}),t(o,{label:"关键词"},{default:s(()=>[t(q,{modelValue:n.keyword,"onUpdate:modelValue":l[4]||(l[4]=e=>n.keyword=e),placeholder:"患者/手机号/医助/诊单ID",clearable:"",class:"w-[220px]",onKeyup:se(m,["enter"]),onClear:m},null,8,["modelValue"])]),_:1}),t(o,null,{default:s(()=>[t(V,{type:"primary",onClick:m},{default:s(()=>[...l[6]||(l[6]=[u("查询",-1)])]),_:1}),t(V,{onClick:P},{default:s(()=>[...l[7]||(l[7]=[u("重置",-1)])]),_:1})]),_:1})]),_:1}),l[8]||(l[8]=c("div",{class:"log-hint"}," 由每日定时任务「待分配诊单自动指派」写入:按上月二诊复诊接诊率分档轮询分配(>70% 每人3条/日,60%~70% 每人2条/日,50%~60% 每人1条/日,<50% 不分)。「回退」可将已分配医助撤回到自动分配前的原医助(通常为一中心),并写入指派日志。 ",-1))]),_:1}),t(A,{class:"!border-none mt-3",shadow:"never"},{default:s(()=>[c("div",he,[D((r(),C(V,{type:"warning",disabled:_.value.length===0,loading:w.value,onClick:j},{default:s(()=>[u(" 回退选中("+i(_.value.length)+") ",1)]),_:1},8,["disabled","loading"])),[[Y,["stats.autoAssignLog/rollback"]]]),_.value.length>0?(r(),b("span",ye," 已选 "+i(_.value.length)+" 条可回退记录 ",1)):B("",!0)]),D((r(),C(O,{ref_key:"tableRef",ref:x,data:N(f).lists,size:"default",stripe:"","row-key":"id",onSelectionChange:I},{default:s(()=>[t(d,{type:"selection",width:"48",selectable:z,"reserve-selection":""}),t(d,{label:"记录时间",width:"160"},{default:s(({row:e})=>[u(i(e.create_time_text||"—"),1)]),_:1}),t(d,{label:"诊单",width:"90",prop:"diagnosis_id"}),t(d,{label:"患者","min-width":"110"},{default:s(({row:e})=>[c("div",null,i(e.patient_name||"—"),1),c("div",ve,i(e.patient_phone||""),1)]),_:1}),t(d,{label:"结果",width:"90",align:"center"},{default:s(({row:e})=>[t(E,{type:Number(e.action)===1?"success":"info",size:"small"},{default:s(()=>[u(i(e.action_text),1)]),_:2},1032,["type"])]),_:1}),t(d,{label:"回退状态",width:"140"},{default:s(({row:e})=>[Number(e.is_rollback)===1?(r(),b(M,{key:0},[t(E,{type:"warning",size:"small"},{default:s(()=>[...l[9]||(l[9]=[u("已回退",-1)])]),_:1}),c("div",we,i(e.rollback_time_text),1),e.rollback_admin_name?(r(),b("div",Ve,i(e.rollback_admin_name),1)):B("",!0)],64)):Number(e.can_rollback)===1?(r(),C(E,{key:1,type:"success",size:"small"},{default:s(()=>[...l[10]||(l[10]=[u(" 可回退 ",-1)])]),_:1})):(r(),b("span",Ce,"—"))]),_:1}),t(d,{label:"医助","min-width":"110"},{default:s(({row:e})=>[Number(e.assistant_id)>0?(r(),b(M,{key:0},[c("div",null,i(e.assistant_name||"#"+e.assistant_id),1),c("div",Ne,"上月二诊接诊率 "+i(T(e.visit2_rate)),1)],64)):(r(),b("span",xe,"—"))]),_:1}),t(d,{label:"档位",width:"100",align:"center"},{default:s(({row:e})=>[u(i(e.tier_text||"—"),1)]),_:1}),t(d,{label:"轮次",width:"70",align:"center"},{default:s(({row:e})=>[u(i(Number(e.round_no)>0?"第"+e.round_no+"轮":"—"),1)]),_:1}),t(d,{label:"原因","min-width":"280","show-overflow-tooltip":""},{default:s(({row:e})=>[u(i(e.reason),1)]),_:1}),t(d,{label:"统计月",width:"90",prop:"stat_month",align:"center"}),t(d,{label:"批次",width:"160"},{default:s(({row:e})=>[c("span",Re,i(e.batch_no),1)]),_:1}),t(d,{label:"操作",width:"90",fixed:"right",align:"center"},{default:s(({row:e})=>[Number(e.can_rollback)===1?D((r(),C(V,{key:0,link:"",type:"warning",loading:w.value,onClick:Ye=>K(e)},{default:s(()=>[...l[11]||(l[11]=[u(" 回退 ",-1)])]),_:1},8,["loading","onClick"])),[[Y,["stats.autoAssignLog/rollback"]]]):(r(),b("span",Ee,"—"))]),_:1})]),_:1},8,["data"])),[[G,N(f).loading]]),c("div",De,[t(W,{modelValue:N(f),"onUpdate:modelValue":l[5]||(l[5]=e=>ce(f)?f.value=e:null),onChange:N(R)},null,8,["modelValue","onChange"])])]),_:1})])}}}),Pe=ge(Se,[["__scopeId","data-v-0a150f73"]]);export{Pe as default};
+import{o as U,R as $,ap as J,be as Q,q as r,r as b,v as t,D as s,b9 as X,b6 as Z,bp as ee,bm as le,bn as ae,b7 as te,b8 as se,K as ne,L as u,s as c,bg as oe,ac as D,O as C,T as i,P as B,bj as ie,u as N,bk as de,br as re,F as M,bi as ue,C as ce,M as h,ba as _e}from"./.pnpm-CC7b2w5D.js";import{_ as me}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{s as be,t as pe}from"./stats-CaiSHqZh.js";import{u as fe}from"./usePaging-Cer8s1LR.js";import{i as L,_ as ge}from"./index-qHIBxlsP.js";const ke={class:"auto-assign-log-page"},he={class:"toolbar mb-3"},ye={key:0,class:"toolbar-tip"},ve={class:"cell-sub"},we={class:"cell-sub"},Ve={key:0,class:"cell-sub"},Ce={key:2},Ne={class:"cell-sub"},xe={key:1},Re={class:"cell-sub"},Ee={key:1,class:"cell-sub"},De={class:"flex justify-end mt-4"},Le=U({name:"statsAutoAssignLog"}),Se=U({...Le,setup(Ae){const y=h(null),v=h(null),x=h(),_=h([]),w=h(!1),n=_e({start_date:"",end_date:"",start_time:"",end_time:"",action:"",is_rollback:"",keyword:""});$(y,a=>{n.start_date=(a==null?void 0:a[0])??"",n.end_date=(a==null?void 0:a[1])??""}),$(v,a=>{n.start_time=(a==null?void 0:a[0])??"",n.end_time=(a==null?void 0:a[1])??""});const{pager:f,getLists:R,resetPage:F}=fe({fetchFun:be,params:n}),m=()=>{var a,l;_.value=[],(l=(a=x.value)==null?void 0:a.clearSelection)==null||l.call(a),F()},P=()=>{y.value=null,v.value=null,n.start_date="",n.end_date="",n.start_time="",n.end_time="",n.action="",n.is_rollback="",n.keyword="",m()},T=a=>a==null?"—":`${a}%`,z=a=>Number(a.can_rollback)===1,I=a=>{_.value=a.filter(l=>Number(l.can_rollback)===1)},S=async a=>{var l,g;if(a.length!==0){await L.confirm(`确认回退选中的 ${a.length} 条自动分配?将把诊单医助撤回到自动分配前的原医助,并写入指派日志。`),w.value=!0;try{const o=await pe({ids:a}),p=Number((o==null?void 0:o.success)??0),k=Number((o==null?void 0:o.failed)??0);k>0&&Array.isArray(o==null?void 0:o.messages)&&o.messages.length?L.msgWarning(`回退成功 ${p} 条,跳过/失败 ${k} 条:${o.messages.slice(0,3).join(";")}`):L.msgSuccess(`回退成功 ${p} 条`),_.value=[],(g=(l=x.value)==null?void 0:l.clearSelection)==null||g.call(l),await R()}finally{w.value=!1}}},j=()=>{const a=_.value.map(l=>Number(l.id)).filter(l=>l>0);return S(a)},K=a=>{const l=Number((a==null?void 0:a.id)??0);if(!(l<=0))return S([l])};return J(()=>R()),(a,l)=>{const g=ee,o=Z,p=ae,k=le,q=te,V=ne,H=X,A=oe,d=de,E=re,O=ie,W=me,Y=Q("perms"),G=ue;return r(),b("div",ke,[t(A,{class:"!border-none",shadow:"never"},{default:s(()=>[t(H,{inline:!0,class:"log-filter-form"},{default:s(()=>[t(o,{label:"记录时间"},{default:s(()=>[t(g,{modelValue:v.value,"onUpdate:modelValue":l[0]||(l[0]=e=>v.value=e),type:"datetimerange","range-separator":"至","start-placeholder":"开始时间","end-placeholder":"结束时间","value-format":"YYYY-MM-DD HH:mm:ss",clearable:"",onChange:m},null,8,["modelValue"])]),_:1}),t(o,{label:"执行日期"},{default:s(()=>[t(g,{modelValue:y.value,"onUpdate:modelValue":l[1]||(l[1]=e=>y.value=e),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",clearable:"",onChange:m},null,8,["modelValue"])]),_:1}),t(o,{label:"结果"},{default:s(()=>[t(k,{modelValue:n.action,"onUpdate:modelValue":l[2]||(l[2]=e=>n.action=e),clearable:"",placeholder:"全部",class:"w-[120px]",onChange:m},{default:s(()=>[t(p,{label:"已分配",value:"1"}),t(p,{label:"未分配",value:"0"})]),_:1},8,["modelValue"])]),_:1}),t(o,{label:"回退"},{default:s(()=>[t(k,{modelValue:n.is_rollback,"onUpdate:modelValue":l[3]||(l[3]=e=>n.is_rollback=e),clearable:"",placeholder:"全部",class:"w-[120px]",onChange:m},{default:s(()=>[t(p,{label:"未回退",value:"0"}),t(p,{label:"已回退",value:"1"})]),_:1},8,["modelValue"])]),_:1}),t(o,{label:"关键词"},{default:s(()=>[t(q,{modelValue:n.keyword,"onUpdate:modelValue":l[4]||(l[4]=e=>n.keyword=e),placeholder:"患者/手机号/医助/诊单ID",clearable:"",class:"w-[220px]",onKeyup:se(m,["enter"]),onClear:m},null,8,["modelValue"])]),_:1}),t(o,null,{default:s(()=>[t(V,{type:"primary",onClick:m},{default:s(()=>[...l[6]||(l[6]=[u("查询",-1)])]),_:1}),t(V,{onClick:P},{default:s(()=>[...l[7]||(l[7]=[u("重置",-1)])]),_:1})]),_:1})]),_:1}),l[8]||(l[8]=c("div",{class:"log-hint"}," 由每日定时任务「待分配诊单自动指派」写入:按上月二诊复诊接诊率分档轮询分配(>70% 每人3条/日,60%~70% 每人2条/日,50%~60% 每人1条/日,<50% 不分)。「回退」可将已分配医助撤回到自动分配前的原医助(通常为一中心),并写入指派日志。 ",-1))]),_:1}),t(A,{class:"!border-none mt-3",shadow:"never"},{default:s(()=>[c("div",he,[D((r(),C(V,{type:"warning",disabled:_.value.length===0,loading:w.value,onClick:j},{default:s(()=>[u(" 回退选中("+i(_.value.length)+") ",1)]),_:1},8,["disabled","loading"])),[[Y,["stats.autoAssignLog/rollback"]]]),_.value.length>0?(r(),b("span",ye," 已选 "+i(_.value.length)+" 条可回退记录 ",1)):B("",!0)]),D((r(),C(O,{ref_key:"tableRef",ref:x,data:N(f).lists,size:"default",stripe:"","row-key":"id",onSelectionChange:I},{default:s(()=>[t(d,{type:"selection",width:"48",selectable:z,"reserve-selection":""}),t(d,{label:"记录时间",width:"160"},{default:s(({row:e})=>[u(i(e.create_time_text||"—"),1)]),_:1}),t(d,{label:"诊单",width:"90",prop:"diagnosis_id"}),t(d,{label:"患者","min-width":"110"},{default:s(({row:e})=>[c("div",null,i(e.patient_name||"—"),1),c("div",ve,i(e.patient_phone||""),1)]),_:1}),t(d,{label:"结果",width:"90",align:"center"},{default:s(({row:e})=>[t(E,{type:Number(e.action)===1?"success":"info",size:"small"},{default:s(()=>[u(i(e.action_text),1)]),_:2},1032,["type"])]),_:1}),t(d,{label:"回退状态",width:"140"},{default:s(({row:e})=>[Number(e.is_rollback)===1?(r(),b(M,{key:0},[t(E,{type:"warning",size:"small"},{default:s(()=>[...l[9]||(l[9]=[u("已回退",-1)])]),_:1}),c("div",we,i(e.rollback_time_text),1),e.rollback_admin_name?(r(),b("div",Ve,i(e.rollback_admin_name),1)):B("",!0)],64)):Number(e.can_rollback)===1?(r(),C(E,{key:1,type:"success",size:"small"},{default:s(()=>[...l[10]||(l[10]=[u(" 可回退 ",-1)])]),_:1})):(r(),b("span",Ce,"—"))]),_:1}),t(d,{label:"医助","min-width":"110"},{default:s(({row:e})=>[Number(e.assistant_id)>0?(r(),b(M,{key:0},[c("div",null,i(e.assistant_name||"#"+e.assistant_id),1),c("div",Ne,"上月二诊接诊率 "+i(T(e.visit2_rate)),1)],64)):(r(),b("span",xe,"—"))]),_:1}),t(d,{label:"档位",width:"100",align:"center"},{default:s(({row:e})=>[u(i(e.tier_text||"—"),1)]),_:1}),t(d,{label:"轮次",width:"70",align:"center"},{default:s(({row:e})=>[u(i(Number(e.round_no)>0?"第"+e.round_no+"轮":"—"),1)]),_:1}),t(d,{label:"原因","min-width":"280","show-overflow-tooltip":""},{default:s(({row:e})=>[u(i(e.reason),1)]),_:1}),t(d,{label:"统计月",width:"90",prop:"stat_month",align:"center"}),t(d,{label:"批次",width:"160"},{default:s(({row:e})=>[c("span",Re,i(e.batch_no),1)]),_:1}),t(d,{label:"操作",width:"90",fixed:"right",align:"center"},{default:s(({row:e})=>[Number(e.can_rollback)===1?D((r(),C(V,{key:0,link:"",type:"warning",loading:w.value,onClick:Ye=>K(e)},{default:s(()=>[...l[11]||(l[11]=[u(" 回退 ",-1)])]),_:1},8,["loading","onClick"])),[[Y,["stats.autoAssignLog/rollback"]]]):(r(),b("span",Ee,"—"))]),_:1})]),_:1},8,["data"])),[[G,N(f).loading]]),c("div",De,[t(W,{modelValue:N(f),"onUpdate:modelValue":l[5]||(l[5]=e=>ce(f)?f.value=e:null),onChange:N(R)},null,8,["modelValue","onChange"])])]),_:1})])}}}),Pe=ge(Se,[["__scopeId","data-v-0a150f73"]]);export{Pe as default};
diff --git a/server/public/admin/assets/index-BlbBIH6p.css b/server/public/admin/assets/index-BlbBIH6p.css
new file mode 100644
index 000000000..58dc9a553
--- /dev/null
+++ b/server/public/admin/assets/index-BlbBIH6p.css
@@ -0,0 +1 @@
+.conversion-page[data-v-e3fb856c]{display:grid;gap:14px;width:100%;max-width:100%;min-width:0;min-height:640px;padding:16px;overflow-x:hidden;box-sizing:border-box;color:#172033;background:#f4f6f8}.page-heading[data-v-e3fb856c],.filter-strip[data-v-e3fb856c],.panel[data-v-e3fb856c],.metric-card[data-v-e3fb856c]{min-width:0;box-sizing:border-box;border:1px solid #dfe5ec;background:#fff}.page-heading[data-v-e3fb856c]{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 18px;border-radius:10px}.page-heading h1[data-v-e3fb856c]{margin:0;font-size:20px;font-weight:750}.page-heading p[data-v-e3fb856c]{margin:5px 0 0;color:#8590a2;font-size:12px}.heading-meta[data-v-e3fb856c]{display:flex;align-items:center;gap:12px;color:#8994a5;font-size:12px}.scope-chip[data-v-e3fb856c]{display:inline-flex;align-items:center;gap:5px;color:#0d8077}.filter-strip[data-v-e3fb856c]{display:flex;align-items:center;gap:22px;padding:12px 16px;border-radius:9px}.filter-item[data-v-e3fb856c]{display:flex;align-items:center;gap:8px}.filter-label[data-v-e3fb856c],.range-text[data-v-e3fb856c]{color:#748094;font-size:12px;white-space:nowrap}.range-text[data-v-e3fb856c]{margin-left:auto}.date-range-picker[data-v-e3fb856c]{width:260px}.employee-select[data-v-e3fb856c]{width:190px}.dept-select[data-v-e3fb856c]{width:220px}.channel-select[data-v-e3fb856c]{width:180px}.channel-option[data-v-e3fb856c]{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%}.channel-option span[data-v-e3fb856c]:last-child{color:#98a2b3;font-size:12px}.metric-grid[data-v-e3fb856c]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.metric-card[data-v-e3fb856c]{min-height:100px;padding:15px 17px;border-radius:10px}.metric-card span[data-v-e3fb856c],.metric-card small[data-v-e3fb856c]{display:block;color:#748094;font-size:12px}.metric-card strong[data-v-e3fb856c]{display:block;margin:9px 0 7px;color:#111b2f;font-size:25px;line-height:1;font-variant-numeric:tabular-nums}.metric-card small[data-v-e3fb856c]{color:#a0a9b6;font-size:11px}.ranking-grid[data-v-e3fb856c]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.panel[data-v-e3fb856c]{min-width:0;max-width:100%;padding:16px;border-radius:10px;box-sizing:border-box}.panel-heading[data-v-e3fb856c]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.panel-heading h2[data-v-e3fb856c]{margin:0;font-size:15px;font-weight:700}.panel-heading p[data-v-e3fb856c]{margin:4px 0 0;color:#929dac;font-size:11px}.panel-heading>span[data-v-e3fb856c]{color:#929dac;font-size:11px;white-space:nowrap}.bar-list[data-v-e3fb856c]{display:grid;gap:13px;max-height:340px;overflow-y:auto;padding-right:4px}.bar-row[data-v-e3fb856c]{display:grid;grid-template-columns:130px minmax(80px,1fr) 116px;align-items:center;gap:10px}.bar-name[data-v-e3fb856c]{overflow:hidden;color:#66748a;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.bar-name b[data-v-e3fb856c]{display:inline-block;width:20px;margin-right:7px;color:#98a2b3;font-size:11px;font-weight:650;text-align:center}.bar-row>strong[data-v-e3fb856c]{display:flex;align-items:baseline;justify-content:flex-end;gap:7px;text-align:right;font-size:12px;font-variant-numeric:tabular-nums}.bar-row>strong small[data-v-e3fb856c]{color:#8a95a5;font-size:10px;font-weight:500}.bar-track[data-v-e3fb856c]{height:18px;overflow:hidden;border-radius:5px;background:#edf1f5}.bar-track i[data-v-e3fb856c]{display:block;height:100%;border-radius:5px;transition:width .35s ease}.bar-track i.is-teal[data-v-e3fb856c]{background:#15998d}.bar-track i.is-blue[data-v-e3fb856c]{background:#307bdf}.detail-panel[data-v-e3fb856c]{padding-bottom:10px;overflow:hidden}.detail-table[data-v-e3fb856c]{width:100%;max-width:100%;min-width:0}.detail-table[data-v-e3fb856c] .el-table__inner-wrapper,.detail-table[data-v-e3fb856c] .el-scrollbar{max-width:100%}.detail-table[data-v-e3fb856c] th.el-table__cell{color:#66748a;background:#f7f9fb;font-size:12px}.detail-table[data-v-e3fb856c] td.el-table__cell{color:#273347;font-size:12px}.detail-table[data-v-e3fb856c] .el-table__row--level-0>td.el-table__cell{background:#edf7f5;font-weight:650}.detail-table strong.is-parent[data-v-e3fb856c]{color:#172033;font-weight:700}.detail-table strong.is-member[data-v-e3fb856c]{color:#314158;font-weight:600}.detail-table .role-tag[data-v-e3fb856c]{margin-left:7px;vertical-align:middle}.target-panel[data-v-e3fb856c]{padding-bottom:18px}.target-layout[data-v-e3fb856c]{display:grid;grid-template-columns:minmax(390px,.82fr) minmax(500px,1.18fr);gap:22px}.target-progress-list[data-v-e3fb856c]{padding-right:20px;border-right:1px solid #e4e9ef}.target-summary[data-v-e3fb856c]{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px}.target-summary div[data-v-e3fb856c]{display:grid;gap:5px}.target-summary span[data-v-e3fb856c]{color:#8590a2;font-size:11px}.target-summary strong[data-v-e3fb856c]{font-size:18px;font-variant-numeric:tabular-nums}.target-summary strong.is-teal[data-v-e3fb856c]{color:#0f9185}.progress-block+.progress-block[data-v-e3fb856c]{margin-top:18px}.progress-copy[data-v-e3fb856c]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-size:12px}.progress-copy b[data-v-e3fb856c]{color:#263246;font-size:13px}.progress-block small[data-v-e3fb856c]{display:block;margin-top:7px;color:#8a95a5;font-size:11px}.target-empty-note[data-v-e3fb856c]{margin-top:16px;padding:9px 11px;border-radius:7px;color:#a36b1e;background:#fff7e8;font-size:11px}.trend-title[data-v-e3fb856c]{display:flex;align-items:center;justify-content:space-between;color:#2e3a4d;font-size:12px;font-weight:600}.trend-title>div[data-v-e3fb856c]{display:flex;align-items:center;gap:7px;color:#7f8a9b;font-size:10px;font-weight:400}.legend-line[data-v-e3fb856c]{width:18px;border-top:2px solid}.legend-line.is-actual[data-v-e3fb856c]{border-color:#0f9185}.legend-line.is-target[data-v-e3fb856c]{border-color:#2f78df;border-top-style:dashed}.target-chart[data-v-e3fb856c]{width:100%;height:260px}@media (max-width: 1180px){.filter-strip[data-v-e3fb856c]{align-items:flex-start;flex-wrap:wrap}.range-text[data-v-e3fb856c]{margin-left:0}.target-layout[data-v-e3fb856c]{grid-template-columns:1fr}.target-progress-list[data-v-e3fb856c]{padding-right:0;padding-bottom:18px;border-right:0;border-bottom:1px solid #e4e9ef}}@media (max-width: 820px){.conversion-page[data-v-e3fb856c]{padding:10px}.page-heading[data-v-e3fb856c],.heading-meta[data-v-e3fb856c]{align-items:flex-start;flex-direction:column}.metric-grid[data-v-e3fb856c],.ranking-grid[data-v-e3fb856c]{grid-template-columns:1fr}.filter-item[data-v-e3fb856c],.filter-item--time[data-v-e3fb856c]{width:100%;align-items:flex-start;flex-direction:column}.employee-select[data-v-e3fb856c],.dept-select[data-v-e3fb856c],.channel-select[data-v-e3fb856c]{width:100%}.bar-row[data-v-e3fb856c]{grid-template-columns:100px minmax(70px,1fr) 96px}.target-summary[data-v-e3fb856c]{grid-template-columns:1fr}}
diff --git a/server/public/admin/assets/index-CagdbjPb.js b/server/public/admin/assets/index-Bn01GYVg.js
similarity index 96%
rename from server/public/admin/assets/index-CagdbjPb.js
rename to server/public/admin/assets/index-Bn01GYVg.js
index 56ef8964f..5696b93c8 100644
--- a/server/public/admin/assets/index-CagdbjPb.js
+++ b/server/public/admin/assets/index-Bn01GYVg.js
@@ -1 +1 @@
-import{_ as F}from"./index-2TNBQW0t.js";import{o as I,be as L,q as t,r as l,s as n,ac as j,O as u,D as a,L as s,K as q,F as C,G,P as p,bj as K,v as m,bk as M,aa as O,u as f,bf as R,br as $,I as z,T as J,bg as Q,M as P,l as V}from"./.pnpm-CC7b2w5D.js";import{b as X,c as Y}from"./pay-DOpCQT5Z.js";import"./index-fgtLtwvK.js";const Z={key:0,class:"text-lg mb-[24px]"},ee={key:1,class:"text-lg mb-[24px]"},te={key:2,class:"text-lg mb-[24px]"},ae={key:3,class:"text-lg mb-[24px]"},le={key:4,class:"text-lg mb-[24px]"},se={key:1},oe={key:1},me=I({__name:"index",setup(ne){const i=P({}),r=P(!1);let v={};const b=async()=>{i.value=await X(),v=V.cloneDeep(i.value)},w=()=>{r.value=!0},E=(x,e)=>{i.value[e].forEach(_=>{_.is_default=0}),i.value[e][x].is_default=1},h=()=>{i.value=V.cloneDeep(v),r.value=!1},D=async()=>{await Y(i.value),r.value=!1,b()};return b(),(x,e)=>{const _=q,W=O,y=M,B=R,T=$,N=z,S=K,U=Q,H=F,A=L("perms");return t(),l("div",null,[n("div",null,[j((t(),u(_,{type:"primary",onClick:w},{default:a(()=>[...e[0]||(e[0]=[s(" 设置支付方式 ",-1)])]),_:1})),[[A,["setting.pay.pay_way/setPayWay"]]])]),(t(!0),l(C,null,G(f(i),(g,d)=>(t(),u(U,{shadow:"never",class:"mt-4 !border-none",key:d},{default:a(()=>[n("div",null,[d==1?(t(),l("div",Z,[...e[1]||(e[1]=[s(" 微信小程序 ",-1),n("span",{class:"form-tips ml-[10px]"},"在微信小程序中付款的场景",-1)])])):p("",!0),d==2?(t(),l("div",ee,[...e[2]||(e[2]=[s(" 微信公众号 ",-1),n("span",{class:"form-tips ml-[10px]"}," 在微信公众号H5页面中付款的场景,公众号类型一般为服务号 ",-1)])])):p("",!0),d==3?(t(),l("div",te,[...e[3]||(e[3]=[s(" H5支付 ",-1),n("span",{class:"form-tips ml-[10px]"},"在浏览器H5页面中付款的场景",-1)])])):p("",!0),d==4?(t(),l("div",ae,[...e[4]||(e[4]=[s(" PC支付 ",-1),n("span",{class:"form-tips ml-[10px]"},"在浏览器PC页面中付款的场景",-1)])])):p("",!0),d==5?(t(),l("div",le,[...e[5]||(e[5]=[s(" APP支付 ",-1),n("span",{class:"form-tips ml-[10px]"},"在APP付款的场景",-1)])])):p("",!0),g.length?(t(),u(S,{key:5,data:g,style:{width:"100%"}},{default:a(()=>[m(y,{label:"图标","min-width":"150"},{default:a(({row:o})=>[m(W,{src:o.icon,alt:"图标",style:{width:"34px",height:"34px"}},null,8,["src"])]),_:1}),m(y,{prop:"pay_way_name",label:"支付方式","min-width":"150"}),m(y,{label:"默认支付","min-width":"150"},{default:a(({row:o,$index:c})=>[n("div",null,[f(r)?(t(),u(B,{key:0,modelValue:o.is_default,"onUpdate:modelValue":k=>o.is_default=k,label:1,onChange:k=>E(c,d)},{default:a(()=>[...e[6]||(e[6]=[s(" 设为默认 ",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onChange"])):(t(),l(C,{key:1},[o.is_default==1?(t(),u(T,{key:0},{default:a(()=>[...e[7]||(e[7]=[s("默认",-1)])]),_:1})):(t(),l("span",se,"-"))],64))])]),_:2},1024),m(y,{label:"开启状态","min-width":"150"},{default:a(({row:o})=>[f(r)?(t(),u(N,{key:0,modelValue:o.status,"onUpdate:modelValue":c=>o.status=c,"active-value":1,"inactive-value":0},null,8,["modelValue","onUpdate:modelValue"])):(t(),l("span",oe,J(o.status==1?"开启":"关闭"),1))]),_:1})]),_:2},1032,["data"])):p("",!0)])]),_:2},1024))),128)),f(r)?(t(),u(H,{key:0},{default:a(()=>[m(_,{onClick:h},{default:a(()=>[...e[8]||(e[8]=[s("取消",-1)])]),_:1}),m(_,{type:"primary",onClick:D},{default:a(()=>[...e[9]||(e[9]=[s("保存",-1)])]),_:1})]),_:1})):p("",!0)])}}});export{me as default};
+import{_ as F}from"./index-BOzvjufT.js";import{o as I,be as L,q as t,r as l,s as n,ac as j,O as u,D as a,L as s,K as q,F as C,G,P as p,bj as K,v as m,bk as M,aa as O,u as f,bf as R,br as $,I as z,T as J,bg as Q,M as P,l as V}from"./.pnpm-CC7b2w5D.js";import{b as X,c as Y}from"./pay-DGZ9a3wU.js";import"./index-qHIBxlsP.js";const Z={key:0,class:"text-lg mb-[24px]"},ee={key:1,class:"text-lg mb-[24px]"},te={key:2,class:"text-lg mb-[24px]"},ae={key:3,class:"text-lg mb-[24px]"},le={key:4,class:"text-lg mb-[24px]"},se={key:1},oe={key:1},me=I({__name:"index",setup(ne){const i=P({}),r=P(!1);let v={};const b=async()=>{i.value=await X(),v=V.cloneDeep(i.value)},w=()=>{r.value=!0},E=(x,e)=>{i.value[e].forEach(_=>{_.is_default=0}),i.value[e][x].is_default=1},h=()=>{i.value=V.cloneDeep(v),r.value=!1},D=async()=>{await Y(i.value),r.value=!1,b()};return b(),(x,e)=>{const _=q,W=O,y=M,B=R,T=$,N=z,S=K,U=Q,H=F,A=L("perms");return t(),l("div",null,[n("div",null,[j((t(),u(_,{type:"primary",onClick:w},{default:a(()=>[...e[0]||(e[0]=[s(" 设置支付方式 ",-1)])]),_:1})),[[A,["setting.pay.pay_way/setPayWay"]]])]),(t(!0),l(C,null,G(f(i),(g,d)=>(t(),u(U,{shadow:"never",class:"mt-4 !border-none",key:d},{default:a(()=>[n("div",null,[d==1?(t(),l("div",Z,[...e[1]||(e[1]=[s(" 微信小程序 ",-1),n("span",{class:"form-tips ml-[10px]"},"在微信小程序中付款的场景",-1)])])):p("",!0),d==2?(t(),l("div",ee,[...e[2]||(e[2]=[s(" 微信公众号 ",-1),n("span",{class:"form-tips ml-[10px]"}," 在微信公众号H5页面中付款的场景,公众号类型一般为服务号 ",-1)])])):p("",!0),d==3?(t(),l("div",te,[...e[3]||(e[3]=[s(" H5支付 ",-1),n("span",{class:"form-tips ml-[10px]"},"在浏览器H5页面中付款的场景",-1)])])):p("",!0),d==4?(t(),l("div",ae,[...e[4]||(e[4]=[s(" PC支付 ",-1),n("span",{class:"form-tips ml-[10px]"},"在浏览器PC页面中付款的场景",-1)])])):p("",!0),d==5?(t(),l("div",le,[...e[5]||(e[5]=[s(" APP支付 ",-1),n("span",{class:"form-tips ml-[10px]"},"在APP付款的场景",-1)])])):p("",!0),g.length?(t(),u(S,{key:5,data:g,style:{width:"100%"}},{default:a(()=>[m(y,{label:"图标","min-width":"150"},{default:a(({row:o})=>[m(W,{src:o.icon,alt:"图标",style:{width:"34px",height:"34px"}},null,8,["src"])]),_:1}),m(y,{prop:"pay_way_name",label:"支付方式","min-width":"150"}),m(y,{label:"默认支付","min-width":"150"},{default:a(({row:o,$index:c})=>[n("div",null,[f(r)?(t(),u(B,{key:0,modelValue:o.is_default,"onUpdate:modelValue":k=>o.is_default=k,label:1,onChange:k=>E(c,d)},{default:a(()=>[...e[6]||(e[6]=[s(" 设为默认 ",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onChange"])):(t(),l(C,{key:1},[o.is_default==1?(t(),u(T,{key:0},{default:a(()=>[...e[7]||(e[7]=[s("默认",-1)])]),_:1})):(t(),l("span",se,"-"))],64))])]),_:2},1024),m(y,{label:"开启状态","min-width":"150"},{default:a(({row:o})=>[f(r)?(t(),u(N,{key:0,modelValue:o.status,"onUpdate:modelValue":c=>o.status=c,"active-value":1,"inactive-value":0},null,8,["modelValue","onUpdate:modelValue"])):(t(),l("span",oe,J(o.status==1?"开启":"关闭"),1))]),_:1})]),_:2},1032,["data"])):p("",!0)])]),_:2},1024))),128)),f(r)?(t(),u(H,{key:0},{default:a(()=>[m(_,{onClick:h},{default:a(()=>[...e[8]||(e[8]=[s("取消",-1)])]),_:1}),m(_,{type:"primary",onClick:D},{default:a(()=>[...e[9]||(e[9]=[s("保存",-1)])]),_:1})]),_:1})):p("",!0)])}}});export{me as default};
diff --git a/server/public/admin/assets/index-C_xyxO9Q.js b/server/public/admin/assets/index-Br2p9CVP.js
similarity index 99%
rename from server/public/admin/assets/index-C_xyxO9Q.js
rename to server/public/admin/assets/index-Br2p9CVP.js
index 4e88722ae..0a8ed35d7 100644
--- a/server/public/admin/assets/index-C_xyxO9Q.js
+++ b/server/public/admin/assets/index-Br2p9CVP.js
@@ -1,4 +1,4 @@
-import{o as ts,R as ut,q as b,r as V,F as j,v as l,B as ss,u as a,C as N,bM as as,D as n,s as o,K as ls,L as p,b9 as os,c7 as ns,c8 as is,b6 as rs,T as m,b7 as ds,br as us,P as h,dj as cs,cG as ps,c9 as _s,J as ms,G as se,ae as ct,O as w,bm as gs,bn as fs,bc as bs,bf as vs,I as ys,aw as ae,w as xs,bz as ks,bH as Vs,a1 as hs,bt as ws,b8 as Ss,bA as Cs,ac as Us,bi as Rs,bk as Ds,bj as Is,bs as $s,M as v,p as O,ba as pt,cd as Ps,cc as _t}from"./.pnpm-CC7b2w5D.js";import{M as mt}from"./index-BvnQnEcc.js";import{u as Ns,e as Es,i as k,m as U,_ as Os}from"./index-fgtLtwvK.js";import{f as Ts}from"./diabetes-discovery-display-B_wmGXQJ.js";import{a8 as zs,o as me,a9 as gt,t as Ls,u as Hs,au as Ws}from"./tcm-DvVI17Vq.js";import{m as Ms}from"./medicine-BgD3hAdD.js";import{P as As}from"./index-DMFhGwe-.js";const js={key:0,class:"prescription-edit"},Fs={class:"info-section"},Bs={class:"info-section"},Gs={class:"info-section info-section--rp"},Ks={class:"rp-toolbar",role:"region","aria-label":"中药处方"},qs={class:"rp-toolbar__lead"},Js={class:"rp-toolbar__text"},Ys={class:"rp-toolbar__meta"},Xs={key:0,class:"rp-toolbar__lock-tip"},Qs={class:"rp-toolbar__actions",role:"toolbar","aria-label":"处方药材快捷操作"},Zs={class:"mb-3"},ea={class:"herb-formula-block"},ta={class:"herb-formula-block__head"},sa={class:"herbs-editor-grid"},aa={class:"herb-editor-card__title"},la={key:0,class:"herb-editor-card__dup-hint text-amber-600 text-xs mb-1"},oa={class:"herb-editor-card__row"},na={class:"herb-formula-block mt-4"},ia={class:"herb-formula-block__head"},ra={class:"herbs-editor-grid"},da={key:0,class:"herb-editor-card__dup-hint text-amber-600 text-xs mb-1"},ua={class:"herb-editor-card__row"},ca={key:0,class:"text-sm text-gray-400 py-2"},pa={class:"info-section"},_a={key:3,class:"ml-2"},ma={class:"signature-pad-wrap"},ga={class:"signature-actions"},fa={key:1,class:"rx-wrap"},ba={class:"rx-toolbar"},va={key:0,class:"rx-status rx-status-danger"},ya={key:1,class:"rx-status rx-status-danger"},xa={key:0,class:"mt-1"},ka={class:"prescription-preview-content"},Va={class:"case-record-a3-inner"},ha={class:"case-record-a3-title"},wa={class:"case-record-a3-body"},Sa={class:"cr-section"},Ca={class:"cr-grid"},Ua={class:"cr-item"},Ra={class:"cr-item"},Da={class:"cr-item"},Ia={class:"cr-item"},$a={class:"cr-item"},Pa={class:"cr-item"},Na={class:"cr-item"},Ea={class:"cr-item"},Oa={class:"cr-item"},Ta={class:"cr-item"},za={class:"cr-section"},La={class:"cr-grid"},Ha={class:"cr-item"},Wa={class:"cr-item"},Ma={class:"cr-section"},Aa={class:"cr-grid"},ja={class:"cr-item"},Fa={class:"cr-item"},Ba={class:"cr-item"},Ga={class:"cr-item"},Ka={class:"cr-item"},qa={class:"cr-item cr-full"},Ja={class:"cr-item cr-full"},Ya={class:"cr-section"},Xa={class:"cr-grid"},Qa={class:"cr-item cr-full"},Za={class:"cr-item cr-full"},el={class:"cr-item cr-full"},tl={class:"cr-item cr-full"},sl={class:"cr-item cr-full"},al={class:"cr-item cr-full"},ll={class:"cr-item cr-full"},ol={class:"cr-item cr-full"},nl={class:"cr-item cr-full"},il={class:"cr-item cr-full"},rl={class:"cr-item cr-full"},dl={class:"cr-item cr-full"},ul={class:"cr-item cr-full"},cl={class:"cr-item cr-full"},pl={class:"cr-item cr-full"},_l={class:"cr-section"},ml={class:"cr-item cr-full"},gl={class:"cr-section"},fl={class:"cr-grid"},bl={class:"cr-item"},vl={class:"cr-item"},yl={class:"cr-item"},xl={class:"cr-item"},kl={class:"cr-item"},Vl={class:"cr-section"},hl={key:0,class:"cr-grid"},wl={class:"cr-item cr-full"},Sl={class:"cr-images"},Cl=["src"],Ul={class:"cr-grid"},Rl={class:"cr-item cr-full"},Dl={key:2,class:"rx-audit"},Il={key:0},$l={key:0,class:"ml-2 text-gray-400"},Pl={key:1,class:"mt-1"},Nl={class:"flex justify-end gap-2 mt-4"},El={class:"inline-block"},Ol={class:"flex justify-end gap-2"},Tl={class:"mb-4 flex gap-3"},zl={class:"mb-3 flex flex-wrap items-center gap-x-4 gap-y-2"},Ll={key:0},Hl={key:1,class:"text-gray-400"},Wl={class:"flex justify-end mt-4"},Ml={class:"mt-3 flex flex-wrap items-center gap-x-4 gap-y-2"},le=560,oe=168,Al=ts({__name:"index",emits:["success"],setup(jl,{expose:ft,emit:bt}){function F(s){return s==="辅方"?"辅方":"主方"}function $e(s){const e={name:String((s==null?void 0:s.name)??"").trim(),dosage:Number(s==null?void 0:s.dosage)||0,formula_type:F(s==null?void 0:s.formula_type)},i=Number((s==null?void 0:s.medicine_id)??(s==null?void 0:s.id)??0);return Number.isInteger(i)&&i>0&&(e.medicine_id=i),((s==null?void 0:s.locked)===!0||(s==null?void 0:s.locked)===1)&&(e.locked=!0),e}function ne(s="浓缩水丸"){return s==="饮片"?{dosage_amount:50,dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,times_per_day:3,usage_days:7}:s==="浓缩水丸"?{dosage_amount:5,dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,times_per_day:3,usage_days:7}:{dosage_amount:1,dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,times_per_day:3,usage_days:7}}const Pe=bt,z=v(!1),vt=v(),ge=v(!1),fe=v(!1),Ne=v(null),Ee=v(),L=v(),ie=v(null),c=v(null),Oe=v("internal"),be=v(!1),re=O(()=>{const s=c.value;return s?Number(s.audit_status)===1&&Number(s.void_status)!==1:!1}),Te=O(()=>{const s=c.value;return s?Number(s.has_prescription_order)===1:!1}),yt=O(()=>re.value?"查看处方":"中医处方单");function xt(s){if(!s)return"";const e=new Date(s*1e3);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}const ze=O(()=>t.herbs.map((s,e)=>({herb:s,index:e})).filter(({herb:s})=>F(s.formula_type)==="主方")),X=O(()=>t.herbs.map((s,e)=>({herb:s,index:e})).filter(({herb:s})=>F(s.formula_type)==="辅方")),kt=O(()=>ze.value.length),Vt=O(()=>X.value.length),$=O(()=>t.herbs.some(s=>s.locked===!0)),ve=O(()=>{var e;const s=Number((e=we.userInfo)==null?void 0:e.id);return s>0?s:0}),H=v(!1),ye=v(!1),xe=v([]),Q=v(""),Z=v(""),B=v("replace"),G=v(!1),K=v(1),de=v(15),ke=v(0),q=v(!1),J=v(""),ue=v("replace"),Ve=v(!1),ht=/^(用法|用量|医嘱|忌口|水煎服|空腹|饭后|温水|内服|外用|备注|顿服|分服|ml|毫升|[×xX]\s*\d)/;function wt(s){let e=s.replace(/\r\n/g,`
+import{o as ts,R as ut,q as b,r as V,F as j,v as l,B as ss,u as a,C as N,bM as as,D as n,s as o,K as ls,L as p,b9 as os,c7 as ns,c8 as is,b6 as rs,T as m,b7 as ds,br as us,P as h,dj as cs,cG as ps,c9 as _s,J as ms,G as se,ae as ct,O as w,bm as gs,bn as fs,bc as bs,bf as vs,I as ys,aw as ae,w as xs,bz as ks,bH as Vs,a1 as hs,bt as ws,b8 as Ss,bA as Cs,ac as Us,bi as Rs,bk as Ds,bj as Is,bs as $s,M as v,p as O,ba as pt,cd as Ps,cc as _t}from"./.pnpm-CC7b2w5D.js";import{M as mt}from"./index-ByWDxLDH.js";import{u as Ns,e as Es,i as k,m as U,_ as Os}from"./index-qHIBxlsP.js";import{f as Ts}from"./diabetes-discovery-display-B_wmGXQJ.js";import{a8 as zs,o as me,a9 as gt,t as Ls,u as Hs,au as Ws}from"./tcm-B5DtOF4K.js";import{m as Ms}from"./medicine-BgXyTmNg.js";import{P as As}from"./index-CMWYrP6B.js";const js={key:0,class:"prescription-edit"},Fs={class:"info-section"},Bs={class:"info-section"},Gs={class:"info-section info-section--rp"},Ks={class:"rp-toolbar",role:"region","aria-label":"中药处方"},qs={class:"rp-toolbar__lead"},Js={class:"rp-toolbar__text"},Ys={class:"rp-toolbar__meta"},Xs={key:0,class:"rp-toolbar__lock-tip"},Qs={class:"rp-toolbar__actions",role:"toolbar","aria-label":"处方药材快捷操作"},Zs={class:"mb-3"},ea={class:"herb-formula-block"},ta={class:"herb-formula-block__head"},sa={class:"herbs-editor-grid"},aa={class:"herb-editor-card__title"},la={key:0,class:"herb-editor-card__dup-hint text-amber-600 text-xs mb-1"},oa={class:"herb-editor-card__row"},na={class:"herb-formula-block mt-4"},ia={class:"herb-formula-block__head"},ra={class:"herbs-editor-grid"},da={key:0,class:"herb-editor-card__dup-hint text-amber-600 text-xs mb-1"},ua={class:"herb-editor-card__row"},ca={key:0,class:"text-sm text-gray-400 py-2"},pa={class:"info-section"},_a={key:3,class:"ml-2"},ma={class:"signature-pad-wrap"},ga={class:"signature-actions"},fa={key:1,class:"rx-wrap"},ba={class:"rx-toolbar"},va={key:0,class:"rx-status rx-status-danger"},ya={key:1,class:"rx-status rx-status-danger"},xa={key:0,class:"mt-1"},ka={class:"prescription-preview-content"},Va={class:"case-record-a3-inner"},ha={class:"case-record-a3-title"},wa={class:"case-record-a3-body"},Sa={class:"cr-section"},Ca={class:"cr-grid"},Ua={class:"cr-item"},Ra={class:"cr-item"},Da={class:"cr-item"},Ia={class:"cr-item"},$a={class:"cr-item"},Pa={class:"cr-item"},Na={class:"cr-item"},Ea={class:"cr-item"},Oa={class:"cr-item"},Ta={class:"cr-item"},za={class:"cr-section"},La={class:"cr-grid"},Ha={class:"cr-item"},Wa={class:"cr-item"},Ma={class:"cr-section"},Aa={class:"cr-grid"},ja={class:"cr-item"},Fa={class:"cr-item"},Ba={class:"cr-item"},Ga={class:"cr-item"},Ka={class:"cr-item"},qa={class:"cr-item cr-full"},Ja={class:"cr-item cr-full"},Ya={class:"cr-section"},Xa={class:"cr-grid"},Qa={class:"cr-item cr-full"},Za={class:"cr-item cr-full"},el={class:"cr-item cr-full"},tl={class:"cr-item cr-full"},sl={class:"cr-item cr-full"},al={class:"cr-item cr-full"},ll={class:"cr-item cr-full"},ol={class:"cr-item cr-full"},nl={class:"cr-item cr-full"},il={class:"cr-item cr-full"},rl={class:"cr-item cr-full"},dl={class:"cr-item cr-full"},ul={class:"cr-item cr-full"},cl={class:"cr-item cr-full"},pl={class:"cr-item cr-full"},_l={class:"cr-section"},ml={class:"cr-item cr-full"},gl={class:"cr-section"},fl={class:"cr-grid"},bl={class:"cr-item"},vl={class:"cr-item"},yl={class:"cr-item"},xl={class:"cr-item"},kl={class:"cr-item"},Vl={class:"cr-section"},hl={key:0,class:"cr-grid"},wl={class:"cr-item cr-full"},Sl={class:"cr-images"},Cl=["src"],Ul={class:"cr-grid"},Rl={class:"cr-item cr-full"},Dl={key:2,class:"rx-audit"},Il={key:0},$l={key:0,class:"ml-2 text-gray-400"},Pl={key:1,class:"mt-1"},Nl={class:"flex justify-end gap-2 mt-4"},El={class:"inline-block"},Ol={class:"flex justify-end gap-2"},Tl={class:"mb-4 flex gap-3"},zl={class:"mb-3 flex flex-wrap items-center gap-x-4 gap-y-2"},Ll={key:0},Hl={key:1,class:"text-gray-400"},Wl={class:"flex justify-end mt-4"},Ml={class:"mt-3 flex flex-wrap items-center gap-x-4 gap-y-2"},le=560,oe=168,Al=ts({__name:"index",emits:["success"],setup(jl,{expose:ft,emit:bt}){function F(s){return s==="辅方"?"辅方":"主方"}function $e(s){const e={name:String((s==null?void 0:s.name)??"").trim(),dosage:Number(s==null?void 0:s.dosage)||0,formula_type:F(s==null?void 0:s.formula_type)},i=Number((s==null?void 0:s.medicine_id)??(s==null?void 0:s.id)??0);return Number.isInteger(i)&&i>0&&(e.medicine_id=i),((s==null?void 0:s.locked)===!0||(s==null?void 0:s.locked)===1)&&(e.locked=!0),e}function ne(s="浓缩水丸"){return s==="饮片"?{dosage_amount:50,dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,times_per_day:3,usage_days:7}:s==="浓缩水丸"?{dosage_amount:5,dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,times_per_day:3,usage_days:7}:{dosage_amount:1,dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,times_per_day:3,usage_days:7}}const Pe=bt,z=v(!1),vt=v(),ge=v(!1),fe=v(!1),Ne=v(null),Ee=v(),L=v(),ie=v(null),c=v(null),Oe=v("internal"),be=v(!1),re=O(()=>{const s=c.value;return s?Number(s.audit_status)===1&&Number(s.void_status)!==1:!1}),Te=O(()=>{const s=c.value;return s?Number(s.has_prescription_order)===1:!1}),yt=O(()=>re.value?"查看处方":"中医处方单");function xt(s){if(!s)return"";const e=new Date(s*1e3);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}`}const ze=O(()=>t.herbs.map((s,e)=>({herb:s,index:e})).filter(({herb:s})=>F(s.formula_type)==="主方")),X=O(()=>t.herbs.map((s,e)=>({herb:s,index:e})).filter(({herb:s})=>F(s.formula_type)==="辅方")),kt=O(()=>ze.value.length),Vt=O(()=>X.value.length),$=O(()=>t.herbs.some(s=>s.locked===!0)),ve=O(()=>{var e;const s=Number((e=we.userInfo)==null?void 0:e.id);return s>0?s:0}),H=v(!1),ye=v(!1),xe=v([]),Q=v(""),Z=v(""),B=v("replace"),G=v(!1),K=v(1),de=v(15),ke=v(0),q=v(!1),J=v(""),ue=v("replace"),Ve=v(!1),ht=/^(用法|用量|医嘱|忌口|水煎服|空腹|饭后|温水|内服|外用|备注|顿服|分服|ml|毫升|[×xX]\s*\d)/;function wt(s){let e=s.replace(/\r\n/g,`
`).replace(/\r/g,`
`);return e=e.replace(/[0-9]/g,i=>String.fromCharCode(i.charCodeAt(0)-65296+48)),e.trim()}function St(s){return s.replace(/^\s*Rp[::**\s]*/i,"").replace(/^\s*处方[::\s]*/,"").replace(/^\s*中药处方[::\s]*/,"").trimStart()}function he(s){return s.replace(/([^)]*)$/u,"").replace(/\([^)]*\)$/u,"").trim()}function Le(s){const e=s.trim();if(!e||ht.test(e)||/^\d/.test(e)||/^\d+\s*剂$/.test(e))return null;const i=e.match(/^(.+)\s*各\s*(\d+(?:\.\d+)?)\s*(?:克|g|G)?$/i);if(i){const y=parseFloat(i[2]);if(!Number.isFinite(y)||y<=0)return null;const g=i[1].split(/[、,,\s]+/).map(f=>f.trim()).filter(Boolean);return g.length?g.map(f=>({name:he(f),dosage:y})):null}const r=e.match(/^(.+?)\s*(\d+(?:\.\d+)?)\s*(?:克|g|G|钱)?$/i);if(r){const y=he(r[1].trim()),g=parseFloat(r[2]);return!y||!Number.isFinite(g)||g<=0?null:[{name:y,dosage:g}]}const _=he(e);return _.length>=2&&_.length<=16?[{name:_,dosage:6}]:null}function Ct(s){const e=St(wt(s)),i=[];for(const r of e.split(/\n+/)){const _=r.trim();if(_)for(const y of _.split(/[、,,;;]/)){const g=y.trim();if(g)if(/\s/.test(g)&&!Le(g)){const f=g.split(/\s+(?=[\u4e00-\u9fff]{2,})/);for(const S of f){const d=S.trim();d&&i.push(d)}}else i.push(g)}}return i}function Ut(s){const e=[];for(const i of Ct(s)){const r=Le(i);r&&e.push(...r)}return e}async function Rt(s){const e=s.trim();if(!e)return null;try{const _=((await Ms({name:e,page_no:1,page_size:200,status:1})).lists||[]).filter(y=>(y.name??"").trim()===e);return _.length===1?{medicine_id:Number(_[0].id),name:_[0].name.trim()}:null}catch{return null}}function Dt(){q.value=!0}async function It(){const s=Ut(J.value);if(!s.length){k.msgWarning("未能从文本中解析出药材,请检查格式(药名 + 剂量,或用顿号/换行分隔)");return}Ve.value=!0;try{const e=[],i=[];for(const g of s){const f=await Rt(g.name);if(!f){i.push(g.name.trim());continue}e.push({...f,dosage:g.dosage,formula_type:"主方"})}const r=[...new Set(i.filter(Boolean))];if(e.length===0){k.msgWarning(r.length?`药品库中无以下完全同名药材,未录入:${r.join("、")}`:"未能匹配到药品库中的药材");return}if(ue.value==="replace"){const g=t.herbs.filter(f=>F(f.formula_type)==="辅方");t.herbs=[...g,...e]}else t.herbs.push(...e);const _=Ie(),y=r.length>0?`;药品库未收录已跳过:${r.join("、")}`:"";_.length?k.msgWarning(`已导入 ${e.length} 味药材${y}。存在重复药名:${_.join("、")},请合并剂量或删除多余行`):r.length?k.msgSuccess(`已导入 ${e.length} 味药材${y},请核对剂量`):k.msgSuccess(`已导入 ${e.length} 味药材,请核对药名与剂量`),q.value=!1,J.value=""}finally{Ve.value=!1}}const He=pt({stationName:"成都双流甄养堂互联网医院",showDisclaimer:!0,disclaimer:""}),t=pt({diagnosis_id:0,appointment_id:0,prescription_name:"",prescription_type:"浓缩水丸",dosage_amount:10,dosage_unit:"g",dosage_bag_count:1,need_decoction:!1,bags_per_dose:1,patient_name:"",gender:0,gender_desc:"女",age:0,phone:"",visit_no:"",prescription_date:"",pulse:"",tongue:"",tongue_image:"",pulse_condition:"",clinical_diagnosis:"",case_record:null,herbs:[],dose_count:1,dose_unit:"剂",usage_days:7,times_per_day:2,usage_instruction:"",usage_time:"饭后",usage_way:"温水送服",dietary_taboo:[],usage_notes:"",amount:0,doctor_name:"",doctor_signature:"",is_shared:0,aux_usage:ne("浓缩水丸")}),we=Ns(),$t=Es(),Pt=s=>{const e=typeof s=="string"?s:(s==null?void 0:s.url)??(s==null?void 0:s.uri)??(s==null?void 0:s.path)??"";return e?String(e).startsWith("http")?e:$t.getImageUrl(e):""},Se=v([]),Ce=v([]),We=v([]),Me=v([]),Ae=v([]),je=v([]),Fe=v([]),Be=v([]),Ge=v([]),Ke=v([]),qe=v([]),Je=v([]),Ye=v([]),Xe=v([]),Qe=v([]),Ze=v([]),et=v([]),tt=v([]),T=(s,e)=>{if(!e)return"";const i=s.find(r=>r.value===e);return i?i.name:e},st=async()=>{try{const[s,e,i,r,_,y,g,f,S,d,C,D,P,W,M,Y,ee,te]=await Promise.all([U({type:"diagnosis_type"}),U({type:"syndrome_type"}),U({type:"diabetes_type"}),U({type:"past_history"}),U({type:"appetite"}),U({type:"water_intake"}),U({type:"diet_condition"}),U({type:"weight_change"}),U({type:"body_feeling"}),U({type:"sleep_condition"}),U({type:"eye_condition"}),U({type:"head_feeling"}),U({type:"sweat_condition"}),U({type:"skin_condition"}),U({type:"urine_condition"}),U({type:"stool_condition"}),U({type:"kidney_condition"}),U({type:"fatty_liver_degree"})]);Se.value=(s==null?void 0:s.diagnosis_type)||[],Ce.value=(e==null?void 0:e.syndrome_type)||[],We.value=(i==null?void 0:i.diabetes_type)||[],Me.value=(r==null?void 0:r.past_history)||[],Ae.value=(_==null?void 0:_.appetite)||[],je.value=(y==null?void 0:y.water_intake)||[],Fe.value=(g==null?void 0:g.diet_condition)||[],Be.value=(f==null?void 0:f.weight_change)||[],Ge.value=(S==null?void 0:S.body_feeling)||[],Ke.value=(d==null?void 0:d.sleep_condition)||[],qe.value=(C==null?void 0:C.eye_condition)||[],Je.value=(D==null?void 0:D.head_feeling)||[],Ye.value=(P==null?void 0:P.sweat_condition)||[],Xe.value=(W==null?void 0:W.skin_condition)||[],Qe.value=(M==null?void 0:M.urine_condition)||[],Ze.value=(Y==null?void 0:Y.stool_condition)||[],et.value=(ee==null?void 0:ee.kidney_condition)||[],tt.value=(te==null?void 0:te.fatty_liver_degree)||[]}catch{}},I=(s,e)=>{if(!e||Array.isArray(e)&&e.length===0)return"—";const r=(Array.isArray(e)?e:typeof e=="string"?e.split(","):[]).map(_=>{const y=s.find(g=>g.value===_);return y?y.name:_}).filter(Boolean);return r.length?r.join("、"):"—"},Nt=s=>!s||Array.isArray(s)&&s.length===0?"—":(Array.isArray(s)?s:typeof s=="string"?s.split(","):[]).filter(Boolean).join("、")||"—",Et=s=>{var _;if((_=s==null?void 0:s.symptoms)!=null&&_.trim())return s.symptoms.trim();const e=T(Se.value,s==null?void 0:s.diagnosis_type),i=T(Ce.value,s==null?void 0:s.syndrome_type),r=[e,i].filter(Boolean);return r.length?r.join(" "):""},Ot=async(s,e)=>{var i;if(G.value){console.warn("处方正在打开中,请勿重复点击");return}G.value=!0;try{e!=null&&e.stationName&&(He.stationName=e.stationName);const r=s.diagnosis||s,_=s.diagnosis_id??(r==null?void 0:r.id)??s.id;if(!_){k.msgWarning("缺少诊单信息");return}await st();const y=Number(s.id??s.appointment_id??0);if(y)try{const f=await zs({appointment_id:y});if(console.log("-----------",f),f!=null&&f.id){const S=await me({id:f.id});c.value=S,z.value=!0;return}}catch{}let g=s.case_record&&Object.keys(s.case_record).length>0?s.case_record:null;if(!g&&_)try{const f=await gt({id:Number(_)});g=f&&typeof f=="object"?f:null}catch(f){console.warn("获取诊单详情失败:",f)}t.diagnosis_id=Number(_),t.appointment_id=y,t.prescription_name="",t.prescription_type="浓缩水丸",t.dosage_unit="g",t.dosage_amount=10,t.dosage_bag_count=1,t.patient_name=s.patient_name||r.patient_name||"",t.gender=s.patient_gender??r.gender??0,t.gender_desc=t.gender===1?"男":"女",t.age=s.patient_age??r.age??0,t.phone=s.patient_phone||r.phone||"",t.visit_no=s.id?`1K${String(s.id).padStart(8,"0")}`:"",t.prescription_date=new Date().toISOString().slice(0,10),t.pulse=r.pulse||"",t.tongue=r.tongue_coating||r.tongue||"",t.tongue_image="",t.pulse_condition="",t.clinical_diagnosis=Et(r),t.case_record=g,t.herbs=[],t.dose_count=1,t.dose_unit="剂",t.usage_days=7,t.usage_instruction="",t.usage_time="饭后",t.usage_way="温水送服",t.dietary_taboo=[],t.usage_notes="",t.amount=0,t.doctor_name=((i=we.userInfo)==null?void 0:i.name)||"",t.doctor_signature="",t.is_shared=0,t.need_decoction=!1,t.bags_per_dose=1,t.times_per_day=2,Object.assign(t.aux_usage,ne("浓缩水丸")),c.value=null,z.value=!0,setTimeout(()=>Re(),100)}finally{setTimeout(()=>{G.value=!1},500)}},Tt=async(s,e)=>{if(G.value){console.warn("处方正在打开中,请勿重复点击");return}G.value=!0,Oe.value=(e==null?void 0:e.slipType)??"internal",be.value=(e==null?void 0:e.hideCaseRecord)??!1;try{const i=await me({id:s});c.value=i,i!=null&&i.case_record&&Object.keys(i.case_record).length>0&&await st(),z.value=!0}catch{k.msgError("加载处方失败")}finally{setTimeout(()=>{G.value=!1},500)}},Ue=()=>{z.value=!1,c.value=null,Oe.value="internal",be.value=!1},at=s=>{const e=L.value;if(!e)return{x:0,y:0};const i=e.getBoundingClientRect();if(i.width<=0||i.height<=0)return{x:0,y:0};const r=(s.clientX-i.left)/i.width*le,_=(s.clientY-i.top)/i.height*oe;return{x:Math.max(0,Math.min(le,r)),y:Math.max(0,Math.min(oe,_))}},zt=()=>{const s=L.value;s&&(t.doctor_signature=s.toDataURL("image/png"))},Lt=s=>{if(s.pointerType==="mouse"&&s.button!==0)return;const e=L.value,i=e==null?void 0:e.getContext("2d");if(!e||!i)return;e.setPointerCapture(s.pointerId),ie.value=s.pointerId;const{x:r,y:_}=at(s);i.beginPath(),i.moveTo(r,_)},Ht=s=>{var _;if(ie.value!==s.pointerId)return;const e=(_=L.value)==null?void 0:_.getContext("2d");if(!e)return;const{x:i,y:r}=at(s);e.lineTo(i,r),e.stroke(),e.beginPath(),e.moveTo(i,r)},lt=s=>{if(ie.value!==s.pointerId)return;ie.value=null;const e=L.value;if(e)try{e.releasePointerCapture(s.pointerId)}catch{}zt()},Wt=()=>{Re(),t.doctor_signature=""},Re=()=>{const s=L.value;if(!s)return;const e=Math.min(typeof window<"u"&&window.devicePixelRatio||1,2.5);s.style.width=`${le}px`,s.style.height=`${oe}px`,s.width=Math.round(le*e),s.height=Math.round(oe*e);const i=s.getContext("2d");i&&(i.setTransform(1,0,0,1,0,0),i.scale(e,e),i.fillStyle="#fff",i.fillRect(0,0,le,oe),i.strokeStyle="#333",i.lineWidth=2.5,i.lineCap="round",i.lineJoin="round")};function De(s){return(s??"").trim()}function ce(s){var _,y;const e=t.herbs,i=De((_=e[s])==null?void 0:_.name);if(!i)return!1;let r=0;for(let g=0;g
${e.marker}${e.seriesName}: ¥${Number(e.value).toFixed(2)}`}},grid:{left:60,right:24,top:36,bottom:36},xAxis:{type:"category",data:s.chart.dates,axisLabel:{interval:s.chart.dates.length>15?"auto":0,rotate:s.chart.dates.length>10?30:0}},yAxis:{type:"value",name:"金额(元)",axisLabel:{formatter:t=>t>=1e4?(t/1e4).toFixed(1)+"万":String(t)}},series:[{name:"业绩",type:"line",smooth:!0,showSymbol:!0,symbolSize:6,lineStyle:{width:3,color:"#4a78ff"},itemStyle:{color:"#4a78ff"},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(74, 120, 255, 0.25)"},{offset:1,color:"rgba(74, 120, 255, 0.02)"}]}},data:s.chart.amounts}]})),F=(t,e)=>{var p;const l=((p=s.summary)==null?void 0:p[t])??0;return e==="money"?`¥${Number(l).toFixed(2)}`:String(l)},u=async()=>{_.value=!0;try{const t={time_type:d.time_type};d.time_type==="custom"&&(t.start_date=r.value[0]||"",t.end_date=r.value[1]||"");const e=await X(t);Object.assign(s,e||{})}catch(t){console.error("获取业绩数据失败:",t),W.error((t==null?void 0:t.msg)||"获取业绩数据失败")}finally{_.value=!1}},N=()=>{d.time_type!=="custom"&&(r.value=[],u())},$=()=>{var t;((t=r.value)==null?void 0:t.length)===2&&u()},P=()=>{d.time_type="month",r.value=[],u()};return L(()=>{u()}),(t,e)=>{const l=q,p=z,y=Y,M=A,v=H,R=O,h=I,T=Q;return c(),k("div",ee,[o(h,{class:"!border-none",shadow:"never"},{default:a(()=>[o(R,{inline:!0,class:"stats-filter-form"},{default:a(()=>[o(y,{label:"时间范围"},{default:a(()=>[o(p,{modelValue:d.time_type,"onUpdate:modelValue":e[0]||(e[0]=n=>d.time_type=n),onChange:N},{default:a(()=>[o(l,{label:"today"},{default:a(()=>[...e[2]||(e[2]=[i("今天",-1)])]),_:1}),o(l,{label:"yesterday"},{default:a(()=>[...e[3]||(e[3]=[i("昨天",-1)])]),_:1}),o(l,{label:"week"},{default:a(()=>[...e[4]||(e[4]=[i("最近7天",-1)])]),_:1}),o(l,{label:"month"},{default:a(()=>[...e[5]||(e[5]=[i("最近30天",-1)])]),_:1}),o(l,{label:"custom"},{default:a(()=>[...e[6]||(e[6]=[i("自定义",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),d.time_type==="custom"?(c(),f(y,{key:0},{default:a(()=>[o(M,{modelValue:r.value,"onUpdate:modelValue":e[1]||(e[1]=n=>r.value=n),type:"daterange","value-format":"YYYY-MM-DD","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",style:{width:"260px"},onChange:$},null,8,["modelValue"])]),_:1})):G("",!0),o(y,null,{default:a(()=>[o(v,{type:"primary",loading:_.value,onClick:u},{default:a(()=>[...e[7]||(e[7]=[i("查询",-1)])]),_:1},8,["loading"]),o(v,{onClick:P},{default:a(()=>[...e[8]||(e[8]=[i("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),m("div",te,[(c(),k(U,null,j(w,n=>m("div",{key:n.key,class:x(["stats-kpi-card",n.cardClass])},[m("div",ae,g(n.label),1),m("div",{class:x(["stats-kpi-value",{"is-money":n.type==="money"}])},g(F(n.key,n.type)),3)],2)),64))]),o(h,{class:"!border-none mt-4",shadow:"never"},{header:a(()=>[m("div",oe,[e[9]||(e[9]=m("span",{class:"card-title"},"业绩趋势",-1)),m("span",se,g(S.value)+" · 履约完成业绩",1)])]),default:a(()=>[D.value?(c(),f(J(K),{key:0,class:"stats-chart",option:B.value,autoresize:""},null,8,["option"])):(c(),f(T,{key:1,description:"暂无数据"}))]),_:1})])}}}),ue=Z(le,[["__scopeId","data-v-297158c8"]]);export{ue as default};
+import{o as V,ap as L,q as c,r as k,v as o,D as a,b9 as O,b6 as Y,bc as z,bb as q,L as i,O as f,bp as A,P as G,K as H,bg as I,s as m,F as U,G as j,ae as x,T as g,u as J,cJ as K,bB as Q,M as C,ba as E,p as b,E as W}from"./.pnpm-CC7b2w5D.js";import{r as X}from"./stats-CaiSHqZh.js";import{_ as Z}from"./index-qHIBxlsP.js";const ee={class:"assistant-performance-page"},te={class:"stats-kpi-grid"},ae={class:"stats-kpi-label"},oe={class:"card-header"},se={class:"card-hint"},ne=V({name:"assistantPerformancePage"}),le=V({...ne,setup(re){const _=C(!1),r=C([]),d=E({time_type:"month",start_date:"",end_date:""}),s=E({date_range:[],summary:{total_amount:0,total_count:0},chart:{dates:[],amounts:[],counts:[]}}),w=[{key:"total_amount",label:"业绩",type:"money",cardClass:""},{key:"total_count",label:"有效订单数",type:"count",cardClass:""}],S=b(()=>{var t;return(t=s.date_range)!=null&&t.length?`${s.date_range[0]} 至 ${s.date_range[1]}`:"未选择"}),D=b(()=>s.chart.dates.length>0&&s.chart.amounts.some(t=>t>0)),B=b(()=>({tooltip:{trigger:"axis",formatter:t=>{const e=t[0];return`${e.axisValue}
${e.marker}${e.seriesName}: ¥${Number(e.value).toFixed(2)}`}},grid:{left:60,right:24,top:36,bottom:36},xAxis:{type:"category",data:s.chart.dates,axisLabel:{interval:s.chart.dates.length>15?"auto":0,rotate:s.chart.dates.length>10?30:0}},yAxis:{type:"value",name:"金额(元)",axisLabel:{formatter:t=>t>=1e4?(t/1e4).toFixed(1)+"万":String(t)}},series:[{name:"业绩",type:"line",smooth:!0,showSymbol:!0,symbolSize:6,lineStyle:{width:3,color:"#4a78ff"},itemStyle:{color:"#4a78ff"},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(74, 120, 255, 0.25)"},{offset:1,color:"rgba(74, 120, 255, 0.02)"}]}},data:s.chart.amounts}]})),F=(t,e)=>{var p;const l=((p=s.summary)==null?void 0:p[t])??0;return e==="money"?`¥${Number(l).toFixed(2)}`:String(l)},u=async()=>{_.value=!0;try{const t={time_type:d.time_type};d.time_type==="custom"&&(t.start_date=r.value[0]||"",t.end_date=r.value[1]||"");const e=await X(t);Object.assign(s,e||{})}catch(t){console.error("获取业绩数据失败:",t),W.error((t==null?void 0:t.msg)||"获取业绩数据失败")}finally{_.value=!1}},N=()=>{d.time_type!=="custom"&&(r.value=[],u())},$=()=>{var t;((t=r.value)==null?void 0:t.length)===2&&u()},P=()=>{d.time_type="month",r.value=[],u()};return L(()=>{u()}),(t,e)=>{const l=q,p=z,y=Y,M=A,v=H,R=O,h=I,T=Q;return c(),k("div",ee,[o(h,{class:"!border-none",shadow:"never"},{default:a(()=>[o(R,{inline:!0,class:"stats-filter-form"},{default:a(()=>[o(y,{label:"时间范围"},{default:a(()=>[o(p,{modelValue:d.time_type,"onUpdate:modelValue":e[0]||(e[0]=n=>d.time_type=n),onChange:N},{default:a(()=>[o(l,{label:"today"},{default:a(()=>[...e[2]||(e[2]=[i("今天",-1)])]),_:1}),o(l,{label:"yesterday"},{default:a(()=>[...e[3]||(e[3]=[i("昨天",-1)])]),_:1}),o(l,{label:"week"},{default:a(()=>[...e[4]||(e[4]=[i("最近7天",-1)])]),_:1}),o(l,{label:"month"},{default:a(()=>[...e[5]||(e[5]=[i("最近30天",-1)])]),_:1}),o(l,{label:"custom"},{default:a(()=>[...e[6]||(e[6]=[i("自定义",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),d.time_type==="custom"?(c(),f(y,{key:0},{default:a(()=>[o(M,{modelValue:r.value,"onUpdate:modelValue":e[1]||(e[1]=n=>r.value=n),type:"daterange","value-format":"YYYY-MM-DD","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",style:{width:"260px"},onChange:$},null,8,["modelValue"])]),_:1})):G("",!0),o(y,null,{default:a(()=>[o(v,{type:"primary",loading:_.value,onClick:u},{default:a(()=>[...e[7]||(e[7]=[i("查询",-1)])]),_:1},8,["loading"]),o(v,{onClick:P},{default:a(()=>[...e[8]||(e[8]=[i("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),m("div",te,[(c(),k(U,null,j(w,n=>m("div",{key:n.key,class:x(["stats-kpi-card",n.cardClass])},[m("div",ae,g(n.label),1),m("div",{class:x(["stats-kpi-value",{"is-money":n.type==="money"}])},g(F(n.key,n.type)),3)],2)),64))]),o(h,{class:"!border-none mt-4",shadow:"never"},{header:a(()=>[m("div",oe,[e[9]||(e[9]=m("span",{class:"card-title"},"业绩趋势",-1)),m("span",se,g(S.value)+" · 履约完成业绩",1)])]),default:a(()=>[D.value?(c(),f(J(K),{key:0,class:"stats-chart",option:B.value,autoresize:""},null,8,["option"])):(c(),f(T,{key:1,description:"暂无数据"}))]),_:1})])}}}),ue=Z(le,[["__scopeId","data-v-297158c8"]]);export{ue as default};
diff --git a/server/public/admin/assets/index-7GcUZy5-.js b/server/public/admin/assets/index-cAmffpyq.js
similarity index 99%
rename from server/public/admin/assets/index-7GcUZy5-.js
rename to server/public/admin/assets/index-cAmffpyq.js
index dbd7f5186..1f6b304b6 100644
--- a/server/public/admin/assets/index-7GcUZy5-.js
+++ b/server/public/admin/assets/index-cAmffpyq.js
@@ -1,3 +1,3 @@
-import{o as Fe,R as Le,E as _,ap as ft,ac as Ee,bi as gt,q as d,r as g,s as a,v as s,D as i,u as p,cV as vt,w as bt,cO as yt,L as c,T as u,P,by as _e,K as kt,cN as Nt,d0 as Ct,bI as wt,d1 as Vt,ae as I,d2 as Ue,d3 as Te,d4 as $t,c$ as ze,cv as pe,F as R,G as J,cD as xt,at as Me,bu as St,d5 as ht,O as b,bh as Pt,bk as It,aw as Oe,I as At,$ as Dt,ck as Lt,Z as Et,_ as Ut,bB as Tt,bj as zt,cl as Mt,as as Ot,b6 as Ft,bm as qt,bn as jt,bA as Bt,b9 as Rt,bs as Jt,a4 as Kt,d6 as Yt,bq as Ht,b7 as Wt,bt as Zt,J as Gt,bp as Qt,ba as K,M as V,p as O,e as te}from"./.pnpm-CC7b2w5D.js";import{y as Xt,z as en,A as tn,B as nn,C as an,D as ln,E as sn,F as on,G as un,H as dn,I as rn,J as mn}from"./first_visit-Dggu85mh.js";import cn from"./WecomFloatingWidgetBuilder-CsbrZkOG.js";import{_ as _n}from"./index-fgtLtwvK.js";const pn={class:"promotion-page","element-loading-text":"正在加载推广配置"},fn={class:"page-header"},gn={class:"heading-copy"},vn={class:"heading-icon"},bn={class:"heading-actions"},yn={class:"scope-chip"},kn={key:0,class:"update-time"},Nn={class:"metric-grid"},Cn={class:"metric-card"},wn={class:"metric-icon is-teal"},Vn={class:"metric-card"},$n={class:"metric-icon is-blue"},xn={class:"metric-card"},Sn={class:"metric-icon is-green"},hn={class:"metric-card"},Pn={class:"metric-icon is-orange"},In={class:"workspace-card"},An={class:"tab-nav","aria-label":"企业微信获客助手功能"},Dn={key:0,class:"tab-content links-tab"},Ln={class:"section-heading"},En={key:0,class:"pool-layout"},Un={class:"pool-sidebar"},Tn=["onClick"],zn={class:"pool-main"},Mn={key:0,class:"pool-toolbar"},On={class:"pool-title-row"},Fn={class:"owner-tag"},qn={class:"toolbar-actions"},jn={class:"member-cell"},Bn={class:"link-id-cell"},Rn=["title"],Jn={key:1,class:"legacy-tag"},Kn=["href","title"],Yn={key:4,class:"muted"},Hn={key:1,class:"tab-content customer-stats-tab"},Wn={class:"section-heading customer-stats-heading"},Zn={class:"customer-heading-actions"},Gn={key:0,class:"update-time"},Qn={class:"customer-metric-grid","aria-label":"获客客户消息汇总"},Xn={class:"customer-metric-card"},ea={class:"metric-icon is-teal"},ta={class:"customer-metric-card"},na={class:"metric-icon is-blue"},aa={class:"customer-metric-card"},la={class:"metric-icon is-green"},sa={class:"customer-metric-card"},ia={class:"metric-icon is-orange"},oa={class:"customer-filter-bar"},ua=["title"],da={class:"member-cell"},ra={class:"member-cell"},ma={class:"customer-pagination"},ca={key:2,class:"tab-content authorization-tab"},_a={class:"configuration-state"},pa={key:0},fa={key:1},ga={key:0,class:"missing-fields"},va={class:"callback-list"},ba={class:"configuration-actions"},ya={key:3,class:"tab-content install-tab"},ka={class:"section-heading"},Na={class:"form-grid"},Ca={class:"form-grid"},wa=Fe({name:"firstVisitWecomPromotionPage"}),Va=Fe({...wa,setup($a){const fe=()=>({meta:{scope_label:"",generated_at:""},config:{mode:"internal",configured:!1,ready:!1,missing:[],corp_id_masked:"",agent_id:"",secret_configured:!1,callback_ready:!1,callback_url:"",official_doc:""},summary:{configured_apps:0,pool_count:0,online_links:0,today_clicks:0},pools:[],links:[],member_options:[],customer_acquisition_link_example:"https://work.weixin.qq.com/ca/xxxxxxxx"}),r=K(fe()),Z=V(!1),$=V("links"),U=V(),F=V(),Y=V(!1),H=V(!1),ne=V(!1),ae=V(!1),G=V(!1),le=V(!1),se=V(0),D=K({id:0,name:"",fallback_url:"",status:1}),m=K({id:0,pool_id:0,name:"",group_name:"默认分组",wecom_url:"",member_admin_ids:[],skip_verify:0,legacy:!1,weight:1,status:1,daily_limit:0,active_range:[],remark:""}),W=V(!1),ge=V(!1),ie=V(!1),N=K({link_id:"",userid:"",chat_status:""}),x=K({page_no:1,page_size:20,total:0}),y=K({summary:{customer_count:0,messaged_customer_count:0,message_customer_rate:0,received_message_count:0,message_count_known_count:0},rows:[],link_options:[],member_options:[],meta:{last_synced_at:""}}),C=O(()=>r.pools.find(t=>Number(t.id)===U.value)),oe=O(()=>r.links.filter(t=>Number(t.pool_id)===U.value)),ve=O(()=>oe.value.filter(t=>!!t.remote_link_id).length),be=O(()=>oe.value.length-ve.value),ue=O(()=>r.pools.find(t=>Number(t.id)===F.value)),qe=O(()=>y.link_options.length?y.link_options:r.links.filter(t=>t.id).map(t=>({id:Number(t.id),name:t.name||t.remote_link_id||`链接 ${t.id}`}))),je=O(()=>y.member_options.length?y.member_options:r.member_options.map(t=>({id:Number(t.id),userid:String(t.userid||""),name:t.name,department_name:Array.isArray(t.dept_names)?t.dept_names.join(" / "):t.department_name||t.dept_name||""})));Le(()=>r.pools.map(t=>Number(t.id)).join(","),()=>{const t=r.pools.map(e=>Number(e.id));(!U.value||!t.includes(U.value))&&(U.value=t[0]),(!F.value||!t.includes(F.value))&&(F.value=t[0])},{immediate:!0}),Le($,t=>{t==="customer-stats"&&!ge.value&&z()});async function S(){Z.value=!0;try{const t=await en();Object.assign(r,fe(),t||{})}catch(t){_.error((t==null?void 0:t.message)||"企业微信推广配置加载失败")}finally{Z.value=!1}}function Be(t){return r.links.filter(e=>Number(e.pool_id)===Number(t)).length}function de(t){Object.assign(D,t?{id:Number(t.id),name:t.name,fallback_url:t.fallback_url||"",status:Number(t.status)}:{id:0,name:"",fallback_url:"",status:1}),Y.value=!0}async function Re(){if(!D.name.trim())return _.warning("请输入分流方案名称");ne.value=!0;try{const t=await tn({...D});Y.value=!1,await S(),t!=null&&t.id&&(U.value=Number(t.id)),_.success("分流方案已保存")}catch(t){_.error((t==null?void 0:t.message)||"分流方案保存失败")}finally{ne.value=!1}}async function Je(t){await te.confirm(`删除“${t.name}”后,该方案下的获客助手链接也会停用。确认继续?`,"删除分流方案",{type:"warning"});try{await nn({id:Number(t.id)}),_.success("分流方案已删除"),await S()}catch(e){_.error((e==null?void 0:e.message)||"删除失败")}}function ye(t){if(!C.value)return;const e=t&&Number(t.active_start)>0&&Number(t.active_end)>0?[Se(t.active_start),Se(t.active_end)]:[],l=new Set(((t==null?void 0:t.range_userids)||[]).map(k=>String(k))),o=r.member_options.filter(k=>l.has(String(k.userid))).map(k=>Number(k.id));Object.assign(m,t?{id:Number(t.id),pool_id:Number(t.pool_id),name:t.name,group_name:t.group_name||"默认分组",wecom_url:t.wecom_url,member_admin_ids:o,skip_verify:Number(t.skip_verify)===1?1:0,legacy:!t.is_official,weight:Number(t.weight)||1,status:Number(t.status),daily_limit:Number(t.daily_limit)||0,active_range:e,remark:t.remark||""}:{id:0,pool_id:Number(C.value.id),name:"",group_name:"默认分组",wecom_url:"",member_admin_ids:[],skip_verify:0,legacy:!1,weight:1,status:1,daily_limit:0,active_range:[],remark:""}),H.value=!0}async function Ke(){var t,e;if(!m.name.trim())return _.warning("请输入获客链接名称");if(m.legacy&&!m.wecom_url.trim())return _.warning("请填写企业微信获客助手链接");if(!m.legacy&&!m.member_admin_ids.length)return _.warning("请至少选择一名获客成员");ae.value=!0;try{await an({...m,active_start:((t=m.active_range)==null?void 0:t[0])||"",active_end:((e=m.active_range)==null?void 0:e[1])||""}),H.value=!1,await S(),_.success(m.legacy?"本地分流规则已保存":"企业微信官方获客链接已保存")}catch(l){_.error((l==null?void 0:l.message)||"获客助手链接保存失败")}finally{ae.value=!1}}async function ke(){G.value=!0;try{const t=await ln();t!=null&&t.has_link?_.success((t==null?void 0:t.message)||"API 验证通过:应用凭证、可信 IP 与获客助手权限均可用"):_.warning((t==null?void 0:t.message)||"API 权限可用,但当前应用还没有创建官方获客链接")}catch(t){_.error((t==null?void 0:t.message)||"获客助手 API 验证失败")}finally{G.value=!1}}async function Ye(){await S(),$.value==="customer-stats"&&await z()}function q(t,e){for(const l of e)if((t==null?void 0:t[l])!==void 0&&(t==null?void 0:t[l])!==null&&(t==null?void 0:t[l])!==""){const o=Number(t[l]);return Number.isFinite(o)?o:0}return 0}async function z(){var t,e;W.value=!0;try{const l=await Xt({page_no:x.page_no,page_size:x.page_size,promotion_link_id:N.link_id?Number(N.link_id):void 0,userid:N.userid||void 0,chat_status:N.chat_status===""?void 0:N.chat_status==="messaged"?1:N.chat_status==="unknown"?2:0}),o=(l==null?void 0:l.summary)||(l==null?void 0:l.stats)||{},k=q(o,["customer_count","total_customers","customer_total","total"]),f=q(o,["messaged_customer_count","started_chat_count","chat_customer_count","message_customer_count","chatting_customers"]),A=["message_customer_rate","chat_customer_rate","messaged_rate","chat_rate"],Q=A.some(h=>(o==null?void 0:o[h])!==void 0&&(o==null?void 0:o[h])!==null&&(o==null?void 0:o[h])!=="");Object.assign(y.summary,{customer_count:k,messaged_customer_count:f,message_customer_rate:Q?q(o,A):k?f/k*100:0,received_message_count:q(o,["received_message_count","recv_msg_cnt","recv_msg_count","total_recv_msg_cnt","message_count"]),message_count_known_count:q(o,["message_count_known_count","exact_message_customer_count"])}),y.rows=Array.isArray(l==null?void 0:l.lists)?l.lists:Array.isArray(l==null?void 0:l.list)?l.list:Array.isArray(l==null?void 0:l.rows)?l.rows:[],x.total=Number((l==null?void 0:l.total)??(l==null?void 0:l.count)??((t=l==null?void 0:l.page)==null?void 0:t.total)??y.rows.length)||0;const w=(l==null?void 0:l.filters)||{},X=(l==null?void 0:l.link_options)||(w==null?void 0:w.link_options)||(w==null?void 0:w.links),M=(l==null?void 0:l.member_options)||(w==null?void 0:w.member_options)||(w==null?void 0:w.members);Array.isArray(X)&&(y.link_options=X),Array.isArray(M)&&(y.member_options=M);const ee=y.rows.reduce((h,v)=>{const j=v.last_synced_at||v.last_sync_time||v.synced_at||v.sync_time||"";return Number(j||0)>Number(h||0)?j:h},""),E=((e=l==null?void 0:l.meta)==null?void 0:e.last_synced_at)||(l==null?void 0:l.last_synced_at)||ee||y.meta.last_synced_at||"";Object.assign(y.meta,(l==null?void 0:l.meta)||{},{last_synced_at:E?ce(E):""}),ge.value=!0}catch(l){_.error((l==null?void 0:l.message)||"获客客户统计加载失败")}finally{W.value=!1}}function He(){x.page_no=1,z()}function We(){Object.assign(N,{link_id:"",userid:"",chat_status:""}),x.page_no=1,z()}function Ze(){x.page_no=1,z()}async function Ge(){var t,e,l;ie.value=!0;try{const o=await sn({promotion_link_id:N.link_id?Number(N.link_id):void 0}),k=Number((o==null?void 0:o.scanned)??(o==null?void 0:o.customer_scanned)??((t=o==null?void 0:o.customers)==null?void 0:t.scanned)??0),f=Number((o==null?void 0:o.created)??(o==null?void 0:o.customer_created)??((e=o==null?void 0:o.customers)==null?void 0:e.created)??0),A=Number((o==null?void 0:o.updated)??(o==null?void 0:o.customer_updated)??((l=o==null?void 0:o.customers)==null?void 0:l.updated)??0);_.success((o==null?void 0:o.message)||`客户同步完成:扫描 ${L(k)} 位,新增 ${L(f)} 位,更新 ${L(A)} 位`),x.page_no=1,await Promise.all([S(),z()])}catch(o){_.error((o==null?void 0:o.message)||"获客客户同步失败")}finally{ie.value=!1}}async function Qe(){if(!C.value)return _.warning("请先选择分流方案");le.value=!0;try{const t=await on({pool_id:Number(C.value.id)}),e=`扫描 ${Number((t==null?void 0:t.scanned)||0)} 条,新建 ${Number((t==null?void 0:t.created)||0)} 条,更新 ${Number((t==null?void 0:t.updated)||0)} 条,按权限跳过 ${Number((t==null?void 0:t.skipped)||0)} 条,失败 ${Number((t==null?void 0:t.failed)||0)} 条`;Number((t==null?void 0:t.scanned)||0)===0?await te.alert(`${(t==null?void 0:t.empty_reason)||"当前应用没有可同步的官方获客链接"}
+import{o as Fe,R as Le,E as _,ap as ft,ac as Ee,bi as gt,q as d,r as g,s as a,v as s,D as i,u as p,cV as vt,w as bt,cO as yt,L as c,T as u,P,by as _e,K as kt,cN as Nt,d0 as Ct,bI as wt,d1 as Vt,ae as I,d2 as Ue,d3 as Te,d4 as $t,c$ as ze,cv as pe,F as R,G as J,cD as xt,at as Me,bu as St,d5 as ht,O as b,bh as Pt,bk as It,aw as Oe,I as At,$ as Dt,ck as Lt,Z as Et,_ as Ut,bB as Tt,bj as zt,cl as Mt,as as Ot,b6 as Ft,bm as qt,bn as jt,bA as Bt,b9 as Rt,bs as Jt,a4 as Kt,d6 as Yt,bq as Ht,b7 as Wt,bt as Zt,J as Gt,bp as Qt,ba as K,M as V,p as O,e as te}from"./.pnpm-CC7b2w5D.js";import{y as Xt,z as en,A as tn,B as nn,C as an,D as ln,E as sn,F as on,G as un,H as dn,I as rn,J as mn}from"./first_visit-x3hNziXb.js";import cn from"./WecomFloatingWidgetBuilder-BHk9Aq3b.js";import{_ as _n}from"./index-qHIBxlsP.js";const pn={class:"promotion-page","element-loading-text":"正在加载推广配置"},fn={class:"page-header"},gn={class:"heading-copy"},vn={class:"heading-icon"},bn={class:"heading-actions"},yn={class:"scope-chip"},kn={key:0,class:"update-time"},Nn={class:"metric-grid"},Cn={class:"metric-card"},wn={class:"metric-icon is-teal"},Vn={class:"metric-card"},$n={class:"metric-icon is-blue"},xn={class:"metric-card"},Sn={class:"metric-icon is-green"},hn={class:"metric-card"},Pn={class:"metric-icon is-orange"},In={class:"workspace-card"},An={class:"tab-nav","aria-label":"企业微信获客助手功能"},Dn={key:0,class:"tab-content links-tab"},Ln={class:"section-heading"},En={key:0,class:"pool-layout"},Un={class:"pool-sidebar"},Tn=["onClick"],zn={class:"pool-main"},Mn={key:0,class:"pool-toolbar"},On={class:"pool-title-row"},Fn={class:"owner-tag"},qn={class:"toolbar-actions"},jn={class:"member-cell"},Bn={class:"link-id-cell"},Rn=["title"],Jn={key:1,class:"legacy-tag"},Kn=["href","title"],Yn={key:4,class:"muted"},Hn={key:1,class:"tab-content customer-stats-tab"},Wn={class:"section-heading customer-stats-heading"},Zn={class:"customer-heading-actions"},Gn={key:0,class:"update-time"},Qn={class:"customer-metric-grid","aria-label":"获客客户消息汇总"},Xn={class:"customer-metric-card"},ea={class:"metric-icon is-teal"},ta={class:"customer-metric-card"},na={class:"metric-icon is-blue"},aa={class:"customer-metric-card"},la={class:"metric-icon is-green"},sa={class:"customer-metric-card"},ia={class:"metric-icon is-orange"},oa={class:"customer-filter-bar"},ua=["title"],da={class:"member-cell"},ra={class:"member-cell"},ma={class:"customer-pagination"},ca={key:2,class:"tab-content authorization-tab"},_a={class:"configuration-state"},pa={key:0},fa={key:1},ga={key:0,class:"missing-fields"},va={class:"callback-list"},ba={class:"configuration-actions"},ya={key:3,class:"tab-content install-tab"},ka={class:"section-heading"},Na={class:"form-grid"},Ca={class:"form-grid"},wa=Fe({name:"firstVisitWecomPromotionPage"}),Va=Fe({...wa,setup($a){const fe=()=>({meta:{scope_label:"",generated_at:""},config:{mode:"internal",configured:!1,ready:!1,missing:[],corp_id_masked:"",agent_id:"",secret_configured:!1,callback_ready:!1,callback_url:"",official_doc:""},summary:{configured_apps:0,pool_count:0,online_links:0,today_clicks:0},pools:[],links:[],member_options:[],customer_acquisition_link_example:"https://work.weixin.qq.com/ca/xxxxxxxx"}),r=K(fe()),Z=V(!1),$=V("links"),U=V(),F=V(),Y=V(!1),H=V(!1),ne=V(!1),ae=V(!1),G=V(!1),le=V(!1),se=V(0),D=K({id:0,name:"",fallback_url:"",status:1}),m=K({id:0,pool_id:0,name:"",group_name:"默认分组",wecom_url:"",member_admin_ids:[],skip_verify:0,legacy:!1,weight:1,status:1,daily_limit:0,active_range:[],remark:""}),W=V(!1),ge=V(!1),ie=V(!1),N=K({link_id:"",userid:"",chat_status:""}),x=K({page_no:1,page_size:20,total:0}),y=K({summary:{customer_count:0,messaged_customer_count:0,message_customer_rate:0,received_message_count:0,message_count_known_count:0},rows:[],link_options:[],member_options:[],meta:{last_synced_at:""}}),C=O(()=>r.pools.find(t=>Number(t.id)===U.value)),oe=O(()=>r.links.filter(t=>Number(t.pool_id)===U.value)),ve=O(()=>oe.value.filter(t=>!!t.remote_link_id).length),be=O(()=>oe.value.length-ve.value),ue=O(()=>r.pools.find(t=>Number(t.id)===F.value)),qe=O(()=>y.link_options.length?y.link_options:r.links.filter(t=>t.id).map(t=>({id:Number(t.id),name:t.name||t.remote_link_id||`链接 ${t.id}`}))),je=O(()=>y.member_options.length?y.member_options:r.member_options.map(t=>({id:Number(t.id),userid:String(t.userid||""),name:t.name,department_name:Array.isArray(t.dept_names)?t.dept_names.join(" / "):t.department_name||t.dept_name||""})));Le(()=>r.pools.map(t=>Number(t.id)).join(","),()=>{const t=r.pools.map(e=>Number(e.id));(!U.value||!t.includes(U.value))&&(U.value=t[0]),(!F.value||!t.includes(F.value))&&(F.value=t[0])},{immediate:!0}),Le($,t=>{t==="customer-stats"&&!ge.value&&z()});async function S(){Z.value=!0;try{const t=await en();Object.assign(r,fe(),t||{})}catch(t){_.error((t==null?void 0:t.message)||"企业微信推广配置加载失败")}finally{Z.value=!1}}function Be(t){return r.links.filter(e=>Number(e.pool_id)===Number(t)).length}function de(t){Object.assign(D,t?{id:Number(t.id),name:t.name,fallback_url:t.fallback_url||"",status:Number(t.status)}:{id:0,name:"",fallback_url:"",status:1}),Y.value=!0}async function Re(){if(!D.name.trim())return _.warning("请输入分流方案名称");ne.value=!0;try{const t=await tn({...D});Y.value=!1,await S(),t!=null&&t.id&&(U.value=Number(t.id)),_.success("分流方案已保存")}catch(t){_.error((t==null?void 0:t.message)||"分流方案保存失败")}finally{ne.value=!1}}async function Je(t){await te.confirm(`删除“${t.name}”后,该方案下的获客助手链接也会停用。确认继续?`,"删除分流方案",{type:"warning"});try{await nn({id:Number(t.id)}),_.success("分流方案已删除"),await S()}catch(e){_.error((e==null?void 0:e.message)||"删除失败")}}function ye(t){if(!C.value)return;const e=t&&Number(t.active_start)>0&&Number(t.active_end)>0?[Se(t.active_start),Se(t.active_end)]:[],l=new Set(((t==null?void 0:t.range_userids)||[]).map(k=>String(k))),o=r.member_options.filter(k=>l.has(String(k.userid))).map(k=>Number(k.id));Object.assign(m,t?{id:Number(t.id),pool_id:Number(t.pool_id),name:t.name,group_name:t.group_name||"默认分组",wecom_url:t.wecom_url,member_admin_ids:o,skip_verify:Number(t.skip_verify)===1?1:0,legacy:!t.is_official,weight:Number(t.weight)||1,status:Number(t.status),daily_limit:Number(t.daily_limit)||0,active_range:e,remark:t.remark||""}:{id:0,pool_id:Number(C.value.id),name:"",group_name:"默认分组",wecom_url:"",member_admin_ids:[],skip_verify:0,legacy:!1,weight:1,status:1,daily_limit:0,active_range:[],remark:""}),H.value=!0}async function Ke(){var t,e;if(!m.name.trim())return _.warning("请输入获客链接名称");if(m.legacy&&!m.wecom_url.trim())return _.warning("请填写企业微信获客助手链接");if(!m.legacy&&!m.member_admin_ids.length)return _.warning("请至少选择一名获客成员");ae.value=!0;try{await an({...m,active_start:((t=m.active_range)==null?void 0:t[0])||"",active_end:((e=m.active_range)==null?void 0:e[1])||""}),H.value=!1,await S(),_.success(m.legacy?"本地分流规则已保存":"企业微信官方获客链接已保存")}catch(l){_.error((l==null?void 0:l.message)||"获客助手链接保存失败")}finally{ae.value=!1}}async function ke(){G.value=!0;try{const t=await ln();t!=null&&t.has_link?_.success((t==null?void 0:t.message)||"API 验证通过:应用凭证、可信 IP 与获客助手权限均可用"):_.warning((t==null?void 0:t.message)||"API 权限可用,但当前应用还没有创建官方获客链接")}catch(t){_.error((t==null?void 0:t.message)||"获客助手 API 验证失败")}finally{G.value=!1}}async function Ye(){await S(),$.value==="customer-stats"&&await z()}function q(t,e){for(const l of e)if((t==null?void 0:t[l])!==void 0&&(t==null?void 0:t[l])!==null&&(t==null?void 0:t[l])!==""){const o=Number(t[l]);return Number.isFinite(o)?o:0}return 0}async function z(){var t,e;W.value=!0;try{const l=await Xt({page_no:x.page_no,page_size:x.page_size,promotion_link_id:N.link_id?Number(N.link_id):void 0,userid:N.userid||void 0,chat_status:N.chat_status===""?void 0:N.chat_status==="messaged"?1:N.chat_status==="unknown"?2:0}),o=(l==null?void 0:l.summary)||(l==null?void 0:l.stats)||{},k=q(o,["customer_count","total_customers","customer_total","total"]),f=q(o,["messaged_customer_count","started_chat_count","chat_customer_count","message_customer_count","chatting_customers"]),A=["message_customer_rate","chat_customer_rate","messaged_rate","chat_rate"],Q=A.some(h=>(o==null?void 0:o[h])!==void 0&&(o==null?void 0:o[h])!==null&&(o==null?void 0:o[h])!=="");Object.assign(y.summary,{customer_count:k,messaged_customer_count:f,message_customer_rate:Q?q(o,A):k?f/k*100:0,received_message_count:q(o,["received_message_count","recv_msg_cnt","recv_msg_count","total_recv_msg_cnt","message_count"]),message_count_known_count:q(o,["message_count_known_count","exact_message_customer_count"])}),y.rows=Array.isArray(l==null?void 0:l.lists)?l.lists:Array.isArray(l==null?void 0:l.list)?l.list:Array.isArray(l==null?void 0:l.rows)?l.rows:[],x.total=Number((l==null?void 0:l.total)??(l==null?void 0:l.count)??((t=l==null?void 0:l.page)==null?void 0:t.total)??y.rows.length)||0;const w=(l==null?void 0:l.filters)||{},X=(l==null?void 0:l.link_options)||(w==null?void 0:w.link_options)||(w==null?void 0:w.links),M=(l==null?void 0:l.member_options)||(w==null?void 0:w.member_options)||(w==null?void 0:w.members);Array.isArray(X)&&(y.link_options=X),Array.isArray(M)&&(y.member_options=M);const ee=y.rows.reduce((h,v)=>{const j=v.last_synced_at||v.last_sync_time||v.synced_at||v.sync_time||"";return Number(j||0)>Number(h||0)?j:h},""),E=((e=l==null?void 0:l.meta)==null?void 0:e.last_synced_at)||(l==null?void 0:l.last_synced_at)||ee||y.meta.last_synced_at||"";Object.assign(y.meta,(l==null?void 0:l.meta)||{},{last_synced_at:E?ce(E):""}),ge.value=!0}catch(l){_.error((l==null?void 0:l.message)||"获客客户统计加载失败")}finally{W.value=!1}}function He(){x.page_no=1,z()}function We(){Object.assign(N,{link_id:"",userid:"",chat_status:""}),x.page_no=1,z()}function Ze(){x.page_no=1,z()}async function Ge(){var t,e,l;ie.value=!0;try{const o=await sn({promotion_link_id:N.link_id?Number(N.link_id):void 0}),k=Number((o==null?void 0:o.scanned)??(o==null?void 0:o.customer_scanned)??((t=o==null?void 0:o.customers)==null?void 0:t.scanned)??0),f=Number((o==null?void 0:o.created)??(o==null?void 0:o.customer_created)??((e=o==null?void 0:o.customers)==null?void 0:e.created)??0),A=Number((o==null?void 0:o.updated)??(o==null?void 0:o.customer_updated)??((l=o==null?void 0:o.customers)==null?void 0:l.updated)??0);_.success((o==null?void 0:o.message)||`客户同步完成:扫描 ${L(k)} 位,新增 ${L(f)} 位,更新 ${L(A)} 位`),x.page_no=1,await Promise.all([S(),z()])}catch(o){_.error((o==null?void 0:o.message)||"获客客户同步失败")}finally{ie.value=!1}}async function Qe(){if(!C.value)return _.warning("请先选择分流方案");le.value=!0;try{const t=await on({pool_id:Number(C.value.id)}),e=`扫描 ${Number((t==null?void 0:t.scanned)||0)} 条,新建 ${Number((t==null?void 0:t.created)||0)} 条,更新 ${Number((t==null?void 0:t.updated)||0)} 条,按权限跳过 ${Number((t==null?void 0:t.skipped)||0)} 条,失败 ${Number((t==null?void 0:t.failed)||0)} 条`;Number((t==null?void 0:t.scanned)||0)===0?await te.alert(`${(t==null?void 0:t.empty_reason)||"当前应用没有可同步的官方获客链接"}
${(t==null?void 0:t.suggestion)||""}`,"没有可同步的官方链接",{type:"warning",confirmButtonText:"知道了"}):t!=null&&t.failed?_.warning(e):_.success(e),await S()}catch(t){_.error((t==null?void 0:t.message)||"同步企业微信获客链接失败")}finally{le.value=!1}}async function Xe(t){se.value=Number(t.id);try{await un({id:Number(t.id)}),_.success("企业微信官方详情已刷新"),await S()}catch(e){_.error((e==null?void 0:e.message)||"刷新官方详情失败")}finally{se.value=0}}async function et(t,e){if(t==="local"){await Ne(e);return}if(t==="remote"){await te.confirm(`将永久删除企业微信后台中的“${e.name}”,现有推广页面会立即失效,且无法恢复。确认继续?`,"永久删除企业微信获客链接",{type:"error",confirmButtonText:"永久删除",cancelButtonText:"取消"});try{await dn({id:Number(e.id)}),_.success("企业微信获客链接已永久删除,本地记录已保留并停止分流"),await S()}catch(l){_.error((l==null?void 0:l.message)||"永久删除失败")}}}async function tt(t,e){try{await rn({id:Number(t.id),status:e?1:0}),t.status=e?1:0,_.success(e?"链接已上线":"链接已下线"),await S()}catch(l){_.error((l==null?void 0:l.message)||"状态更新失败"),await S()}}async function Ne(t){await te.confirm(`仅从本地分流池移除“${t.name}”,不会删除企业微信后台的官方链接。确认继续?`,"从本地移除",{type:"warning"});try{await mn({id:Number(t.id)}),_.success("已从本地分流池移除"),await S()}catch(e){_.error((e==null?void 0:e.message)||"删除失败")}}function Ce(t){const e=Math.floor(Date.now()/1e3);return Number(t.remote_status)===2?{label:"企业微信已删除",className:"is-error"}:t.valid_customer_acquisition_link===!1?{label:"非获客助手链接",className:"is-error"}:Number(t.status)!==1?{label:"已下线",className:"is-muted"}:Number(t.active_start)>0&&Number(t.active_start)>e?{label:"尚未生效",className:"is-waiting"}:Number(t.active_end)>0&&Number(t.active_end){var t;return((t=B.value)==null?void 0:t.detail)??null}),os=R(()=>{var e;const t=(e=T.value)==null?void 0:e.prescription;return t&&typeof t=="object"?t:null}),Ra=R(()=>`${c.dose_unit||"剂"}数`),Fe=f(!1),It=f(!1),it=f(),de=me({id:0,amount:void 0}),us={amount:[{required:!0,message:"请输入订单金额",trigger:"blur"},{validator:(t,e,s)=>{const i=Number(e);if(!Number.isFinite(i)||i<0){s(new Error("订单金额不能为负数"));return}s()},trigger:"blur"}]},Ve=f(null),ot=f(!1),Le=R(()=>Sr(Ve.value)),Ie=f(!1),qt=f(!1),zt=f(),ae=me({patient_name:"",phone:""}),ds={patient_name:[{required:!0,message:"请输入患者姓名",trigger:"blur"}],phone:[{required:!0,message:"请输入手机号",trigger:"blur"}]};function ps(){const t=os.value,e=T.value;if(!t||!(e!=null&&e.id)||!e.prescription_id){w.msgWarning("无处方数据");return}ae.patient_name=String(t.patient_name??"").trim(),ae.phone=String(t.phone??"").trim(),Ie.value=!0,et(()=>{var s;return(s=zt.value)==null?void 0:s.clearValidate()})}function cs(){ae.patient_name="",ae.phone=""}function ms(){var t;de.id=0,de.amount=void 0,(t=it.value)==null||t.clearValidate()}function _s(){const t=T.value;if(!sl(t)){w.msgWarning("当前订单状态不允许修改金额");return}de.id=Number(t==null?void 0:t.id)||0;const e=Number(t==null?void 0:t.amount);de.amount=Number.isFinite(e)?e:void 0,Fe.value=!0,et(()=>{var s;return(s=it.value)==null?void 0:s.clearValidate()})}async function ut(){var t;await((t=B.value)==null?void 0:t.refresh())}async function fs(){var s;const t=zt.value;if(!t)return;try{await t.validate()}catch{return}const e=(s=T.value)==null?void 0:s.id;if(e){qt.value=!0;try{await Fr({id:e,patient_name:ae.patient_name.trim(),phone:ae.phone.trim()}),Ie.value=!1,await ut()}catch(i){console.error(i)}finally{qt.value=!1}}}async function Ea(){const t=it.value;if(!t)return;try{await t.validate()}catch{return}if(!sl(T.value)){w.msgWarning("当前订单状态不允许修改金额");return}const e=de.id;It.value=!0;try{await Lr({id:e,amount:Number(de.amount)}),w.msgSuccess("修改成功"),Fe.value=!1,await ut(),U()}catch{}finally{It.value=!1}}async function vs(t){var e;await((e=B.value)==null?void 0:e.open(t))}const be=f(!1),jt=f(!1),Mt=f(!1),F=f(0),le=f(null),se=f(!1),dt=f(""),ys=R(()=>["请核对收货信息,便于发货与物流联系。","按需填写服务与物流,并选择本诊单下需要关联的支付单。","确认费用类别与订单金额;保存前请对照定金门槛是否已满足。"][F.value]??""),Ta=R(()=>{const t=le.value,e=Cr(t==null?void 0:t.herbs);if(!e.length)return"暂无药材明细";const s=e.map(i=>`${i.name} ${i.dosage}g`).join("、");return s.length>120?`${s.slice(0,120)}…`:s}),gs=["recipient_name","recipient_phone","region","shipping_address"],xe=f(),c=me({id:0,prescription_id:0,diagnosis_id:0,recipient_name:"",recipient_phone:"",region:[],shipping_address:"",is_follow_up:0,medication_days:void 0,dose_count:1,dose_unit:"剂",prev_staff:"",service_channel:"",service_package:[],express_company:"auto",tracking_number:"",fee_type:3,amount:0,remark_extra:"",remark_assistant:"",pay_order_ids:[],internal_cost:void 0,assistant_id:0,diagnosis_creator_id:0,diagnosis_creator_name:"",diagnosis_creator_dept_path:""}),bs=R(()=>Nr(Et.value,c.service_package)),Da=R(()=>{const t=String(c.diagnosis_creator_dept_path||"").trim();return t?t.split(";").map(e=>e.trim()).filter(Boolean).map(e=>e.includes(" / ")?e.split(" / ").map(s=>s.trim()).filter(Boolean):e.split("/").map(s=>s.trim()).filter(Boolean)).filter(e=>e.length>0):[]}),qe=f([]),Bt=f(!1),I=f(0);function pt(t){return{1:"挂号费",2:"问诊费",3:"药品费用",4:"首付",5:"尾款",6:"其他"}[Number(t)]||"未知"}const Ht=R(()=>{const t=new Set(c.pay_order_ids.map(s=>Number(s)));let e=0;for(const s of qe.value)t.has(Number(s.id))&&(e+=Number(s.amount)||0);return Math.round(e*100)/100}),xs=R(()=>{const t=I.value;return t>0?Math.round(t*100)/100:0});async function ks(t,e){var s,i;if(!t){qe.value=[];return}try{Bt.value=!0;const o=await ol({diagnosis_id:t,...e?{prescription_order_id:e}:{}}),d=(o==null?void 0:o.lists)??((s=o==null?void 0:o.data)==null?void 0:s.lists)??[];qe.value=Array.isArray(d)?d:[];const p=Number((o==null?void 0:o.deposit_min_amount)??((i=o==null?void 0:o.data)==null?void 0:i.deposit_min_amount));!Number.isNaN(p)&&p>=0&&(I.value=p)}catch{qe.value=[]}finally{Bt.value=!1}}const hs=R(()=>{const t={recipient_name:[{required:!0,message:"请输入收货人",trigger:"blur"}],recipient_phone:[{required:!0,message:"请输入收货手机",trigger:"blur"}],region:[{required:!0,message:"请选择省/市/区",trigger:"change",type:"array"}],shipping_address:[{required:!0,message:"请输入收货地址",trigger:"blur"}],fee_type:[{required:!0,message:"请选择费用类别",trigger:"change"}],amount:[{required:!0,message:"请输入订单金额",trigger:"blur"},{validator:(e,s,i)=>{const o=I.value,d=Number(s);if(o>0&&(!Number.isFinite(d)||d{var t;return((t=B.value)==null?void 0:t.detail)??null}),os=R(()=>{var e;const t=(e=T.value)==null?void 0:e.prescription;return t&&typeof t=="object"?t:null}),Ra=R(()=>`${c.dose_unit||"剂"}数`),Fe=f(!1),It=f(!1),it=f(),de=me({id:0,amount:void 0}),us={amount:[{required:!0,message:"请输入订单金额",trigger:"blur"},{validator:(t,e,s)=>{const i=Number(e);if(!Number.isFinite(i)||i<0){s(new Error("订单金额不能为负数"));return}s()},trigger:"blur"}]},Ve=f(null),ot=f(!1),Le=R(()=>Sr(Ve.value)),Ie=f(!1),qt=f(!1),zt=f(),ae=me({patient_name:"",phone:""}),ds={patient_name:[{required:!0,message:"请输入患者姓名",trigger:"blur"}],phone:[{required:!0,message:"请输入手机号",trigger:"blur"}]};function ps(){const t=os.value,e=T.value;if(!t||!(e!=null&&e.id)||!e.prescription_id){w.msgWarning("无处方数据");return}ae.patient_name=String(t.patient_name??"").trim(),ae.phone=String(t.phone??"").trim(),Ie.value=!0,et(()=>{var s;return(s=zt.value)==null?void 0:s.clearValidate()})}function cs(){ae.patient_name="",ae.phone=""}function ms(){var t;de.id=0,de.amount=void 0,(t=it.value)==null||t.clearValidate()}function _s(){const t=T.value;if(!sl(t)){w.msgWarning("当前订单状态不允许修改金额");return}de.id=Number(t==null?void 0:t.id)||0;const e=Number(t==null?void 0:t.amount);de.amount=Number.isFinite(e)?e:void 0,Fe.value=!0,et(()=>{var s;return(s=it.value)==null?void 0:s.clearValidate()})}async function ut(){var t;await((t=B.value)==null?void 0:t.refresh())}async function fs(){var s;const t=zt.value;if(!t)return;try{await t.validate()}catch{return}const e=(s=T.value)==null?void 0:s.id;if(e){qt.value=!0;try{await Fr({id:e,patient_name:ae.patient_name.trim(),phone:ae.phone.trim()}),Ie.value=!1,await ut()}catch(i){console.error(i)}finally{qt.value=!1}}}async function Ea(){const t=it.value;if(!t)return;try{await t.validate()}catch{return}if(!sl(T.value)){w.msgWarning("当前订单状态不允许修改金额");return}const e=de.id;It.value=!0;try{await Lr({id:e,amount:Number(de.amount)}),w.msgSuccess("修改成功"),Fe.value=!1,await ut(),U()}catch{}finally{It.value=!1}}async function vs(t){var e;await((e=B.value)==null?void 0:e.open(t))}const be=f(!1),jt=f(!1),Mt=f(!1),F=f(0),le=f(null),se=f(!1),dt=f(""),ys=R(()=>["请核对收货信息,便于发货与物流联系。","按需填写服务与物流,并选择本诊单下需要关联的支付单。","确认费用类别与订单金额;保存前请对照定金门槛是否已满足。"][F.value]??""),Ta=R(()=>{const t=le.value,e=Cr(t==null?void 0:t.herbs);if(!e.length)return"暂无药材明细";const s=e.map(i=>`${i.name} ${i.dosage}g`).join("、");return s.length>120?`${s.slice(0,120)}…`:s}),gs=["recipient_name","recipient_phone","region","shipping_address"],xe=f(),c=me({id:0,prescription_id:0,diagnosis_id:0,recipient_name:"",recipient_phone:"",region:[],shipping_address:"",is_follow_up:0,medication_days:void 0,dose_count:1,dose_unit:"剂",prev_staff:"",service_channel:"",service_package:[],express_company:"auto",tracking_number:"",fee_type:3,amount:0,remark_extra:"",remark_assistant:"",pay_order_ids:[],internal_cost:void 0,assistant_id:0,diagnosis_creator_id:0,diagnosis_creator_name:"",diagnosis_creator_dept_path:""}),bs=R(()=>Nr(Et.value,c.service_package)),Da=R(()=>{const t=String(c.diagnosis_creator_dept_path||"").trim();return t?t.split(";").map(e=>e.trim()).filter(Boolean).map(e=>e.includes(" / ")?e.split(" / ").map(s=>s.trim()).filter(Boolean):e.split("/").map(s=>s.trim()).filter(Boolean)).filter(e=>e.length>0):[]}),qe=f([]),Bt=f(!1),I=f(0);function pt(t){return{1:"挂号费",2:"问诊费",3:"药品费用",4:"首付",5:"尾款",6:"其他"}[Number(t)]||"未知"}const Ht=R(()=>{const t=new Set(c.pay_order_ids.map(s=>Number(s)));let e=0;for(const s of qe.value)t.has(Number(s.id))&&(e+=Number(s.amount)||0);return Math.round(e*100)/100}),xs=R(()=>{const t=I.value;return t>0?Math.round(t*100)/100:0});async function ks(t,e){var s,i;if(!t){qe.value=[];return}try{Bt.value=!0;const o=await ol({diagnosis_id:t,...e?{prescription_order_id:e}:{}}),d=(o==null?void 0:o.lists)??((s=o==null?void 0:o.data)==null?void 0:s.lists)??[];qe.value=Array.isArray(d)?d:[];const p=Number((o==null?void 0:o.deposit_min_amount)??((i=o==null?void 0:o.data)==null?void 0:i.deposit_min_amount));!Number.isNaN(p)&&p>=0&&(I.value=p)}catch{qe.value=[]}finally{Bt.value=!1}}const hs=R(()=>{const t={recipient_name:[{required:!0,message:"请输入收货人",trigger:"blur"}],recipient_phone:[{required:!0,message:"请输入收货手机",trigger:"blur"}],region:[{required:!0,message:"请选择省/市/区",trigger:"change",type:"array"}],shipping_address:[{required:!0,message:"请输入收货地址",trigger:"blur"}],fee_type:[{required:!0,message:"请选择费用类别",trigger:"change"}],amount:[{required:!0,message:"请输入订单金额",trigger:"blur"},{validator:(e,s,i)=>{const o=I.value,d=Number(s);if(o>0&&(!Number.isFinite(d)||d
接诊诊单:${d[0]}
金额:${Number(d[1]).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})} 元`:""}},grid:{left:48,right:24,top:28,bottom:32,containLabel:!0},xAxis:{type:"value",name:"接诊诊单",nameLocation:"middle",nameGap:28,splitLine:{lineStyle:{type:"dashed",opacity:.55}}},yAxis:{type:"value",name:"成交金额",nameLocation:"middle",nameGap:40,splitLine:{lineStyle:{type:"dashed",opacity:.55}}},series:[{type:"scatter",data:n}]}}),It=C(()=>B.value.filter(e=>Number(e.deal_amount??0)+Number(e.deal_order_count??0)+Number(e.system_prescription_count??0)+Number(e.manual_prescription_count??0)>0).length>=2),Ha=C(()=>{const t=[...B.value].filter(p=>Number(p.deal_amount??0)+Number(p.deal_order_count??0)+Number(p.system_prescription_count??0)+Number(p.manual_prescription_count??0)>0).sort((p,L)=>Number(L.deal_amount)-Number(p.deal_amount)).slice(0,5);if(t.length<2)return{radar:{indicator:[]},series:[{type:"radar",data:[]}]};const e=p=>{const L=String(p.doctor_name||"—");return L.length>7?`${L.slice(0,7)}…`:L},n=p=>Number(p.system_prescription_count??0)+Number(p.manual_prescription_count??0),s=p=>{const L=Number(p.avg_deal_amount);if(Number.isFinite(L)&&L>0)return L;const Y=Number(p.deal_order_count);return Y>0?Number(p.deal_amount)/Y:0},d=Math.max(...t.map(p=>Number(p.deal_amount)),1e-9),g=Math.max(...t.map(p=>Number(p.deal_order_count)),1e-9),b=Math.max(...t.map(n),1e-9),w=Math.max(...t.map(p=>Number(p.appointment_completed??0)),1e-9),I=Math.max(...t.map(s),1e-9),E=t.map(p=>({name:e(p),value:[Number(p.deal_amount)/d*100,Number(p.deal_order_count)/g*100,n(p)/b*100,Number(p.appointment_completed??0)/w*100,s(p)/I*100]}));return{color:["#2563eb","#0d9488","#d97706","#7c3aed","#64748b"],tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",textStyle:{fontSize:10}},radar:{indicator:[{name:"成交金额",max:100},{name:"接诊诊单",max:100},{name:"开方量",max:100},{name:"挂号完成",max:100},{name:"客单价",max:100}],radius:"58%",center:["50%","48%"],splitNumber:4,axisName:{fontSize:10,color:"#64748b"}},series:[{type:"radar",data:E,emphasis:{lineStyle:{width:3}}}]}}),Wa=C(()=>{const t=[...B.value].filter(s=>Number(s.deal_amount??0)>0).sort((s,d)=>Number(d.deal_amount)-Number(s.deal_amount)).slice(0,20),e=t.map(s=>{const d=String(s.doctor_name||"—");return d.length>10?`${d.slice(0,10)}…`:d}),n=t.map(s=>Number(s.deal_amount??0));return{color:["#2563eb"],tooltip:{trigger:"axis",axisPointer:{type:"shadow"},valueFormatter:s=>`${s.toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})} 元`},grid:{left:8,right:16,top:28,bottom:8,containLabel:!0},xAxis:{type:"value",axisLabel:{fontSize:11},splitLine:{lineStyle:{type:"dashed",opacity:.6}}},yAxis:{type:"category",data:[...e].reverse(),axisLabel:{fontSize:11}},series:[{name:"成交金额",type:"bar",data:[...n].reverse(),barMaxWidth:22,itemStyle:{borderRadius:[0,6,6,0]}}]}}),qa=C(()=>{const t=[...B.value].filter(n=>Number(n.system_prescription_count??0)+Number(n.manual_prescription_count??0)>0).sort((n,s)=>Number(s.system_prescription_count??0)+Number(s.manual_prescription_count??0)-(Number(n.system_prescription_count??0)+Number(n.manual_prescription_count??0))).slice(0,14),e=t.map(n=>{const s=String(n.doctor_name||"—");return s.length>6?`${s.slice(0,6)}…`:s});return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},legend:{top:0,textStyle:{fontSize:11}},grid:{left:44,right:16,top:32,bottom:e.length>10?72:28},xAxis:{type:"category",data:e,axisLabel:{rotate:e.length>8?32:0,fontSize:10}},yAxis:{type:"value",splitLine:{lineStyle:{type:"dashed",opacity:.6}}},series:[{name:"系统开方",type:"bar",stack:"rx",barMaxWidth:18,data:t.map(n=>Number(n.system_prescription_count??0)),itemStyle:{color:"#2563eb"}},{name:"手动开方",type:"bar",stack:"rx",barMaxWidth:18,data:t.map(n=>Number(n.manual_prescription_count??0)),itemStyle:{color:"#d97706"}}]}});function Ga(){var e,n;const t={};if(x.value&&(t.channel_code=x.value),z.value.length>0&&(t.dept_ids=z.value.join(",")),(e=H.value)!=null&&e[0]&&((n=H.value)!=null&&n[1]))t.start_date=H.value[0],t.end_date=H.value[1];else{const s=gt(new Date);t.start_date=s,t.end_date=s}return t}function ta(t){return Number(t??0).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})}function aa(t){if(t==null||t==="")return"—";const e=Number(t);return Number.isFinite(e)?`${e.toFixed(2)}%`:"—"}function Ja(t){const e=pe.value,n=[];return t.columns.forEach((s,d)=>{if(d===0){n[d]="合计";return}switch(s.property){case"system_prescription_count":n[d]=String(e.system_prescription_count??0);break;case"manual_prescription_count":n[d]=String(e.manual_prescription_count??0);break;case"deal_amount":n[d]=`¥ ${ta(e.deal_amount)}`;break;case"deal_order_count":n[d]=String(e.deal_order_count??0);break;case"appointment_total":n[d]=String(e.appointment_total??0);break;case"appointment_completed":n[d]=String(e.appointment_completed??0);break;case"appointment_missed":n[d]=String(e.appointment_missed??0);break;case"appointment_cancelled":n[d]=String(e.appointment_cancelled??0);break;case"appointment_conversion_rate":n[d]=aa(e.appointment_conversion_rate);break;default:n[d]=""}}),n}async function Mt(){if(!W.value){B.value=[],pe.value={},Be.value=null;return}Ve.value=!0;try{const t=await Pl(Ga());B.value=(t==null?void 0:t.rows)??[],pe.value=(t==null?void 0:t.total)??{},t!=null&&t.start_date&&(t!=null&&t.end_date)&&(Be.value={start:t.start_date,end:t.end_date})}catch(t){if(te.isCancel(t))return;B.value=[],pe.value={},Be.value=null}finally{Ve.value=!1}}const se=v(!1),we=v(!1),et=v(""),tt=v(""),ke=v([]),_t=v(0),Z=v(1),pt=v(15),X=v("channel"),q=v(null),at=v(null),ie=v(null),na=C(()=>{const t=ie.value;if(!t)return null;const e=t.stats_order_amount_performance??t.stats_order_amount_not_cancelled;if(e==null||e==="")return null;const n=Number(e);return Number.isFinite(n)?n:null}),la=C(()=>{const t=ie.value;if(!t||t.stats_yeji_consult_count===void 0||t.stats_yeji_consult_count===null)return null;const e=Number(t.stats_yeji_consult_count);return Number.isFinite(e)?e:null}),Ka=C(()=>ke.value.reduce((t,e)=>t+Number(e.amount??0),0)),oa=C(()=>!!x.value&&se.value),Ot=C(()=>{var e;const t=x.value;if(!t)return"";for(const n of st.value){const s=(e=n.channels)==null?void 0:e.find(d=>d.channel_code===t);if(s!=null&&s.channel_name)return String(s.channel_name)}return t}),Xa=C(()=>{const t=q.value;return t&&X.value==="total"?Number.isFinite(t.channelAmount)?t.channelAmount:null:na.value}),Ye=v(null),mt=v(!1);function Za(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Qa(t){const[e,n]=t.split("-").map(Number);return new Date(e,n,0).getDate()}async function en(){var t,e,n,s;if(!Ze.value){Ye.value=null;return}mt.value=!0,Ye.value=null;try{let d=function(y,$=0){const A=[];for(const R of y??[])A.push({node:R,depth:$}),A.push(...d(R.children??[],$+1));return A},g=function(y){const $=Ce.value.find(J=>Number(J.id)===y);if(!$)return"";const A=Number($.pid);if(!A)return"";const R=Ce.value.find(J=>Number(J.id)===A);return R!=null&&R.name?String(R.name):""},b=function(y){const $=[],A=[y];for(;A.length;){const R=A.shift();for(const J of Ce.value)Number(J.pid)===R&&($.push(J.id),A.push(J.id))}return $},w=function(y,$){const A=new Map;for(const R of(y==null?void 0:y.rows)??[])A.set(Number(R.dept_id),Number(R[$]??0));return A};const I=Za(),E=await Yl({year_month:I}),p=(E==null?void 0:E.rows)??[];if(!p.length)return;const Y=d(p).filter(y=>y.depth>=1&&Number(y.node.target_amount)>0).map(y=>y.node);if(!Y.length)return;const P=new Set,me=Y.map(y=>{const $=Number(y.dept_id),A=b($),R=A.length?A:[$];return R.forEach(J=>P.add(J)),{dept_id:$,dept_name:String(y.dept_name),target_amount:Number(y.target_amount),totalIds:R}});if(!P.size)return;const He=st.value.flatMap(y=>y.channels),G=(t=He.find(y=>y.channel_name.includes("自媒体1")))==null?void 0:t.channel_code,Se=(e=He.find(y=>y.channel_name.includes("自媒体3")))==null?void 0:e.channel_code,Ne=(n=He.find(y=>y.channel_name.includes("自媒体4")))==null?void 0:n.channel_code,We=Array.from(P).join(","),[ve,F,l,h]=await Promise.all([lt({dept_ids:We}),G?lt({dept_ids:We,channel_code:G}):Promise.resolve(null),Se?lt({dept_ids:We,channel_code:Se}):Promise.resolve(null),Ne?lt({dept_ids:We,channel_code:Ne}):Promise.resolve(null)]),m=y=>{var $;return((y==null?void 0:y.tables)??[]).find(A=>String(A.label).includes("月"))??(($=y==null?void 0:y.tables)==null?void 0:$[0])},T=y=>{var $,A;return((y==null?void 0:y.tables)??[]).find(R=>String(R.label).includes("昨"))??((A=y==null?void 0:y.tables)==null?void 0:A[(($=y==null?void 0:y.tables)==null?void 0:$.length)-1])},Ca=w(m(ve),"performance_amount"),Qn=w(T(ve),"performance_amount"),Da=F?w(m(F),"completed_performance_amount"):null,La=l?w(m(l),"completed_performance_amount"):null,za=h?w(m(h),"completed_performance_amount"):null,nt=(y,$)=>$.reduce((A,R)=>A+(y.get(R)??0),0),Ht=new Date,el=Qa(I),tl=Ht.getDate(),al=me.map(y=>{const $=nt(Ca,y.totalIds),A=nt(Qn,y.totalIds),R=Da?nt(Da,y.totalIds):null,J=La?nt(La,y.totalIds):null,$a=za?nt(za,y.totalIds):null,Wt=J!==null||$a!==null?(J??0)+($a??0):null,sl=Math.round(y.target_amount*(tl/el)*100)/100,il=y.target_amount>0?$/y.target_amount:null;return{dept_id:y.dept_id,dept_name:y.dept_name,parent_dept_name:g(y.dept_id),target_amount:y.target_amount,total_amount:$,yesterday_amount:A,douyin_amount:R&&R>0?R:null,tuifen_amount:Wt&&Wt>0?Wt:null,target_progress:sl,completion_rate:il}}),nl=((s=p[0])==null?void 0:s.dept_name)??"",ll=Ht.getMonth()+1,ol=Ht.getDate();Ye.value={title:`${nl}诊金-${ll}.${ol}`,sections:al}}catch{}finally{mt.value=!1}}const tn=C(()=>{var e;const t=(e=S.value)==null?void 0:e.leaderboards;return t?t.filter(n=>n.rows.length>0).length:0}),sa=[{text:"昨天",value:()=>{const t=new Date;return t.setDate(t.getDate()-1),[t,t]}},{text:"最近七天",value:()=>{const t=new Date,e=new Date;return e.setDate(e.getDate()-6),[e,t]}},{text:"本月",value:()=>{const t=new Date;return[new Date(t.getFullYear(),t.getMonth(),1),t]}},{text:"今日",value:()=>{const t=new Date;return[t,t]}},{text:"本周",value:()=>{const t=new Date,e=new Date,n=e.getDay()||7;return e.setDate(e.getDate()-(n-1)),[e,t]}},{text:"上月",value:()=>{const t=new Date,e=new Date(t.getFullYear(),t.getMonth()-1,1),n=new Date(t.getFullYear(),t.getMonth(),0);return[e,n]}}];function an(t){const e=t.value();H.value=[gt(e[0]),gt(e[1])],Ue()}async function nn(){ht.value=!0;try{const t=await Tl();Ce.value=(t||[]).sort((e,n)=>{const s=e.name.includes("中心")?-1:1,d=n.name.includes("中心")?-1:1;return s!==d?s-d:e.id-n.id})}catch{}finally{ht.value=!1}}async function ln(){wt.value=!0;try{const t=await Il(),e=(t==null?void 0:t.groups)||[];st.value=e}catch{}finally{wt.value=!1}}async function ia(t){if(!oe.value){S.value=null;return}de.value=!0;try{const e={start_date:t.start,end_date:t.end};z.value.length>0&&(e.dept_ids=z.value.join(",")),x.value&&(e.channel_code=x.value);const n=await El(e);S.value={start_date:n.start_date,end_date:n.end_date,channel_code:n.channel_code||"",channel_name:n.channel_name||"",channel_filter_note:n.channel_filter_note||"",range_note:n.range_note||"",leaderboards:n.leaderboards||[]}}catch(e){if(te.isCancel(e))return;S.value=null}finally{de.value=!1}}async function Ue(){if(ne.value=!0,S.value=null,!Fe.value){re.value=[],ne.value=!1,W.value?Mt():(B.value=[],pe.value={},Be.value=null);return}try{const t={};if(z.value.length>0&&(t.dept_ids=z.value.join(",")),x.value&&(t.channel_code=x.value),H.value&&H.value[0]&&H.value[1]){const[s,d]=H.value,g={...t,start_date:s,end_date:d},b=await Ml(g);re.value=[{label:s===d?s:`${s} ~ ${d}`,start_date:b.start_date,end_date:b.end_date,channel_code:b.channel_code||"",channel_name:b.channel_name||"",channel_group:b.channel_group||"",channel_filter_note:b.channel_filter_note||"",rows:b.rows||[],total:b.total}],await ia({start:b.start_date,end:b.end_date});return}const e=await lt(t);re.value=((e==null?void 0:e.tables)||[]).map(s=>({label:s.label,start_date:s.start_date,end_date:s.end_date,channel_code:s.channel_code||"",channel_name:s.channel_name||"",channel_group:s.channel_group||"",channel_filter_note:s.channel_filter_note||"",rows:s.rows||[],total:s.total}));const n=gt(new Date);await ia({start:n,end:n})}catch(t){if(te.isCancel(t))return;const e=t;ae.error((e==null?void 0:e.msg)||(e==null?void 0:e.message)||"加载失败")}finally{ne.value=!1,W.value?Mt():(B.value=[],pe.value={},Be.value=null)}}function on(){z.value=[],H.value=null,x.value="",Ue()}function sn(t){return t<=0?!1:Ce.value.some(e=>Number(e.pid)===t)}function rn(t){return{1:"待双审通过",2:"待发货",3:"已完成",4:"已取消",5:"已发货",6:"已签收",7:"进行中",8:"暂不制药",9:"拒收",10:"退款",11:"保留药方",12:"制药缓发"}[Number(t)]??"—"}function vt(t){return t==null||!Number.isFinite(Number(t))?"—":Number(t).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})}function dn(t){return(Z.value-1)*pt.value+t+1}function un(t){const e=(t==null?void 0:t.appointment_date)!=null&&String(t.appointment_date)!==""?String(t.appointment_date):"",n=(t==null?void 0:t.period)!=null&&String(t.period)!==""?String(t.period):"",s=(t==null?void 0:t.appointment_time)!=null&&String(t.appointment_time)!==""?String(t.appointment_time):"",d=[n,s].filter(Boolean).join(" ");return e&&d?`${e} ${d}`:e||d||"—"}function ra(t){if(!t)return"";const e=t.channel_dict_value;if(e!=null&&e!==""){const d=Number(e);if(Number.isFinite(d))return String(Math.trunc(d))}const n=t.channel_source;if(n==null)return"";const s=String(n).trim();return s===""||!/^\d+$/.test(s)?"":String(parseInt(s,10))}function cn(t){if(t==null||t==="")return"—";const e=Number(t);if(Number.isFinite(e)&&e>=1e9&&e<1e15){const s=e<1e12?e*1e3:e,d=new Date(s);if(!Number.isNaN(d.getTime())){const g=d.getFullYear(),b=String(d.getMonth()+1).padStart(2,"0"),w=String(d.getDate()).padStart(2,"0"),I=String(d.getHours()).padStart(2,"0"),E=String(d.getMinutes()).padStart(2,"0");return`${g}-${b}-${w} ${I}:${E}`}}const n=String(t);return n.length>=16?n.slice(0,16):n}function da(){const t=at.value;if(!t)return null;const e={start_time:`${t.start} 00:00:00`,end_time:`${t.end} 23:59:59`,exclude_fulfillment_cancelled:1,yeji_order_drawer:1};return t.mode==="dept"?(e.assistant_dept_id=t.deptId,z.value.length>0&&(e.dept_ids=z.value.join(",")),t.yejiTableRowDeptIds&&t.yejiTableRowDeptIds.length>0&&(e.yeji_table_row_dept_ids=t.yejiTableRowDeptIds.join(","))):(e.assistant_id=t.assistantId,t.erCenterRevisitSlot!==void 0&&(e.yeji_er_center_revisit_only=1,e.yeji_er_center_revisit_slot=t.erCenterRevisitSlot)),x.value&&se.value&&X.value==="channel"&&(e.channel_code=x.value),e}async function _n(){const t=da();if(!t||!x.value)return;const e={...t,channel_code:x.value,page_no:1,page_size:1};try{const n=await Aa(e),s=n!=null&&n.extend&&typeof n.extend=="object"?n.extend:null;s&&s.stats_yeji_drawer_total_performance_amount!=null&&(q.value={totalAmount:Number(s.stats_yeji_drawer_total_performance_amount),totalOrderCount:Number(s.stats_yeji_drawer_total_performance_order_count??0),channelAmount:Number(s.stats_order_amount_performance??0),channelOrderCount:Number((n==null?void 0:n.count)??0)})}catch{}}async function je(){const t=da();if(t){x.value&&X.value==="total"&&(q.value=null),we.value=!0;try{const e={...t,page_no:Z.value,page_size:pt.value},n=await Aa(e);ke.value=Array.isArray(n==null?void 0:n.lists)?n.lists:[],_t.value=Number((n==null?void 0:n.count)??0),ie.value=n!=null&&n.extend&&typeof n.extend=="object"?n.extend:null,x.value&&X.value==="channel"&&ie.value&&ie.value.stats_yeji_drawer_total_performance_amount!=null&&(q.value={totalAmount:Number(ie.value.stats_yeji_drawer_total_performance_amount),totalOrderCount:Number(ie.value.stats_yeji_drawer_total_performance_order_count??0),channelAmount:Number(ie.value.stats_order_amount_performance??0),channelOrderCount:Number((n==null?void 0:n.count)??0)}),x.value&&se.value&&X.value==="total"&&await _n()}catch(e){if(te.isCancel(e))return;const n=e;ae.error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"加载业务订单失败"),ke.value=[],_t.value=0,ie.value=null}finally{we.value=!1}}}function ua(t,e,n){const s=!!(x.value&&t.channel_name);X.value=s?(n==null?void 0:n.listTab)??"channel":"channel",q.value=null,at.value={mode:"dept",deptId:e.dept_id,deptName:e.dept_name,start:t.start_date,end:t.end_date,yejiTableRowDeptIds:t.rows.map(d=>d.dept_id).filter(d=>typeof d=="number"&&d>0)},et.value=`业务订单 · ${e.dept_name}`,tt.value=`创建时间:${t.start_date} ~ ${t.end_date} · 与「合计业绩 / 接诊诊单」同口径:订单创建人人事部门 ∈ 本部门子树 · 不含履约 4/9/10`,Z.value=1,se.value=!0,je()}function pn(t,e,n){const s=!!(x.value&&t.channel_name);X.value=s?n:"channel",q.value=null,at.value={mode:"dept",deptId:e,deptName:"当前展示合计",start:t.start_date,end:t.end_date,yejiTableRowDeptIds:t.rows.map(d=>d.dept_id).filter(d=>typeof d=="number"&&d>0)},et.value="业务订单 · 当前展示合计",tt.value=`创建时间:${t.start_date} ~ ${t.end_date} · 已选展示部门 1 个根节点(含其下全部展示行)· 不含履约 4/9/10`,Z.value=1,se.value=!0,je()}function Et(t,e,n){return!(xe(e)||e.dept_id<=0||n==="channel"&&!t.channel_name)}function Ft(t,e){return!(z.value.length!==1||e==="channel"&&!t.channel_name)}function ca(t,e,n){if(!Et(t,e,n))return;ua(t,e,{listTab:n==="total"?"total":"channel"})}function _a(t,e){if(!Ft(t,e))return;const n=z.value[0];if(!n)return;pn(t,n,e==="total"?"total":"channel")}function mn(t,e,n){X.value="channel",q.value=null,at.value={mode:"assistant",assistantId:t.admin_id,assistantName:t.name,start:e,end:n},et.value=`业务订单 · ${t.name}`,tt.value=`创建时间:${e} ~ ${n} · 创建人=${t.name}(与排行榜诊金同口径)· 不含履约 4/9/10`,Z.value=1,se.value=!0,je()}function Vt(t,e,n,s){X.value="channel",q.value=null,at.value={mode:"assistant",assistantId:t.admin_id,assistantName:t.name,start:e,end:n,erCenterRevisitSlot:s};const d=s===0?"复诊合计":it(s);et.value=`业务订单 · ${t.name} · ${d}`,tt.value=`创建时间:${e} ~ ${n} · 创建人=${t.name}(与部门表 / 排行榜复诊同口径)· 仅二中心复诊口径 · ${d} · 不含履约 4/9/10`,Z.value=1,se.value=!0,je()}function vn(t){if(!t||t.admin_id<=0||!S.value||Number(t.revisit_count??0)<=0)return;const{start_date:e,end_date:n}=S.value;Vt({admin_id:t.admin_id,name:t.name},e,n,0)}function fn(t,e){if(!t||t.admin_id<=0||!S.value||le(t,e)<=0)return;const{start_date:n,end_date:s}=S.value;Vt({admin_id:t.admin_id,name:t.name},n,s,e)}function yn(){Z.value=1,je()}function gn(t){Z.value=t,je()}function bn(t){pt.value=t,Z.value=1,je()}function xe(t){return t.dept_id<=0&&t.dept_name==="未归属中心"}function hn(t,e){e.dept_id<=0||xe(e)||Number(e.revisit_count??0)<=0||ma(t,e,0)}function wn(t,e,n){e.dept_id<=0||xe(e)||le(e,n)<=0||ma(t,e,n)}function pa(t){const e=Xt.value;!e||Number(t.order_count)<=0||Vt({admin_id:t.admin_id,name:t.name},e.start,e.end,e.revisitSlot)}async function ma(t,e,n){const s=n===0?"复诊合计":it(n);Kt.value=`${e.dept_name} · ${s} · ${t.start_date} ~ ${t.end_date}`,Xt.value={start:t.start_date,end:t.end_date,revisitSlot:n},Ge.value="",$e.value=[],St.value=!0,ze.value=!0;try{const d={start_date:t.start_date,end_date:t.end_date,dept_id:e.dept_id,revisit_slot:n};z.value.length>0&&(d.dept_ids=z.value.join(",")),x.value&&(d.channel_code=x.value);const g=await Ol(d);$e.value=Array.isArray(g==null?void 0:g.rows)?g.rows:[],Ge.value=typeof(g==null?void 0:g.note)=="string"?g.note:""}catch(d){if(te.isCancel(d))return;const g=d;ae.error((g==null?void 0:g.msg)||(g==null?void 0:g.message)||"加载复诊拆解失败"),$e.value=[],Ge.value=""}finally{ze.value=!1}}function va(t){const e=[`区间:${t.start_date} ~ ${t.end_date}`];return x.value&&e.push(`渠道:${t.channel_name||x.value}`),z.value.length>0&&e.push(`已选展示部门 ${z.value.length} 个`),e.join(" · ")}async function kn(t){Jt.value=va(t),qe.value="",Le.value=[],xt.value=!0,De.value=!0;try{const e={start_date:t.start_date,end_date:t.end_date};z.value.length>0&&(e.dept_ids=z.value.join(",")),x.value&&(e.channel_code=x.value);const n=await Fl(e);Le.value=Array.isArray(n==null?void 0:n.rows)?n.rows:[],qe.value=typeof(n==null?void 0:n.note)=="string"?n.note:""}catch(e){if(te.isCancel(e))return;const n=e;ae.error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"加载未归属拆解失败"),Le.value=[],qe.value=""}finally{De.value=!1}}function jn(t,e,n){n.dept_id<=0||Number(n.lead_count)<=0||(t.stopPropagation(),Pn(e,n))}function fa(t){return t.dept_id>0&&Number(t.assign_count??0)>0}function xn(t,e,n){fa(n)&&(t.stopPropagation(),Cn(e,n))}function Sn(t){return(he.value-1)*Ee.value+t+1}function Nn(t,e){const n=$t.value;if(!n)return null;const s={start_date:n.start_date,end_date:n.end_date,page:t,page_size:e};return n.mode==="dept"?s.dept_id=n.dept_id:s.assistant_id=n.assistant_id,z.value.length>0&&(s.dept_ids=z.value.join(",")),x.value&&(s.channel_code=x.value),s}async function ft(){const t=Nn(he.value,Ee.value);if(t){ge.value=!0;try{const e=await Vl(t);be.value=Array.isArray(e==null?void 0:e.lists)?e.lists:[],Oe.value=Number((e==null?void 0:e.count)??0),Me.value=typeof(e==null?void 0:e.note)=="string"?e.note:""}catch(e){if(te.isCancel(e))return;const n=e;ae.error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"加载被指派明细失败"),be.value=[],Oe.value=0,Me.value=""}finally{ge.value=!1}}}async function Cn(t,e){$t.value={mode:"dept",dept_id:e.dept_id,dept_name:e.dept_name,start_date:t.start_date,end_date:t.end_date},zt.value=`${e.dept_name} · ${t.start_date} ~ ${t.end_date}`,Me.value="",be.value=[],Oe.value=0,he.value=1,Ee.value=20,ut.value=!0,await ft()}function Dn(t){if(!t||t.admin_id<=0||!S.value||Number(t.assign_count??0)<=0)return;const e=S.value;$t.value={mode:"assistant",assistant_id:t.admin_id,name:t.name,start_date:e.start_date,end_date:e.end_date},zt.value=`${t.name} · 医助 · ${e.start_date} ~ ${e.end_date}`,Me.value="",be.value=[],Oe.value=0,he.value=1,Ee.value=20,ut.value=!0,ft()}function Ln(t){he.value=t,ft()}function zn(t){Ee.value=t,he.value=1,ft()}const ya=[{key:"event_time_text",label:"进线时间"},{key:"reception_admin_name",label:"接待"},{key:"external_contact_name",label:"客户"},{key:"external_userid",label:"外部联系人ID"},{key:"user_id",label:"企微成员ID"},{key:"state",label:"渠道参数"}];function Bt(t,e,n){const{tb:s,row:d}=t,g={start_date:s.start_date,end_date:s.end_date,dept_id:d.dept_id,page:e,page_size:n};return z.value.length>0&&(g.dept_ids=z.value.join(",")),x.value&&(g.channel_code=x.value),g}function ga(t){const e=t==null?"":String(t);return/[",\n\r]/.test(e)?`"${e.replace(/"/g,'""')}"`:e}function $n(t){const e=ya.map(s=>ga(s.label)).join(","),n=t.map(s=>ya.map(d=>ga(s[d.key])).join(",")).join(`
`);return`\uFEFF${e}
${n}`}function An(t,e){const n=new Blob([e],{type:"text/csv;charset=utf-8;"}),s=URL.createObjectURL(n),d=document.createElement("a");d.href=s,d.download=t,d.click(),URL.revokeObjectURL(s)}function Rn(t){const{tb:e,row:n}=t;return`进线数据明细_${(n.dept_name||`dept${n.dept_id}`).replace(/[\\/:*?"<>|]/g,"_")}_${e.start_date}_${e.end_date}.csv`}async function Yt(){const t=Ct.value;if(t){ue.value=!0;try{const e=await qt(Bt(t,Xe.value,rt.value));Ae.value=Array.isArray(e==null?void 0:e.lists)?e.lists:[],Re.value=Number((e==null?void 0:e.count)??0),Ke.value=typeof(e==null?void 0:e.note)=="string"?e.note:""}catch(e){if(te.isCancel(e))return;const n=e;ae.error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"加载进线明细失败"),Ae.value=[],Re.value=0,Ke.value=""}finally{ue.value=!1}}}async function Pn(t,e){Ct.value={tb:t,row:e},Zt.value=`${e.dept_name} · ${va(t)}`,Ke.value="",Ae.value=[],Re.value=0,Xe.value=1,rt.value=20,Nt.value=!0,await Yt()}function Tn(t){Xe.value=t,Yt()}function In(t){rt.value=t,Xe.value=1,Yt()}async function Mn(){const t=Ct.value;if(!(!t||Je.value)){Je.value=!0;try{const n=await qt(Bt(t,1,100)),s=Number((n==null?void 0:n.count)??0);if(s<=0){ae.warning("暂无进线明细可导出");return}const d=Array.isArray(n==null?void 0:n.lists)?[...n.lists]:[],g=Math.ceil(s/100);for(let b=2;b<=g;b++){const w=await qt(Bt(t,b,100)),I=Array.isArray(w==null?void 0:w.lists)?w.lists:[];d.push(...I)}An(Rn(t),$n(d)),ae.success(`已导出 ${d.length} 条进线明细`)}catch(e){if(te.isCancel(e))return;const n=e;ae.error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"导出进线明细失败")}finally{Je.value=!1}}}function On(t){return(ye.value-1)*Ie.value+t+1}function ba(t){return xe(t)?!0:t.dept_id>0}async function yt(){const t=Lt.value;if(t){fe.value=!0;try{const e={start_date:t.start_date,end_date:t.end_date,page:ye.value,page_size:Ie.value};t.mode==="dept"?e.dept_id=t.dept_id:e.assistant_id=t.assistant_id,z.value.length>0&&(e.dept_ids=z.value.join(",")),x.value&&(e.channel_code=x.value);const n=await Bl(e);ce.value=Array.isArray(n==null?void 0:n.lists)?n.lists:[],Te.value=Number((n==null?void 0:n.count)??0),Pe.value=typeof(n==null?void 0:n.note)=="string"?n.note:""}catch(e){if(te.isCancel(e))return;const n=e;ae.error((n==null?void 0:n.msg)||(n==null?void 0:n.message)||"加载挂号明细失败"),ce.value=[],Te.value=0,Pe.value=""}finally{fe.value=!1}}}function En(t){if(!t||t.admin_id<=0||!S.value||Number(t.appointment_count??0)<=0)return;const e=S.value;Lt.value={mode:"assistant",assistant_id:t.admin_id,name:t.name,start_date:e.start_date,end_date:e.end_date},Dt.value=`${t.name} · 医助 · ${e.start_date} ~ ${e.end_date}`,Pe.value="",ce.value=[],Te.value=0,ye.value=1,Ie.value=20,dt.value=!0,yt()}function Fn(t,e){!ba(e)||Number(e.appointment_booked_count??0)<=0||(Lt.value={mode:"dept",dept_id:e.dept_id,dept_name:e.dept_name,start_date:t.start_date,end_date:t.end_date},Dt.value=`${e.dept_name} · ${t.start_date} ~ ${t.end_date}`,Pe.value="",ce.value=[],Te.value=0,ye.value=1,Ie.value=20,dt.value=!0,yt())}function Vn(t){ye.value=t,yt()}function Bn(t){Ie.value=t,ye.value=1,yt()}function Yn(t,e){if(xe(e)){kn(t);return}if(!(e.dept_id<=0)){if(sn(e.dept_id)){z.value=[e.dept_id],Ue();return}ua(t,e)}}function Un(t){if(!t||t.admin_id<=0||!S.value)return;const{start_date:e,end_date:n}=S.value;mn(t,e,n)}function ha(t){const e=t.channel_name?` · ${t.channel_name}`:"";return`${t.label}${e}`}function Hn(t){const e=t.rows.filter(b=>b.dept_id>0),n=e.map(b=>b.dept_name.length>10?`${b.dept_name.slice(0,10)}…`:b.dept_name),s=["#64748b","#38bdf8","#6366f1"],d=[{name:"进线",type:"bar",data:e.map(b=>b.lead_count),yAxisIndex:0,barMaxWidth:16},{name:"接诊",type:"bar",data:e.map(b=>b.consult_count),yAxisIndex:0,barMaxWidth:16},{name:"成交单",type:"bar",data:e.map(b=>b.deal_order_count),yAxisIndex:0,barMaxWidth:16},{name:"合计业绩",type:"bar",data:e.map(b=>b.performance_amount),yAxisIndex:1,barMaxWidth:14,itemStyle:{color:"#d97706"}}];t.channel_name&&d.push({name:`${t.channel_name}业绩`,type:"bar",data:e.map(b=>b.completed_performance_amount),yAxisIndex:1,barMaxWidth:14,itemStyle:{color:"#0d9488"}});const g=e.length>10;return{color:[...s,"#d97706","#0d9488"],tooltip:{trigger:"axis",axisPointer:{type:"cross"}},legend:{top:8,type:"scroll",textStyle:{fontSize:11}},grid:{left:52,right:52,top:48,bottom:g?56:28,containLabel:!1},dataZoom:g?[{type:"slider",bottom:4,start:0,end:Math.min(100,Math.ceil(12/Math.max(e.length,1)*100))}]:[],xAxis:{type:"category",data:n,axisLabel:{rotate:n.length>8?28:0,fontSize:10}},yAxis:[{type:"value",name:"数量",splitLine:{lineStyle:{type:"dashed",opacity:.55}}},{type:"value",name:"金额",splitLine:{show:!1}}],series:d}}function Wn(t,e){const n=[...t.rows].sort((s,d)=>Number(d.fee_amount)-Number(s.fee_amount)).slice(0,15);return{color:["#2563eb"],tooltip:{trigger:"axis",axisPointer:{type:"shadow"},valueFormatter:s=>`${Number(s).toLocaleString("zh-CN")} 元`},grid:{left:8,right:20,top:12,bottom:8,containLabel:!0},xAxis:{type:"value",splitLine:{lineStyle:{type:"dashed",opacity:.6}}},yAxis:{type:"category",data:n.map(s=>s.name.length>8?`${s.name.slice(0,8)}…`:s.name).reverse(),axisLabel:{fontSize:11}},series:[{name:"诊金",type:"bar",data:n.map(s=>Number(s.fee_amount??0)).reverse(),barMaxWidth:20,itemStyle:{borderRadius:[0,6,6,0]}}]}}function wa(t){return t.rows.some(e=>Number(e.fee_amount)>0)}function qn(t,e){const s=[...t.rows].filter(d=>Number(d.fee_amount)>0).sort((d,g)=>Number(g.fee_amount)-Number(d.fee_amount)).slice(0,10).map(d=>({name:d.name.length>6?`${d.name.slice(0,6)}…`:d.name,value:Number(d.fee_amount)}));return{color:["#2563eb","#0d9488","#d97706","#7c3aed","#64748b","#0891b2","#65a30d","#c026d3","#ea580c","#4f46e5"],tooltip:{trigger:"item",formatter:"{b}: {c} 元 ({d}%)"},legend:{type:"scroll",bottom:0,textStyle:{fontSize:9}},series:[{name:"诊金",type:"pie",radius:["38%","64%"],center:["50%","42%"],data:s,itemStyle:{borderRadius:5,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
diff --git a/server/public/admin/assets/yeji-edit-648HM-g8.js b/server/public/admin/assets/yeji-edit-648HM-g8.js
deleted file mode 100644
index 0f5608293..000000000
--- a/server/public/admin/assets/yeji-edit-648HM-g8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as o}from"./yeji-edit.vue_vue_type_script_setup_true_lang-DwovPt3l.js";import"./.pnpm-CC7b2w5D.js";import"./self_input_stats-BqOKBJex.js";import"./index-fgtLtwvK.js";import"./index-BVt2vora.js";import"./MediaSourceSelect.vue_vue_type_script_setup_true_lang-Ds8_XODJ.js";export{o as default};
diff --git a/server/public/admin/assets/yeji-edit-BzQtwieg.js b/server/public/admin/assets/yeji-edit-BzQtwieg.js
new file mode 100644
index 000000000..aece39318
--- /dev/null
+++ b/server/public/admin/assets/yeji-edit-BzQtwieg.js
@@ -0,0 +1 @@
+import{_ as o}from"./yeji-edit.vue_vue_type_script_setup_true_lang-BWWzrBig.js";import"./.pnpm-CC7b2w5D.js";import"./self_input_stats-B20Cl54g.js";import"./index-qHIBxlsP.js";import"./index-wDCk0akB.js";import"./MediaSourceSelect.vue_vue_type_script_setup_true_lang-Ds8_XODJ.js";export{o as default};
diff --git a/server/public/admin/assets/yeji-edit.vue_vue_type_script_setup_true_lang-DwovPt3l.js b/server/public/admin/assets/yeji-edit.vue_vue_type_script_setup_true_lang-BWWzrBig.js
similarity index 98%
rename from server/public/admin/assets/yeji-edit.vue_vue_type_script_setup_true_lang-DwovPt3l.js
rename to server/public/admin/assets/yeji-edit.vue_vue_type_script_setup_true_lang-BWWzrBig.js
index e7433503a..63952806b 100644
--- a/server/public/admin/assets/yeji-edit.vue_vue_type_script_setup_true_lang-DwovPt3l.js
+++ b/server/public/admin/assets/yeji-edit.vue_vue_type_script_setup_true_lang-BWWzrBig.js
@@ -1 +1 @@
-import{o as C,q as D,r as Y,v as o,D as n,b9 as S,u as l,b6 as q,bp as F,c7 as B,c8 as I,J as M,b7 as L,a8 as f,M as O,p as z,ba as A}from"./.pnpm-CC7b2w5D.js";import{f as J,h as P}from"./self_input_stats-BqOKBJex.js";import{_ as T}from"./index-BVt2vora.js";import{_ as $}from"./MediaSourceSelect.vue_vue_type_script_setup_true_lang-Ds8_XODJ.js";const G={class:"edit-popup"},X=C({__name:"yeji-edit",props:{mediaSourceOptions:{default:()=>[]},mediaSourceLoading:{type:Boolean,default:!1}},emits:["success","close"],setup(s,{expose:b,emit:V}){const i=V,c=f(),m=f(),_=O("add"),w=z(()=>_.value==="edit"?"编辑业绩":"新增业绩"),e=A({id:"",yeji_date:"",media_source:"",add_fans_count:0,total_open_count:0,unreplied_count:0,paid_appointment_count:0,free_appointment_count:0,interview_count:0,order_amount:0,completed_order_count:0,remark:""}),g={yeji_date:[{required:!0,message:"请选择业绩日期",trigger:["change"]}],media_source:[{required:!0,message:"请填写自媒体来源",trigger:["blur"]}],add_fans_count:[{required:!0,message:"请填写加粉数",trigger:["blur","change"]}]},v=()=>{e.id="",e.yeji_date="",e.media_source="",e.add_fans_count=0,e.total_open_count=0,e.unreplied_count=0,e.paid_appointment_count=0,e.free_appointment_count=0,e.interview_count=0,e.order_amount=0,e.completed_order_count=0,e.remark=""},y=async()=>{var u,t;await((u=c.value)==null?void 0:u.validate()),_.value==="edit"?await J(e):await P(e),(t=m.value)==null||t.close(),i("success")},k=(u="add")=>{var t;_.value=u,v(),(t=m.value)==null||t.open()},j=u=>{e.id=u.id??"",e.yeji_date=u.yeji_date??"",e.media_source=u.media_source??"",e.add_fans_count=Number(u.add_fans_count??0),e.total_open_count=Number(u.total_open_count??0),e.unreplied_count=Number(u.unreplied_count??0),e.paid_appointment_count=Number(u.paid_appointment_count??0),e.free_appointment_count=Number(u.free_appointment_count??0),e.interview_count=Number(u.interview_count??0),e.order_amount=Number(u.order_amount??0),e.completed_order_count=Number(u.completed_order_count??0),e.remark=u.remark??""},U=()=>{i("close")};return b({open:k,setFormData:j}),(u,t)=>{const N=F,d=q,r=M,p=I,x=B,E=L,R=S;return D(),Y("div",G,[o(T,{ref_key:"popupRef",ref:m,title:l(w),async:!0,width:"640px",onConfirm:y,onClose:U},{default:n(()=>[o(R,{ref_key:"formRef",ref:c,model:l(e),"label-width":"110px",rules:g},{default:n(()=>[o(d,{label:"业绩日期",prop:"yeji_date"},{default:n(()=>[o(N,{modelValue:l(e).yeji_date,"onUpdate:modelValue":t[0]||(t[0]=a=>l(e).yeji_date=a),type:"date","value-format":"YYYY-MM-DD",placeholder:"请选择日期",disabled:l(_)==="edit",class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),o(d,{label:"自媒体来源",prop:"media_source"},{default:n(()=>[o($,{modelValue:l(e).media_source,"onUpdate:modelValue":t[1]||(t[1]=a=>l(e).media_source=a),options:s.mediaSourceOptions,loading:s.mediaSourceLoading,placeholder:"请选择自媒体来源","allow-create":!1,disabled:l(_)==="edit","select-class":"w-full"},null,8,["modelValue","options","loading","disabled"])]),_:1}),o(x,{gutter:16},{default:n(()=>[o(p,{span:12},{default:n(()=>[o(d,{label:"加粉数",prop:"add_fans_count"},{default:n(()=>[o(r,{modelValue:l(e).add_fans_count,"onUpdate:modelValue":t[2]||(t[2]=a=>l(e).add_fans_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"总开口",prop:"total_open_count"},{default:n(()=>[o(r,{modelValue:l(e).total_open_count,"onUpdate:modelValue":t[3]||(t[3]=a=>l(e).total_open_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"未回复",prop:"unreplied_count"},{default:n(()=>[o(r,{modelValue:l(e).unreplied_count,"onUpdate:modelValue":t[4]||(t[4]=a=>l(e).unreplied_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"付费挂号",prop:"paid_appointment_count"},{default:n(()=>[o(r,{modelValue:l(e).paid_appointment_count,"onUpdate:modelValue":t[5]||(t[5]=a=>l(e).paid_appointment_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"免费挂号",prop:"free_appointment_count"},{default:n(()=>[o(r,{modelValue:l(e).free_appointment_count,"onUpdate:modelValue":t[6]||(t[6]=a=>l(e).free_appointment_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"面诊",prop:"interview_count"},{default:n(()=>[o(r,{modelValue:l(e).interview_count,"onUpdate:modelValue":t[7]||(t[7]=a=>l(e).interview_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"订单金额",prop:"order_amount"},{default:n(()=>[o(r,{modelValue:l(e).order_amount,"onUpdate:modelValue":t[8]||(t[8]=a=>l(e).order_amount=a),min:0,step:.01,precision:2,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"接诊诊单",prop:"completed_order_count"},{default:n(()=>[o(r,{modelValue:l(e).completed_order_count,"onUpdate:modelValue":t[9]||(t[9]=a=>l(e).completed_order_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),o(d,{label:"备注",prop:"remark"},{default:n(()=>[o(E,{modelValue:l(e).remark,"onUpdate:modelValue":t[10]||(t[10]=a=>l(e).remark=a),type:"textarea",autosize:{minRows:3,maxRows:5},maxlength:"255","show-word-limit":"",placeholder:"选填"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["title"])])}}});export{X as _};
+import{o as C,q as D,r as Y,v as o,D as n,b9 as S,u as l,b6 as q,bp as F,c7 as B,c8 as I,J as M,b7 as L,a8 as f,M as O,p as z,ba as A}from"./.pnpm-CC7b2w5D.js";import{f as J,h as P}from"./self_input_stats-B20Cl54g.js";import{_ as T}from"./index-wDCk0akB.js";import{_ as $}from"./MediaSourceSelect.vue_vue_type_script_setup_true_lang-Ds8_XODJ.js";const G={class:"edit-popup"},X=C({__name:"yeji-edit",props:{mediaSourceOptions:{default:()=>[]},mediaSourceLoading:{type:Boolean,default:!1}},emits:["success","close"],setup(s,{expose:b,emit:V}){const i=V,c=f(),m=f(),_=O("add"),w=z(()=>_.value==="edit"?"编辑业绩":"新增业绩"),e=A({id:"",yeji_date:"",media_source:"",add_fans_count:0,total_open_count:0,unreplied_count:0,paid_appointment_count:0,free_appointment_count:0,interview_count:0,order_amount:0,completed_order_count:0,remark:""}),g={yeji_date:[{required:!0,message:"请选择业绩日期",trigger:["change"]}],media_source:[{required:!0,message:"请填写自媒体来源",trigger:["blur"]}],add_fans_count:[{required:!0,message:"请填写加粉数",trigger:["blur","change"]}]},v=()=>{e.id="",e.yeji_date="",e.media_source="",e.add_fans_count=0,e.total_open_count=0,e.unreplied_count=0,e.paid_appointment_count=0,e.free_appointment_count=0,e.interview_count=0,e.order_amount=0,e.completed_order_count=0,e.remark=""},y=async()=>{var u,t;await((u=c.value)==null?void 0:u.validate()),_.value==="edit"?await J(e):await P(e),(t=m.value)==null||t.close(),i("success")},k=(u="add")=>{var t;_.value=u,v(),(t=m.value)==null||t.open()},j=u=>{e.id=u.id??"",e.yeji_date=u.yeji_date??"",e.media_source=u.media_source??"",e.add_fans_count=Number(u.add_fans_count??0),e.total_open_count=Number(u.total_open_count??0),e.unreplied_count=Number(u.unreplied_count??0),e.paid_appointment_count=Number(u.paid_appointment_count??0),e.free_appointment_count=Number(u.free_appointment_count??0),e.interview_count=Number(u.interview_count??0),e.order_amount=Number(u.order_amount??0),e.completed_order_count=Number(u.completed_order_count??0),e.remark=u.remark??""},U=()=>{i("close")};return b({open:k,setFormData:j}),(u,t)=>{const N=F,d=q,r=M,p=I,x=B,E=L,R=S;return D(),Y("div",G,[o(T,{ref_key:"popupRef",ref:m,title:l(w),async:!0,width:"640px",onConfirm:y,onClose:U},{default:n(()=>[o(R,{ref_key:"formRef",ref:c,model:l(e),"label-width":"110px",rules:g},{default:n(()=>[o(d,{label:"业绩日期",prop:"yeji_date"},{default:n(()=>[o(N,{modelValue:l(e).yeji_date,"onUpdate:modelValue":t[0]||(t[0]=a=>l(e).yeji_date=a),type:"date","value-format":"YYYY-MM-DD",placeholder:"请选择日期",disabled:l(_)==="edit",class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),o(d,{label:"自媒体来源",prop:"media_source"},{default:n(()=>[o($,{modelValue:l(e).media_source,"onUpdate:modelValue":t[1]||(t[1]=a=>l(e).media_source=a),options:s.mediaSourceOptions,loading:s.mediaSourceLoading,placeholder:"请选择自媒体来源","allow-create":!1,disabled:l(_)==="edit","select-class":"w-full"},null,8,["modelValue","options","loading","disabled"])]),_:1}),o(x,{gutter:16},{default:n(()=>[o(p,{span:12},{default:n(()=>[o(d,{label:"加粉数",prop:"add_fans_count"},{default:n(()=>[o(r,{modelValue:l(e).add_fans_count,"onUpdate:modelValue":t[2]||(t[2]=a=>l(e).add_fans_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"总开口",prop:"total_open_count"},{default:n(()=>[o(r,{modelValue:l(e).total_open_count,"onUpdate:modelValue":t[3]||(t[3]=a=>l(e).total_open_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"未回复",prop:"unreplied_count"},{default:n(()=>[o(r,{modelValue:l(e).unreplied_count,"onUpdate:modelValue":t[4]||(t[4]=a=>l(e).unreplied_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"付费挂号",prop:"paid_appointment_count"},{default:n(()=>[o(r,{modelValue:l(e).paid_appointment_count,"onUpdate:modelValue":t[5]||(t[5]=a=>l(e).paid_appointment_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"免费挂号",prop:"free_appointment_count"},{default:n(()=>[o(r,{modelValue:l(e).free_appointment_count,"onUpdate:modelValue":t[6]||(t[6]=a=>l(e).free_appointment_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"面诊",prop:"interview_count"},{default:n(()=>[o(r,{modelValue:l(e).interview_count,"onUpdate:modelValue":t[7]||(t[7]=a=>l(e).interview_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"订单金额",prop:"order_amount"},{default:n(()=>[o(r,{modelValue:l(e).order_amount,"onUpdate:modelValue":t[8]||(t[8]=a=>l(e).order_amount=a),min:0,step:.01,precision:2,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),o(p,{span:12},{default:n(()=>[o(d,{label:"接诊诊单",prop:"completed_order_count"},{default:n(()=>[o(r,{modelValue:l(e).completed_order_count,"onUpdate:modelValue":t[9]||(t[9]=a=>l(e).completed_order_count=a),min:0,step:1,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),o(d,{label:"备注",prop:"remark"},{default:n(()=>[o(E,{modelValue:l(e).remark,"onUpdate:modelValue":t[10]||(t[10]=a=>l(e).remark=a),type:"textarea",autosize:{minRows:3,maxRows:5},maxlength:"255","show-word-limit":"",placeholder:"选填"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["title"])])}}});export{X as _};
diff --git a/server/public/admin/index.html b/server/public/admin/index.html
index b19d2ce3c..d6acbeb05 100644
--- a/server/public/admin/index.html
+++ b/server/public/admin/index.html
@@ -163,7 +163,7 @@
z-index: 2147483641;
}
-
+
diff --git a/server/public/is.xml b/server/public/is.xml
new file mode 100755
index 000000000..8301ee406
--- /dev/null
+++ b/server/public/is.xml
@@ -0,0 +1,1809 @@
+#---------------------------------------------------#
+## 更新:2026-04-17 09:55:54
+## 感谢:https://github.com/Hackl0us/SS-Rule-Snippet
+## 链接:https://cdn2.xmrth.one/s/ufiz25j447ua-9931a327?clash=1
+#---------------------------------------------------#
+
+# HTTP 代理端口
+port: 7890
+
+# SOCKS5 代理端口
+socks-port: 7891
+
+# Linux 和 macOS 的 redir 代理端口
+redir-port: 7892
+
+mixed-port: 7893
+
+# 允许局域网的连接
+allow-lan: false
+
+# 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连)
+mode: rule
+
+# 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。
+# 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。
+log-level: silent
+# Clash 的 RESTful API
+external-controller: '127.0.0.1:9090'
+
+# RESTful API 的口令
+secret: ''
+
+clash-for-android:
+ append-system-dns: false
+profile:
+ tracing: false
+experimental:
+ sniff-tls-sni: true
+
+# 您可以将静态网页资源(如 clash-dashboard)放置在一个目录中,clash 将会服务于 `RESTful API/ui`
+# 参数应填写配置目录的相对路径或绝对路径。
+# external-ui: folder
+
+
+proxies:
+ - {"name":"香港800 专线 BGP","type":"trojan","server":"ktc1s.xmrthnode.com","port":48800,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港300 中继 BGP","type":"trojan","server":"ktc1s.xmrthnode.com","port":41300,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港301 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41301,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港302 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41302,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"cos.ap-guangzhou.myqcloud.com","skip-cert-verify":true,"udp":true}
+ - {"name":"香港303 中继","type":"trojan","server":"ktc1k.xmrthnode.com","port":41303,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港304 中继","type":"trojan","server":"ktc1k.xmrthnode.com","port":41304,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港305 中继","type":"trojan","server":"mb1b.xmrthnode.com","port":41305,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港306 中继 IDC","type":"trojan","server":"ktc1k.xmrthnode.com","port":41306,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港307 中继 IDC","type":"trojan","server":"ktc1s.xmrthnode.com","port":41307,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港501 中继 动态","type":"trojan","server":"mb1b.xmrthnode.com","port":41001,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"狮城502 中继 动态","type":"trojan","server":"nb1b.xmrthnode.com","port":41001,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"香港503 中继 动态","type":"trojan","server":"mb1b.xmrthnode.com","port":41001,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"狮城504 中继 动态","type":"trojan","server":"nb1b.xmrthnode.com","port":41001,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"台湾611 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41011,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"台湾612 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41012,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"台湾613 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41013,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"台湾614 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41014,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"日本621 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41021,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"日本622 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41022,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"日本623 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41023,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"日本624 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41024,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"日本625 中继","type":"trojan","server":"ktc1k.xmrthnode.com","port":41023,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"美国631 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41031,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"美国632 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41032,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"美国633 中继","type":"trojan","server":"ktf1s.xmrthnode.com","port":41033,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"美国634 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41034,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"美国635 中继 AI","type":"trojan","server":"ktc1s.xmrthnode.com","port":41035,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"新加坡641 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41040,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"新加坡642 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41042,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"新加坡643 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41043,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"新加坡644 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41044,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"英国751 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41051,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"俄罗斯752 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41052,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"马来753 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41053,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"韩国754 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41054,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"韩国755 中继","type":"trojan","server":"ktc1k.xmrthnode.com","port":41054,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"阿根廷756 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41055,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"土耳其757 中继","type":"trojan","server":"ktc1s.xmrthnode.com","port":41056,"password":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","sni":"mmbiz.qpic.cn","skip-cert-verify":true,"udp":true}
+ - {"name":"IPV6 香港901 中继","type":"vmess","server":"v6cn30.xmrthnode.com","port":42300,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/th","headers":{"Host":"10.5.96.3"}},"ws-path":"/th","ws-headers":{"Host":"10.5.96.3"}}
+ - {"name":"IPV6 香港902 中继","type":"vmess","server":"v6cn41.xmrthnode.com","port":42300,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/th","headers":{"Host":"10.5.96.3"}},"ws-path":"/th","ws-headers":{"Host":"10.5.96.3"}}
+ - {"name":"IPV6 香港903 中继","type":"vmess","server":"v6hk1.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/xv6","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/xv6","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"IPV6 日本905 中继","type":"vmess","server":"v6jp1.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/xv6","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/xv6","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"IPV6 狮城904 中继","type":"vmess","server":"v6sg1.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/xv6","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/xv6","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"IPV6 美国906 中继","type":"vmess","server":"v6us1.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/xv6","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/xv6","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 000","type":"vmess","server":"txh000.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 001","type":"vmess","server":"txh001.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 002","type":"vmess","server":"txh002.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 003","type":"vmess","server":"txh003.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 011","type":"vmess","server":"txh011.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 012","type":"vmess","server":"txh012.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"HK 013","type":"vmess","server":"txh013.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"JP 001","type":"vmess","server":"txj001.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"JP 002","type":"vmess","server":"txj002.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"RU 001","type":"vmess","server":"txr001.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"SG 011","type":"vmess","server":"txs011.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"SG 012","type":"vmess","server":"txs012.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"TW 001","type":"vmess","server":"txt001.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"TW 002","type":"vmess","server":"txt002.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"TW 021","type":"vmess","server":"txt021.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"US 001","type":"vmess","server":"txu001.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"US 002","type":"vmess","server":"txu002.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"US 013","type":"vmess","server":"txu013.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"*官网xmrth1.net 其他渠道均为倒卖*","type":"vmess","server":"txh000.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"*用不了请更新订阅*若失败请关代理重试*","type":"vmess","server":"txh002.xmrthnode.com","port":443,"uuid":"4dd64ca4-64ab-3112-8ef2-73a8b27a2580","alterId":0,"cipher":"auto","udp":true,"network":"ws","ws-opts":{"path":"/index","headers":{"Host":"ws-aicdn.com"}},"ws-path":"/index","ws-headers":{"Host":"ws-aicdn.com"},"tls":true,"skip-cert-verify":true}
+ - {"name":"[IPLC·HK] 香港801|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48801,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·HK] 香港802|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48802,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·HK] 香港803|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48803,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·HK] 香港804|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48804,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·HK] 香港805|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48805,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·JP] 日本811|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48811,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·JP] 日本812|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48812,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·JP] 日本813|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48813,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·TW] 台湾814|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48814,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·US] 美国815|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48815,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·US] 美国816|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48816,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·SG] 狮城817|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48817,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·SG] 狮城818|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48818,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+ - {"name":"[IPLC·KR] 韩国819|IPLC专线|1.5x","type":"ss","server":"ipcc1.xmrthnode.com","port":48819,"cipher":"aes-128-gcm","password":"ns2ib8a3twb8yh2q","udp":true}
+
+proxy-groups:
+-
+ name: 🔰国外流量
+ type: select
+ proxies:
+ - '香港800 专线 BGP'
+ - '香港300 中继 BGP'
+ - '香港301 中继'
+ - '香港302 中继'
+ - '香港303 中继'
+ - '香港304 中继'
+ - '香港305 中继'
+ - '香港306 中继 IDC'
+ - '香港307 中继 IDC'
+ - '香港501 中继 动态'
+ - '狮城502 中继 动态'
+ - '香港503 中继 动态'
+ - '狮城504 中继 动态'
+ - '台湾611 中继'
+ - '台湾612 中继'
+ - '台湾613 中继'
+ - '台湾614 中继'
+ - '日本621 中继'
+ - '日本622 中继'
+ - '日本623 中继'
+ - '日本624 中继'
+ - '日本625 中继'
+ - '美国631 中继'
+ - '美国632 中继'
+ - '美国633 中继'
+ - '美国634 中继'
+ - '美国635 中继 AI'
+ - '新加坡641 中继'
+ - '新加坡642 中继'
+ - '新加坡643 中继'
+ - '新加坡644 中继'
+ - '英国751 中继'
+ - '俄罗斯752 中继'
+ - '马来753 中继'
+ - '韩国754 中继'
+ - '韩国755 中继'
+ - '阿根廷756 中继'
+ - '土耳其757 中继'
+ - 'IPV6 香港901 中继'
+ - 'IPV6 香港902 中继'
+ - 'IPV6 香港903 中继'
+ - 'IPV6 日本905 中继'
+ - 'IPV6 狮城904 中继'
+ - 'IPV6 美国906 中继'
+ - 'HK 000'
+ - 'HK 001'
+ - 'HK 002'
+ - 'HK 003'
+ - 'HK 011'
+ - 'HK 012'
+ - 'HK 013'
+ - 'JP 001'
+ - 'JP 002'
+ - 'RU 001'
+ - 'SG 011'
+ - 'SG 012'
+ - 'TW 001'
+ - 'TW 002'
+ - 'TW 021'
+ - 'US 001'
+ - 'US 002'
+ - 'US 013'
+ - '*官网xmrth1.net 其他渠道均为倒卖*'
+ - '*用不了请更新订阅*若失败请关代理重试*'
+ - '[IPLC·HK] 香港801|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港802|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港803|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港804|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港805|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本811|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本812|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本813|IPLC专线|1.5x'
+ - '[IPLC·TW] 台湾814|IPLC专线|1.5x'
+ - '[IPLC·US] 美国815|IPLC专线|1.5x'
+ - '[IPLC·US] 美国816|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城817|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城818|IPLC专线|1.5x'
+ - '[IPLC·KR] 韩国819|IPLC专线|1.5x'
+ - 🚀直接连接
+-
+ name: ⚓️其他流量
+ type: select
+ proxies:
+ - 🔰国外流量
+ - 🚀直接连接
+-
+ name: ✈️Telegram
+ type: select
+ proxies:
+ - 🔰国外流量
+ - '香港800 专线 BGP'
+ - '香港300 中继 BGP'
+ - '香港301 中继'
+ - '香港302 中继'
+ - '香港303 中继'
+ - '香港304 中继'
+ - '香港305 中继'
+ - '香港306 中继 IDC'
+ - '香港307 中继 IDC'
+ - '香港501 中继 动态'
+ - '狮城502 中继 动态'
+ - '香港503 中继 动态'
+ - '狮城504 中继 动态'
+ - '台湾611 中继'
+ - '台湾612 中继'
+ - '台湾613 中继'
+ - '台湾614 中继'
+ - '日本621 中继'
+ - '日本622 中继'
+ - '日本623 中继'
+ - '日本624 中继'
+ - '日本625 中继'
+ - '美国631 中继'
+ - '美国632 中继'
+ - '美国633 中继'
+ - '美国634 中继'
+ - '美国635 中继 AI'
+ - '新加坡641 中继'
+ - '新加坡642 中继'
+ - '新加坡643 中继'
+ - '新加坡644 中继'
+ - '英国751 中继'
+ - '俄罗斯752 中继'
+ - '马来753 中继'
+ - '韩国754 中继'
+ - '韩国755 中继'
+ - '阿根廷756 中继'
+ - '土耳其757 中继'
+ - 'IPV6 香港901 中继'
+ - 'IPV6 香港902 中继'
+ - 'IPV6 香港903 中继'
+ - 'IPV6 日本905 中继'
+ - 'IPV6 狮城904 中继'
+ - 'IPV6 美国906 中继'
+ - 'HK 000'
+ - 'HK 001'
+ - 'HK 002'
+ - 'HK 003'
+ - 'HK 011'
+ - 'HK 012'
+ - 'HK 013'
+ - 'JP 001'
+ - 'JP 002'
+ - 'RU 001'
+ - 'SG 011'
+ - 'SG 012'
+ - 'TW 001'
+ - 'TW 002'
+ - 'TW 021'
+ - 'US 001'
+ - 'US 002'
+ - 'US 013'
+ - '*官网xmrth1.net 其他渠道均为倒卖*'
+ - '*用不了请更新订阅*若失败请关代理重试*'
+ - '[IPLC·HK] 香港801|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港802|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港803|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港804|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港805|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本811|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本812|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本813|IPLC专线|1.5x'
+ - '[IPLC·TW] 台湾814|IPLC专线|1.5x'
+ - '[IPLC·US] 美国815|IPLC专线|1.5x'
+ - '[IPLC·US] 美国816|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城817|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城818|IPLC专线|1.5x'
+ - '[IPLC·KR] 韩国819|IPLC专线|1.5x'
+-
+ name: 🎬Youtube
+ type: select
+ proxies:
+ - 🔰国外流量
+ - '香港800 专线 BGP'
+ - '香港300 中继 BGP'
+ - '香港301 中继'
+ - '香港302 中继'
+ - '香港303 中继'
+ - '香港304 中继'
+ - '香港305 中继'
+ - '香港306 中继 IDC'
+ - '香港307 中继 IDC'
+ - '香港501 中继 动态'
+ - '狮城502 中继 动态'
+ - '香港503 中继 动态'
+ - '狮城504 中继 动态'
+ - '台湾611 中继'
+ - '台湾612 中继'
+ - '台湾613 中继'
+ - '台湾614 中继'
+ - '日本621 中继'
+ - '日本622 中继'
+ - '日本623 中继'
+ - '日本624 中继'
+ - '日本625 中继'
+ - '美国631 中继'
+ - '美国632 中继'
+ - '美国633 中继'
+ - '美国634 中继'
+ - '美国635 中继 AI'
+ - '新加坡641 中继'
+ - '新加坡642 中继'
+ - '新加坡643 中继'
+ - '新加坡644 中继'
+ - '英国751 中继'
+ - '俄罗斯752 中继'
+ - '马来753 中继'
+ - '韩国754 中继'
+ - '韩国755 中继'
+ - '阿根廷756 中继'
+ - '土耳其757 中继'
+ - 'IPV6 香港901 中继'
+ - 'IPV6 香港902 中继'
+ - 'IPV6 香港903 中继'
+ - 'IPV6 日本905 中继'
+ - 'IPV6 狮城904 中继'
+ - 'IPV6 美国906 中继'
+ - 'HK 000'
+ - 'HK 001'
+ - 'HK 002'
+ - 'HK 003'
+ - 'HK 011'
+ - 'HK 012'
+ - 'HK 013'
+ - 'JP 001'
+ - 'JP 002'
+ - 'RU 001'
+ - 'SG 011'
+ - 'SG 012'
+ - 'TW 001'
+ - 'TW 002'
+ - 'TW 021'
+ - 'US 001'
+ - 'US 002'
+ - 'US 013'
+ - '*官网xmrth1.net 其他渠道均为倒卖*'
+ - '*用不了请更新订阅*若失败请关代理重试*'
+ - '[IPLC·HK] 香港801|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港802|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港803|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港804|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港805|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本811|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本812|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本813|IPLC专线|1.5x'
+ - '[IPLC·TW] 台湾814|IPLC专线|1.5x'
+ - '[IPLC·US] 美国815|IPLC专线|1.5x'
+ - '[IPLC·US] 美国816|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城817|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城818|IPLC专线|1.5x'
+ - '[IPLC·KR] 韩国819|IPLC专线|1.5x'
+-
+ name: 🎬Netflix
+ type: select
+ proxies:
+ - 🔰国外流量
+ - '香港800 专线 BGP'
+ - '香港300 中继 BGP'
+ - '香港301 中继'
+ - '香港302 中继'
+ - '香港303 中继'
+ - '香港304 中继'
+ - '香港305 中继'
+ - '香港306 中继 IDC'
+ - '香港307 中继 IDC'
+ - '香港501 中继 动态'
+ - '狮城502 中继 动态'
+ - '香港503 中继 动态'
+ - '狮城504 中继 动态'
+ - '台湾611 中继'
+ - '台湾612 中继'
+ - '台湾613 中继'
+ - '台湾614 中继'
+ - '日本621 中继'
+ - '日本622 中继'
+ - '日本623 中继'
+ - '日本624 中继'
+ - '日本625 中继'
+ - '美国631 中继'
+ - '美国632 中继'
+ - '美国633 中继'
+ - '美国634 中继'
+ - '美国635 中继 AI'
+ - '新加坡641 中继'
+ - '新加坡642 中继'
+ - '新加坡643 中继'
+ - '新加坡644 中继'
+ - '英国751 中继'
+ - '俄罗斯752 中继'
+ - '马来753 中继'
+ - '韩国754 中继'
+ - '韩国755 中继'
+ - '阿根廷756 中继'
+ - '土耳其757 中继'
+ - 'IPV6 香港901 中继'
+ - 'IPV6 香港902 中继'
+ - 'IPV6 香港903 中继'
+ - 'IPV6 日本905 中继'
+ - 'IPV6 狮城904 中继'
+ - 'IPV6 美国906 中继'
+ - 'HK 000'
+ - 'HK 001'
+ - 'HK 002'
+ - 'HK 003'
+ - 'HK 011'
+ - 'HK 012'
+ - 'HK 013'
+ - 'JP 001'
+ - 'JP 002'
+ - 'RU 001'
+ - 'SG 011'
+ - 'SG 012'
+ - 'TW 001'
+ - 'TW 002'
+ - 'TW 021'
+ - 'US 001'
+ - 'US 002'
+ - 'US 013'
+ - '*官网xmrth1.net 其他渠道均为倒卖*'
+ - '*用不了请更新订阅*若失败请关代理重试*'
+ - '[IPLC·HK] 香港801|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港802|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港803|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港804|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港805|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本811|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本812|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本813|IPLC专线|1.5x'
+ - '[IPLC·TW] 台湾814|IPLC专线|1.5x'
+ - '[IPLC·US] 美国815|IPLC专线|1.5x'
+ - '[IPLC·US] 美国816|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城817|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城818|IPLC专线|1.5x'
+ - '[IPLC·KR] 韩国819|IPLC专线|1.5x'
+-
+ name: 🎬哔哩哔哩
+ type: select
+ proxies:
+ - 🚀直接连接
+ - '香港800 专线 BGP'
+ - '香港300 中继 BGP'
+ - '香港301 中继'
+ - '香港302 中继'
+ - '香港303 中继'
+ - '香港304 中继'
+ - '香港305 中继'
+ - '香港306 中继 IDC'
+ - '香港307 中继 IDC'
+ - '香港501 中继 动态'
+ - '狮城502 中继 动态'
+ - '香港503 中继 动态'
+ - '狮城504 中继 动态'
+ - '台湾611 中继'
+ - '台湾612 中继'
+ - '台湾613 中继'
+ - '台湾614 中继'
+ - '日本621 中继'
+ - '日本622 中继'
+ - '日本623 中继'
+ - '日本624 中继'
+ - '日本625 中继'
+ - '美国631 中继'
+ - '美国632 中继'
+ - '美国633 中继'
+ - '美国634 中继'
+ - '美国635 中继 AI'
+ - '新加坡641 中继'
+ - '新加坡642 中继'
+ - '新加坡643 中继'
+ - '新加坡644 中继'
+ - '英国751 中继'
+ - '俄罗斯752 中继'
+ - '马来753 中继'
+ - '韩国754 中继'
+ - '韩国755 中继'
+ - '阿根廷756 中继'
+ - '土耳其757 中继'
+ - 'IPV6 香港901 中继'
+ - 'IPV6 香港902 中继'
+ - 'IPV6 香港903 中继'
+ - 'IPV6 日本905 中继'
+ - 'IPV6 狮城904 中继'
+ - 'IPV6 美国906 中继'
+ - 'HK 000'
+ - 'HK 001'
+ - 'HK 002'
+ - 'HK 003'
+ - 'HK 011'
+ - 'HK 012'
+ - 'HK 013'
+ - 'JP 001'
+ - 'JP 002'
+ - 'RU 001'
+ - 'SG 011'
+ - 'SG 012'
+ - 'TW 001'
+ - 'TW 002'
+ - 'TW 021'
+ - 'US 001'
+ - 'US 002'
+ - 'US 013'
+ - '*官网xmrth1.net 其他渠道均为倒卖*'
+ - '*用不了请更新订阅*若失败请关代理重试*'
+ - '[IPLC·HK] 香港801|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港802|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港803|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港804|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港805|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本811|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本812|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本813|IPLC专线|1.5x'
+ - '[IPLC·TW] 台湾814|IPLC专线|1.5x'
+ - '[IPLC·US] 美国815|IPLC专线|1.5x'
+ - '[IPLC·US] 美国816|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城817|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城818|IPLC专线|1.5x'
+ - '[IPLC·KR] 韩国819|IPLC专线|1.5x'
+-
+ name: 🎬国外媒体
+ type: select
+ proxies:
+ - 🔰国外流量
+ - '香港800 专线 BGP'
+ - '香港300 中继 BGP'
+ - '香港301 中继'
+ - '香港302 中继'
+ - '香港303 中继'
+ - '香港304 中继'
+ - '香港305 中继'
+ - '香港306 中继 IDC'
+ - '香港307 中继 IDC'
+ - '香港501 中继 动态'
+ - '狮城502 中继 动态'
+ - '香港503 中继 动态'
+ - '狮城504 中继 动态'
+ - '台湾611 中继'
+ - '台湾612 中继'
+ - '台湾613 中继'
+ - '台湾614 中继'
+ - '日本621 中继'
+ - '日本622 中继'
+ - '日本623 中继'
+ - '日本624 中继'
+ - '日本625 中继'
+ - '美国631 中继'
+ - '美国632 中继'
+ - '美国633 中继'
+ - '美国634 中继'
+ - '美国635 中继 AI'
+ - '新加坡641 中继'
+ - '新加坡642 中继'
+ - '新加坡643 中继'
+ - '新加坡644 中继'
+ - '英国751 中继'
+ - '俄罗斯752 中继'
+ - '马来753 中继'
+ - '韩国754 中继'
+ - '韩国755 中继'
+ - '阿根廷756 中继'
+ - '土耳其757 中继'
+ - 'IPV6 香港901 中继'
+ - 'IPV6 香港902 中继'
+ - 'IPV6 香港903 中继'
+ - 'IPV6 日本905 中继'
+ - 'IPV6 狮城904 中继'
+ - 'IPV6 美国906 中继'
+ - 'HK 000'
+ - 'HK 001'
+ - 'HK 002'
+ - 'HK 003'
+ - 'HK 011'
+ - 'HK 012'
+ - 'HK 013'
+ - 'JP 001'
+ - 'JP 002'
+ - 'RU 001'
+ - 'SG 011'
+ - 'SG 012'
+ - 'TW 001'
+ - 'TW 002'
+ - 'TW 021'
+ - 'US 001'
+ - 'US 002'
+ - 'US 013'
+ - '*官网xmrth1.net 其他渠道均为倒卖*'
+ - '*用不了请更新订阅*若失败请关代理重试*'
+ - '[IPLC·HK] 香港801|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港802|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港803|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港804|IPLC专线|1.5x'
+ - '[IPLC·HK] 香港805|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本811|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本812|IPLC专线|1.5x'
+ - '[IPLC·JP] 日本813|IPLC专线|1.5x'
+ - '[IPLC·TW] 台湾814|IPLC专线|1.5x'
+ - '[IPLC·US] 美国815|IPLC专线|1.5x'
+ - '[IPLC·US] 美国816|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城817|IPLC专线|1.5x'
+ - '[IPLC·SG] 狮城818|IPLC专线|1.5x'
+ - '[IPLC·KR] 韩国819|IPLC专线|1.5x'
+-
+ name: 🍎苹果服务
+ type: select
+ proxies:
+ - 🚀直接连接
+ - 🔰国外流量
+-
+ name: 🚀直接连接
+ type: select
+ proxies:
+ - DIRECT
+
+
+# 规则
+rules:
+ - DOMAIN-SUFFIX,smtp,DIRECT
+ - DOMAIN-KEYWORD,aria2,DIRECT
+ - DOMAIN,csgo.wmsj.cn,DIRECT
+ - DOMAIN,dl.steam.clngaa.com,DIRECT
+ - DOMAIN,dl.steam.ksyna.com,DIRECT
+ - DOMAIN,dota2.wmsj.cn,DIRECT
+ - DOMAIN,st.dl.bscstorage.net,DIRECT
+ - DOMAIN,st.dl.eccdnx.com,DIRECT
+ - DOMAIN,st.dl.pinyuncloud.com,DIRECT
+ - DOMAIN,steampipe.steamcontent.tnkjmec.com,DIRECT
+ - DOMAIN,steampowered.com.8686c.com,DIRECT
+ - DOMAIN,steamstatic.com.8686c.com,DIRECT
+ - DOMAIN,wmsjsteam.com,DIRECT
+ - DOMAIN,xz.pphimalayanrt.com,DIRECT
+ - DOMAIN-SUFFIX,cm.steampowered.com,DIRECT
+ - DOMAIN-SUFFIX,steamchina.com,DIRECT
+ - DOMAIN-SUFFIX,steamcontent.com,DIRECT
+ - DOMAIN-SUFFIX,steamusercontent.com,DIRECT
+ - DOMAIN-SUFFIX,steamserver.net,DIRECT
+ - DOMAIN-SUFFIX,steamstatic.com,DIRECT
+ - DOMAIN,steamcdn-a.akamaihd.net,DIRECT
+ - DOMAIN-SUFFIX,journals.sagepub.com,🔰国外流量
+ - DOMAIN-SUFFIX,gemini.google.com,🔰国外流量
+ - DOMAIN-SUFFIX,linkedin.com,🔰国外流量
+ - DOMAIN-SUFFIX,openai.com,🔰国外流量
+ - DOMAIN-SUFFIX,chatgpt.com,🔰国外流量
+ - DOMAIN-SUFFIX,files.oaiusercontent.com,🔰国外流量
+ - DOMAIN-SUFFIX,copilot.microsoft.com,🔰国外流量
+ - DOMAIN-SUFFIX,cdn.oaistatic.com,🔰国外流量
+ - DOMAIN,steambroadcast.akamaized.net,🔰国外流量
+ - DOMAIN,steamcommunity-a.akamaihd.net,🔰国外流量
+ - DOMAIN,steampipe.akamaized.net,🔰国外流量
+ - DOMAIN,steamstore-a.akamaihd.net,🔰国外流量
+ - DOMAIN,steamusercontent-a.akamaihd.net,🔰国外流量
+ - DOMAIN,steamuserimages-a.akamaihd.net,🔰国外流量
+ - DOMAIN-SUFFIX,fanatical.com,🔰国外流量
+ - DOMAIN-SUFFIX,humblebundle.com,🔰国外流量
+ - DOMAIN-SUFFIX,playartifact.com,🔰国外流量
+ - DOMAIN-SUFFIX,steam-chat.com,🔰国外流量
+ - DOMAIN-SUFFIX,steamcommunity.com,🔰国外流量
+ - DOMAIN-SUFFIX,steamgames.com,🔰国外流量
+ - DOMAIN-SUFFIX,steampowered.com,🔰国外流量
+ - DOMAIN-SUFFIX,steamstat.us,🔰国外流量
+ - DOMAIN-SUFFIX,underlords.com,🔰国外流量
+ - DOMAIN-SUFFIX,valvesoftware.com,🔰国外流量
+ - DOMAIN-SUFFIX,discord.co,🔰国外流量
+ - DOMAIN-SUFFIX,discord.com,🔰国外流量
+ - DOMAIN-SUFFIX,discord.gg,🔰国外流量
+ - DOMAIN-SUFFIX,discord.media,🔰国外流量
+ - DOMAIN-SUFFIX,discordapp.com,🔰国外流量
+ - DOMAIN-SUFFIX,discordapp.net,🔰国外流量
+
+ - DOMAIN-SUFFIX,ampproject.org,🔰国外流量
+ - DOMAIN-SUFFIX,appspot.com,🔰国外流量
+ - DOMAIN-SUFFIX,blogger.com,🔰国外流量
+ - DOMAIN-SUFFIX,getoutline.org,🔰国外流量
+ - DOMAIN-SUFFIX,gvt0.com,🔰国外流量
+ - DOMAIN-SUFFIX,gvt1.com,🔰国外流量
+ - DOMAIN-SUFFIX,gvt3.com,🔰国外流量
+ - DOMAIN-SUFFIX,xn--ngstr-lra8j.com,🔰国外流量
+ - DOMAIN-KEYWORD,google,🔰国外流量
+ - DOMAIN-KEYWORD,blogspot,🔰国外流量
+ - DOMAIN-SUFFIX,onedrive.live.com,🔰国外流量
+ - DOMAIN-SUFFIX,xboxlive.com,🔰国外流量
+ - DOMAIN-SUFFIX,cdninstagram.com,🔰国外流量
+ - DOMAIN-SUFFIX,fb.com,🔰国外流量
+ - DOMAIN-SUFFIX,fb.me,🔰国外流量
+ - DOMAIN-SUFFIX,fbaddins.com,🔰国外流量
+ - DOMAIN-SUFFIX,fbcdn.net,🔰国外流量
+ - DOMAIN-SUFFIX,fbsbx.com,🔰国外流量
+ - DOMAIN-SUFFIX,fbworkmail.com,🔰国外流量
+ - DOMAIN-SUFFIX,instagram.com,🔰国外流量
+ - DOMAIN-SUFFIX,m.me,🔰国外流量
+ - DOMAIN-SUFFIX,messenger.com,🔰国外流量
+ - DOMAIN-SUFFIX,oculus.com,🔰国外流量
+ - DOMAIN-SUFFIX,oculuscdn.com,🔰国外流量
+ - DOMAIN-SUFFIX,rocksdb.org,🔰国外流量
+ - DOMAIN-SUFFIX,whatsapp.com,🔰国外流量
+ - DOMAIN-SUFFIX,whatsapp.net,🔰国外流量
+ - DOMAIN-KEYWORD,facebook,🔰国外流量
+ - IP-CIDR,3.123.36.126/32,🔰国外流量,no-resolve
+ - IP-CIDR,35.157.215.84/32,🔰国外流量,no-resolve
+ - IP-CIDR,35.157.217.255/32,🔰国外流量,no-resolve
+ - IP-CIDR,52.58.209.134/32,🔰国外流量,no-resolve
+ - IP-CIDR,54.93.124.31/32,🔰国外流量,no-resolve
+ - IP-CIDR,54.162.243.80/32,🔰国外流量,no-resolve
+ - IP-CIDR,54.173.34.141/32,🔰国外流量,no-resolve
+ - IP-CIDR,54.235.23.242/32,🔰国外流量,no-resolve
+ - IP-CIDR,169.45.248.118/32,🔰国外流量,no-resolve
+ - DOMAIN-SUFFIX,pscp.tv,🔰国外流量
+ - DOMAIN-SUFFIX,periscope.tv,🔰国外流量
+ - DOMAIN-SUFFIX,t.co,🔰国外流量
+ - DOMAIN-SUFFIX,twimg.co,🔰国外流量
+ - DOMAIN-SUFFIX,twimg.com,🔰国外流量
+ - DOMAIN-SUFFIX,twitpic.com,🔰国外流量
+ - DOMAIN-SUFFIX,vine.co,🔰国外流量
+ - DOMAIN-KEYWORD,twitter,🔰国外流量
+ - DOMAIN-SUFFIX,t.me,🔰国外流量
+ - DOMAIN-SUFFIX,tdesktop.com,🔰国外流量
+ - DOMAIN-SUFFIX,telegra.ph,🔰国外流量
+ - DOMAIN-SUFFIX,telegram.me,🔰国外流量
+ - DOMAIN-SUFFIX,telegram.org,🔰国外流量
+ - IP-CIDR,91.108.4.0/22,🔰国外流量,no-resolve
+ - IP-CIDR,91.108.8.0/22,🔰国外流量,no-resolve
+ - IP-CIDR,91.108.12.0/22,🔰国外流量,no-resolve
+ - IP-CIDR,91.108.16.0/22,🔰国外流量,no-resolve
+ - IP-CIDR,91.108.56.0/22,🔰国外流量,no-resolve
+ - IP-CIDR,149.154.160.0/20,🔰国外流量,no-resolve
+ - IP-CIDR6,2001:b28:f23d::/48,🔰国外流量,no-resolve
+ - IP-CIDR6,2001:b28:f23f::/48,🔰国外流量,no-resolve
+ - IP-CIDR6,2001:67c:4e8::/48,🔰国外流量,no-resolve
+ - DOMAIN-SUFFIX,line.me,🔰国外流量
+ - DOMAIN-SUFFIX,line-apps.com,🔰国外流量
+ - DOMAIN-SUFFIX,line-scdn.net,🔰国外流量
+ - DOMAIN-SUFFIX,naver.jp,🔰国外流量
+ - IP-CIDR,103.2.30.0/23,🔰国外流量,no-resolve
+ - IP-CIDR,125.209.208.0/20,🔰国外流量,no-resolve
+ - IP-CIDR,147.92.128.0/17,🔰国外流量,no-resolve
+ - IP-CIDR,203.104.144.0/21,🔰国外流量,no-resolve
+ - DOMAIN-SUFFIX,4shared.com,🔰国外流量
+ - DOMAIN-SUFFIX,520cc.cc,🔰国外流量
+ - DOMAIN-SUFFIX,881903.com,🔰国外流量
+ - DOMAIN-SUFFIX,9cache.com,🔰国外流量
+ - DOMAIN-SUFFIX,9gag.com,🔰国外流量
+ - DOMAIN-SUFFIX,abc.com,🔰国外流量
+ - DOMAIN-SUFFIX,abc.net.au,🔰国外流量
+ - DOMAIN-SUFFIX,abebooks.com,🔰国外流量
+ - DOMAIN-SUFFIX,amazon.co.jp,🔰国外流量
+ - DOMAIN-SUFFIX,apigee.com,🔰国外流量
+ - DOMAIN-SUFFIX,apk-dl.com,🔰国外流量
+ - DOMAIN-SUFFIX,apkfind.com,🔰国外流量
+ - DOMAIN-SUFFIX,apkmirror.com,🔰国外流量
+ - DOMAIN-SUFFIX,apkmonk.com,🔰国外流量
+ - DOMAIN-SUFFIX,apkpure.com,🔰国外流量
+ - DOMAIN-SUFFIX,aptoide.com,🔰国外流量
+ - DOMAIN-SUFFIX,archive.is,🔰国外流量
+ - DOMAIN-SUFFIX,archive.org,🔰国外流量
+ - DOMAIN-SUFFIX,arte.tv,🔰国外流量
+ - DOMAIN-SUFFIX,artstation.com,🔰国外流量
+ - DOMAIN-SUFFIX,arukas.io,🔰国外流量
+ - DOMAIN-SUFFIX,ask.com,🔰国外流量
+ - DOMAIN-SUFFIX,avg.com,🔰国外流量
+ - DOMAIN-SUFFIX,avgle.com,🔰国外流量
+ - DOMAIN-SUFFIX,badoo.com,🔰国外流量
+ - DOMAIN-SUFFIX,bandwagonhost.com,🔰国外流量
+ - DOMAIN-SUFFIX,bbc.com,🔰国外流量
+ - DOMAIN-SUFFIX,behance.net,🔰国外流量
+ - DOMAIN-SUFFIX,bibox.com,🔰国外流量
+ - DOMAIN-SUFFIX,biggo.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,binance.com,🔰国外流量
+ - DOMAIN-SUFFIX,bitcointalk.org,🔰国外流量
+ - DOMAIN-SUFFIX,bitfinex.com,🔰国外流量
+ - DOMAIN-SUFFIX,bitmex.com,🔰国外流量
+ - DOMAIN-SUFFIX,bit-z.com,🔰国外流量
+ - DOMAIN-SUFFIX,bloglovin.com,🔰国外流量
+ - DOMAIN-SUFFIX,bloomberg.cn,🔰国外流量
+ - DOMAIN-SUFFIX,bloomberg.com,🔰国外流量
+ - DOMAIN-SUFFIX,blubrry.com,🔰国外流量
+ - DOMAIN-SUFFIX,book.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,booklive.jp,🔰国外流量
+ - DOMAIN-SUFFIX,books.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,boslife.net,🔰国外流量
+ - DOMAIN-SUFFIX,box.com,🔰国外流量
+ - DOMAIN-SUFFIX,businessinsider.com,🔰国外流量
+ - DOMAIN-SUFFIX,bwh1.net,🔰国外流量
+ - DOMAIN-SUFFIX,castbox.fm,🔰国外流量
+ - DOMAIN-SUFFIX,cbc.ca,🔰国外流量
+ - DOMAIN-SUFFIX,cdw.com,🔰国外流量
+ - DOMAIN-SUFFIX,change.org,🔰国外流量
+ - DOMAIN-SUFFIX,channelnewsasia.com,🔰国外流量
+ - DOMAIN-SUFFIX,ck101.com,🔰国外流量
+ - DOMAIN-SUFFIX,clarionproject.org,🔰国外流量
+ - DOMAIN-SUFFIX,clyp.it,🔰国外流量
+ - DOMAIN-SUFFIX,cna.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,comparitech.com,🔰国外流量
+ - DOMAIN-SUFFIX,conoha.jp,🔰国外流量
+ - DOMAIN-SUFFIX,crucial.com,🔰国外流量
+ - DOMAIN-SUFFIX,cts.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,cw.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,cyberctm.com,🔰国外流量
+ - DOMAIN-SUFFIX,dailymotion.com,🔰国外流量
+ - DOMAIN-SUFFIX,dailyview.tw,🔰国外流量
+ - DOMAIN-SUFFIX,daum.net,🔰国外流量
+ - DOMAIN-SUFFIX,daumcdn.net,🔰国外流量
+ - DOMAIN-SUFFIX,dcard.tw,🔰国外流量
+ - DOMAIN-SUFFIX,deepdiscount.com,🔰国外流量
+ - DOMAIN-SUFFIX,depositphotos.com,🔰国外流量
+ - DOMAIN-SUFFIX,deviantart.com,🔰国外流量
+ - DOMAIN-SUFFIX,disconnect.me,🔰国外流量
+ - DOMAIN-SUFFIX,discordapp.com,🔰国外流量
+ - DOMAIN-SUFFIX,discordapp.net,🔰国外流量
+ - DOMAIN-SUFFIX,disqus.com,🔰国外流量
+ - DOMAIN-SUFFIX,dlercloud.com,🔰国外流量
+ - DOMAIN-SUFFIX,dns2go.com,🔰国外流量
+ - DOMAIN-SUFFIX,dowjones.com,🔰国外流量
+ - DOMAIN-SUFFIX,dropbox.com,🔰国外流量
+ - DOMAIN-SUFFIX,dropboxusercontent.com,🔰国外流量
+ - DOMAIN-SUFFIX,duckduckgo.com,🔰国外流量
+ - DOMAIN-SUFFIX,dw.com,🔰国外流量
+ - DOMAIN-SUFFIX,dynu.com,🔰国外流量
+ - DOMAIN-SUFFIX,earthcam.com,🔰国外流量
+ - DOMAIN-SUFFIX,ebookservice.tw,🔰国外流量
+ - DOMAIN-SUFFIX,economist.com,🔰国外流量
+ - DOMAIN-SUFFIX,edgecastcdn.net,🔰国外流量
+ - DOMAIN-SUFFIX,edu,🔰国外流量
+ - DOMAIN-SUFFIX,elpais.com,🔰国外流量
+ - DOMAIN-SUFFIX,enanyang.my,🔰国外流量
+ - DOMAIN-SUFFIX,encyclopedia.com,🔰国外流量
+ - DOMAIN-SUFFIX,esoir.be,🔰国外流量
+ - DOMAIN-SUFFIX,etherscan.io,🔰国外流量
+ - DOMAIN-SUFFIX,euronews.com,🔰国外流量
+ - DOMAIN-SUFFIX,evozi.com,🔰国外流量
+ - DOMAIN-SUFFIX,feedly.com,🔰国外流量
+ - DOMAIN-SUFFIX,firech.at,🔰国外流量
+ - DOMAIN-SUFFIX,flickr.com,🔰国外流量
+ - DOMAIN-SUFFIX,flitto.com,🔰国外流量
+ - DOMAIN-SUFFIX,foreignpolicy.com,🔰国外流量
+ - DOMAIN-SUFFIX,freebrowser.org,🔰国外流量
+ - DOMAIN-SUFFIX,freewechat.com,🔰国外流量
+ - DOMAIN-SUFFIX,freeweibo.com,🔰国外流量
+ - DOMAIN-SUFFIX,friday.tw,🔰国外流量
+ - DOMAIN-SUFFIX,ftchinese.com,🔰国外流量
+ - DOMAIN-SUFFIX,ftimg.net,🔰国外流量
+ - DOMAIN-SUFFIX,gate.io,🔰国外流量
+ - DOMAIN-SUFFIX,getlantern.org,🔰国外流量
+ - DOMAIN-SUFFIX,getsync.com,🔰国外流量
+ - DOMAIN-SUFFIX,globalvoices.org,🔰国外流量
+ - DOMAIN-SUFFIX,goo.ne.jp,🔰国外流量
+ - DOMAIN-SUFFIX,goodreads.com,🔰国外流量
+ - DOMAIN-SUFFIX,gov,🔰国外流量
+ - DOMAIN-SUFFIX,gov.tw,🔰国外流量
+ - DOMAIN-SUFFIX,greatfire.org,🔰国外流量
+ - DOMAIN-SUFFIX,gumroad.com,🔰国外流量
+ - DOMAIN-SUFFIX,hbg.com,🔰国外流量
+ - DOMAIN-SUFFIX,heroku.com,🔰国外流量
+ - DOMAIN-SUFFIX,hightail.com,🔰国外流量
+ - DOMAIN-SUFFIX,hk01.com,🔰国外流量
+ - DOMAIN-SUFFIX,hkbf.org,🔰国外流量
+ - DOMAIN-SUFFIX,hkbookcity.com,🔰国外流量
+ - DOMAIN-SUFFIX,hkej.com,🔰国外流量
+ - DOMAIN-SUFFIX,hket.com,🔰国外流量
+ - DOMAIN-SUFFIX,hkgolden.com,🔰国外流量
+ - DOMAIN-SUFFIX,hootsuite.com,🔰国外流量
+ - DOMAIN-SUFFIX,hudson.org,🔰国外流量
+ - DOMAIN-SUFFIX,hyread.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,ibtimes.com,🔰国外流量
+ - DOMAIN-SUFFIX,i-cable.com,🔰国外流量
+ - DOMAIN-SUFFIX,icij.org,🔰国外流量
+ - DOMAIN-SUFFIX,icoco.com,🔰国外流量
+ - DOMAIN-SUFFIX,imgur.com,🔰国外流量
+ - DOMAIN-SUFFIX,initiummall.com,🔰国外流量
+ - DOMAIN-SUFFIX,insecam.org,🔰国外流量
+ - DOMAIN-SUFFIX,ipfs.io,🔰国外流量
+ - DOMAIN-SUFFIX,issuu.com,🔰国外流量
+ - DOMAIN-SUFFIX,istockphoto.com,🔰国外流量
+ - DOMAIN-SUFFIX,japantimes.co.jp,🔰国外流量
+ - DOMAIN-SUFFIX,jiji.com,🔰国外流量
+ - DOMAIN-SUFFIX,jinx.com,🔰国外流量
+ - DOMAIN-SUFFIX,jkforum.net,🔰国外流量
+ - DOMAIN-SUFFIX,joinmastodon.org,🔰国外流量
+ - DOMAIN-SUFFIX,justmysocks.net,🔰国外流量
+ - DOMAIN-SUFFIX,justpaste.it,🔰国外流量
+ - DOMAIN-SUFFIX,kakao.com,🔰国外流量
+ - DOMAIN-SUFFIX,kakaocorp.com,🔰国外流量
+ - DOMAIN-SUFFIX,kik.com,🔰国外流量
+ - DOMAIN-SUFFIX,kobo.com,🔰国外流量
+ - DOMAIN-SUFFIX,kobobooks.com,🔰国外流量
+ - DOMAIN-SUFFIX,kodingen.com,🔰国外流量
+ - DOMAIN-SUFFIX,lemonde.fr,🔰国外流量
+ - DOMAIN-SUFFIX,lepoint.fr,🔰国外流量
+ - DOMAIN-SUFFIX,lihkg.com,🔰国外流量
+ - DOMAIN-SUFFIX,listennotes.com,🔰国外流量
+ - DOMAIN-SUFFIX,livestream.com,🔰国外流量
+ - DOMAIN-SUFFIX,logmein.com,🔰国外流量
+ - DOMAIN-SUFFIX,mail.ru,🔰国外流量
+ - DOMAIN-SUFFIX,mailchimp.com,🔰国外流量
+ - DOMAIN-SUFFIX,marc.info,🔰国外流量
+ - DOMAIN-SUFFIX,matters.news,🔰国外流量
+ - DOMAIN-SUFFIX,maying.co,🔰国外流量
+ - DOMAIN-SUFFIX,medium.com,🔰国外流量
+ - DOMAIN-SUFFIX,mega.nz,🔰国外流量
+ - DOMAIN-SUFFIX,mil,🔰国外流量
+ - DOMAIN-SUFFIX,mingpao.com,🔰国外流量
+ - DOMAIN-SUFFIX,mobile01.com,🔰国外流量
+ - DOMAIN-SUFFIX,myspace.com,🔰国外流量
+ - DOMAIN-SUFFIX,myspacecdn.com,🔰国外流量
+ - DOMAIN-SUFFIX,nanyang.com,🔰国外流量
+ - DOMAIN-SUFFIX,naver.com,🔰国外流量
+ - DOMAIN-SUFFIX,neowin.net,🔰国外流量
+ - DOMAIN-SUFFIX,newstapa.org,🔰国外流量
+ - DOMAIN-SUFFIX,nexitally.com,🔰国外流量
+ - DOMAIN-SUFFIX,nhk.or.jp,🔰国外流量
+ - DOMAIN-SUFFIX,nicovideo.jp,🔰国外流量
+ - DOMAIN-SUFFIX,nii.ac.jp,🔰国外流量
+ - DOMAIN-SUFFIX,nikkei.com,🔰国外流量
+ - DOMAIN-SUFFIX,nofile.io,🔰国外流量
+ - DOMAIN-SUFFIX,now.com,🔰国外流量
+ - DOMAIN-SUFFIX,nrk.no,🔰国外流量
+ - DOMAIN-SUFFIX,nyt.com,🔰国外流量
+ - DOMAIN-SUFFIX,nytchina.com,🔰国外流量
+ - DOMAIN-SUFFIX,nytcn.me,🔰国外流量
+ - DOMAIN-SUFFIX,nytco.com,🔰国外流量
+ - DOMAIN-SUFFIX,nytimes.com,🔰国外流量
+ - DOMAIN-SUFFIX,nytimg.com,🔰国外流量
+ - DOMAIN-SUFFIX,nytlog.com,🔰国外流量
+ - DOMAIN-SUFFIX,nytstyle.com,🔰国外流量
+ - DOMAIN-SUFFIX,ok.ru,🔰国外流量
+ - DOMAIN-SUFFIX,okex.com,🔰国外流量
+ - DOMAIN-SUFFIX,on.cc,🔰国外流量
+ - DOMAIN-SUFFIX,orientaldaily.com.my,🔰国外流量
+ - DOMAIN-SUFFIX,overcast.fm,🔰国外流量
+ - DOMAIN-SUFFIX,paltalk.com,🔰国外流量
+ - DOMAIN-SUFFIX,pao-pao.net,🔰国外流量
+ - DOMAIN-SUFFIX,parsevideo.com,🔰国外流量
+ - DOMAIN-SUFFIX,pbxes.com,🔰国外流量
+ - DOMAIN-SUFFIX,pcdvd.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,pchome.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,pcloud.com,🔰国外流量
+ - DOMAIN-SUFFIX,picacomic.com,🔰国外流量
+ - DOMAIN-SUFFIX,pinimg.com,🔰国外流量
+ - DOMAIN-SUFFIX,pixiv.net,🔰国外流量
+ - DOMAIN-SUFFIX,player.fm,🔰国外流量
+ - DOMAIN-SUFFIX,plurk.com,🔰国外流量
+ - DOMAIN-SUFFIX,po18.tw,🔰国外流量
+ - DOMAIN-SUFFIX,potato.im,🔰国外流量
+ - DOMAIN-SUFFIX,potatso.com,🔰国外流量
+ - DOMAIN-SUFFIX,prism-break.org,🔰国外流量
+ - DOMAIN-SUFFIX,proxifier.com,🔰国外流量
+ - DOMAIN-SUFFIX,pt.im,🔰国外流量
+ - DOMAIN-SUFFIX,pts.org.tw,🔰国外流量
+ - DOMAIN-SUFFIX,pubu.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,pubu.tw,🔰国外流量
+ - DOMAIN-SUFFIX,pureapk.com,🔰国外流量
+ - DOMAIN-SUFFIX,quora.com,🔰国外流量
+ - DOMAIN-SUFFIX,quoracdn.net,🔰国外流量
+ - DOMAIN-SUFFIX,rakuten.co.jp,🔰国外流量
+ - DOMAIN-SUFFIX,readingtimes.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,readmoo.com,🔰国外流量
+ - DOMAIN-SUFFIX,redbubble.com,🔰国外流量
+ - DOMAIN-SUFFIX,reddit.com,🔰国外流量
+ - DOMAIN-SUFFIX,redditmedia.com,🔰国外流量
+ - DOMAIN-SUFFIX,resilio.com,🔰国外流量
+ - DOMAIN-SUFFIX,reuters.com,🔰国外流量
+ - DOMAIN-SUFFIX,reutersmedia.net,🔰国外流量
+ - DOMAIN-SUFFIX,rfi.fr,🔰国外流量
+ - DOMAIN-SUFFIX,rixcloud.com,🔰国外流量
+ - DOMAIN-SUFFIX,roadshow.hk,🔰国外流量
+ - DOMAIN-SUFFIX,scmp.com,🔰国外流量
+ - DOMAIN-SUFFIX,scribd.com,🔰国外流量
+ - DOMAIN-SUFFIX,seatguru.com,🔰国外流量
+ - DOMAIN-SUFFIX,shadowsocks.org,🔰国外流量
+ - DOMAIN-SUFFIX,shopee.tw,🔰国外流量
+ - DOMAIN-SUFFIX,slideshare.net,🔰国外流量
+ - DOMAIN-SUFFIX,softfamous.com,🔰国外流量
+ - DOMAIN-SUFFIX,soundcloud.com,🔰国外流量
+ - DOMAIN-SUFFIX,ssrcloud.org,🔰国外流量
+ - DOMAIN-SUFFIX,startpage.com,🔰国外流量
+ - DOMAIN-SUFFIX,steamcommunity.com,🔰国外流量
+ - DOMAIN-SUFFIX,steemit.com,🔰国外流量
+ - DOMAIN-SUFFIX,steemitwallet.com,🔰国外流量
+ - DOMAIN-SUFFIX,t66y.com,🔰国外流量
+ - DOMAIN-SUFFIX,tapatalk.com,🔰国外流量
+ - DOMAIN-SUFFIX,teco-hk.org,🔰国外流量
+ - DOMAIN-SUFFIX,teco-mo.org,🔰国外流量
+ - DOMAIN-SUFFIX,teddysun.com,🔰国外流量
+ - DOMAIN-SUFFIX,textnow.me,🔰国外流量
+ - DOMAIN-SUFFIX,theguardian.com,🔰国外流量
+ - DOMAIN-SUFFIX,theinitium.com,🔰国外流量
+ - DOMAIN-SUFFIX,thetvdb.com,🔰国外流量
+ - DOMAIN-SUFFIX,tineye.com,🔰国外流量
+ - DOMAIN-SUFFIX,torproject.org,🔰国外流量
+ - DOMAIN-SUFFIX,tumblr.com,🔰国外流量
+ - DOMAIN-SUFFIX,turbobit.net,🔰国外流量
+ - DOMAIN-SUFFIX,tutanota.com,🔰国外流量
+ - DOMAIN-SUFFIX,tvboxnow.com,🔰国外流量
+ - DOMAIN-SUFFIX,udn.com,🔰国外流量
+ - DOMAIN-SUFFIX,unseen.is,🔰国外流量
+ - DOMAIN-SUFFIX,upmedia.mg,🔰国外流量
+ - DOMAIN-SUFFIX,uptodown.com,🔰国外流量
+ - DOMAIN-SUFFIX,urbandictionary.com,🔰国外流量
+ - DOMAIN-SUFFIX,ustream.tv,🔰国外流量
+ - DOMAIN-SUFFIX,uwants.com,🔰国外流量
+ - DOMAIN-SUFFIX,v2ray.com,🔰国外流量
+ - DOMAIN-SUFFIX,viber.com,🔰国外流量
+ - DOMAIN-SUFFIX,videopress.com,🔰国外流量
+ - DOMAIN-SUFFIX,vimeo.com,🔰国外流量
+ - DOMAIN-SUFFIX,voachinese.com,🔰国外流量
+ - DOMAIN-SUFFIX,voanews.com,🔰国外流量
+ - DOMAIN-SUFFIX,voxer.com,🔰国外流量
+ - DOMAIN-SUFFIX,vzw.com,🔰国外流量
+ - DOMAIN-SUFFIX,w3schools.com,🔰国外流量
+ - DOMAIN-SUFFIX,washingtonpost.com,🔰国外流量
+ - DOMAIN-SUFFIX,wattpad.com,🔰国外流量
+ - DOMAIN-SUFFIX,whoer.net,🔰国外流量
+ - DOMAIN-SUFFIX,wikimapia.org,🔰国外流量
+ - DOMAIN-SUFFIX,wikipedia.org,🔰国外流量
+ - DOMAIN-SUFFIX,wikiquote.org,🔰国外流量
+ - DOMAIN-SUFFIX,wikiwand.com,🔰国外流量
+ - DOMAIN-SUFFIX,winudf.com,🔰国外流量
+ - DOMAIN-SUFFIX,wire.com,🔰国外流量
+ - DOMAIN-SUFFIX,wordpress.com,🔰国外流量
+ - DOMAIN-SUFFIX,workflow.is,🔰国外流量
+ - DOMAIN-SUFFIX,worldcat.org,🔰国外流量
+ - DOMAIN-SUFFIX,wsj.com,🔰国外流量
+ - DOMAIN-SUFFIX,wsj.net,🔰国外流量
+ - DOMAIN-SUFFIX,xhamster.com,🔰国外流量
+ - DOMAIN-SUFFIX,xn--90wwvt03e.com,🔰国外流量
+ - DOMAIN-SUFFIX,xn--i2ru8q2qg.com,🔰国外流量
+ - DOMAIN-SUFFIX,xnxx.com,🔰国外流量
+ - DOMAIN-SUFFIX,xvideos.com,🔰国外流量
+ - DOMAIN-SUFFIX,yahoo.com,🔰国外流量
+ - DOMAIN-SUFFIX,yandex.ru,🔰国外流量
+ - DOMAIN-SUFFIX,ycombinator.com,🔰国外流量
+ - DOMAIN-SUFFIX,yesasia.com,🔰国外流量
+ - DOMAIN-SUFFIX,yes-news.com,🔰国外流量
+ - DOMAIN-SUFFIX,yomiuri.co.jp,🔰国外流量
+ - DOMAIN-SUFFIX,you-get.org,🔰国外流量
+ - DOMAIN-SUFFIX,zaobao.com,🔰国外流量
+ - DOMAIN-SUFFIX,zb.com,🔰国外流量
+ - DOMAIN-SUFFIX,zello.com,🔰国外流量
+ - DOMAIN-SUFFIX,zeronet.io,🔰国外流量
+ - DOMAIN-SUFFIX,zoom.us,🔰国外流量
+ - DOMAIN-KEYWORD,github,🔰国外流量
+ - DOMAIN-KEYWORD,jav,🔰国外流量
+ - DOMAIN-KEYWORD,pinterest,🔰国外流量
+ - DOMAIN-KEYWORD,porn,🔰国外流量
+ - DOMAIN-KEYWORD,wikileaks,🔰国外流量
+ - DOMAIN-SUFFIX,apartmentratings.com,🔰国外流量
+ - DOMAIN-SUFFIX,apartments.com,🔰国外流量
+ - DOMAIN-SUFFIX,bankmobilevibe.com,🔰国外流量
+ - DOMAIN-SUFFIX,bing.com,🔰国外流量
+ - DOMAIN-SUFFIX,booktopia.com.au,🔰国外流量
+ - DOMAIN-SUFFIX,cccat.io,🔰国外流量
+ - DOMAIN-SUFFIX,centauro.com.br,🔰国外流量
+ - DOMAIN-SUFFIX,clearsurance.com,🔰国外流量
+ - DOMAIN-SUFFIX,costco.com,🔰国外流量
+ - DOMAIN-SUFFIX,crackle.com,🔰国外流量
+ - DOMAIN-SUFFIX,depositphotos.cn,🔰国外流量
+ - DOMAIN-SUFFIX,dish.com,🔰国外流量
+ - DOMAIN-SUFFIX,dmm.co.jp,🔰国外流量
+ - DOMAIN-SUFFIX,dmm.com,🔰国外流量
+ - DOMAIN-SUFFIX,dnvod.tv,🔰国外流量
+ - DOMAIN-SUFFIX,esurance.com,🔰国外流量
+ - DOMAIN-SUFFIX,extmatrix.com,🔰国外流量
+ - DOMAIN-SUFFIX,fastpic.ru,🔰国外流量
+ - DOMAIN-SUFFIX,flipboard.com,🔰国外流量
+ - DOMAIN-SUFFIX,fnac.be,🔰国外流量
+ - DOMAIN-SUFFIX,fnac.com,🔰国外流量
+ - DOMAIN-SUFFIX,funkyimg.com,🔰国外流量
+ - DOMAIN-SUFFIX,fxnetworks.com,🔰国外流量
+ - DOMAIN-SUFFIX,gettyimages.com,🔰国外流量
+ - DOMAIN-SUFFIX,go.com,🔰国外流量
+ - DOMAIN-SUFFIX,here.com,🔰国外流量
+ - DOMAIN-SUFFIX,jcpenney.com,🔰国外流量
+ - DOMAIN-SUFFIX,jiehua.tv,🔰国外流量
+ - DOMAIN-SUFFIX,mailfence.com,🔰国外流量
+ - DOMAIN-SUFFIX,nationwide.com,🔰国外流量
+ - DOMAIN-SUFFIX,nbc.com,🔰国外流量
+ - DOMAIN-SUFFIX,nexon.com,🔰国外流量
+ - DOMAIN-SUFFIX,nordstrom.com,🔰国外流量
+ - DOMAIN-SUFFIX,nordstromimage.com,🔰国外流量
+ - DOMAIN-SUFFIX,nordstromrack.com,🔰国外流量
+ - DOMAIN-SUFFIX,superpages.com,🔰国外流量
+ - DOMAIN-SUFFIX,target.com,🔰国外流量
+ - DOMAIN-SUFFIX,thinkgeek.com,🔰国外流量
+ - DOMAIN-SUFFIX,tracfone.com,🔰国外流量
+ - DOMAIN-SUFFIX,unity3d.com,🔰国外流量
+ - DOMAIN-SUFFIX,uploader.jp,🔰国外流量
+ - DOMAIN-SUFFIX,vevo.com,🔰国外流量
+ - DOMAIN-SUFFIX,viu.tv,🔰国外流量
+ - DOMAIN-SUFFIX,vk.com,🔰国外流量
+ - DOMAIN-SUFFIX,vsco.co,🔰国外流量
+ - DOMAIN-SUFFIX,xfinity.com,🔰国外流量
+ - DOMAIN-SUFFIX,zattoo.com,🔰国外流量
+ - DOMAIN,testflight.apple.com,🔰国外流量
+ - DOMAIN-SUFFIX,appsto.re,🔰国外流量
+ - DOMAIN,books.itunes.apple.com,🔰国外流量
+ - DOMAIN,hls.itunes.apple.com,🔰国外流量
+ - DOMAIN,apps.apple.com,🔰国外流量
+ - DOMAIN,itunes.apple.com,🔰国外流量
+ - DOMAIN,api-glb-sea.smoot.apple.com,🔰国外流量
+ - DOMAIN,lookup-api.apple.com,🔰国外流量
+ - DOMAIN-SUFFIX,abc.xyz,🔰国外流量
+ - DOMAIN-SUFFIX,android.com,🔰国外流量
+ - DOMAIN-SUFFIX,androidify.com,🔰国外流量
+ - DOMAIN-SUFFIX,dialogflow.com,🔰国外流量
+ - DOMAIN-SUFFIX,autodraw.com,🔰国外流量
+ - DOMAIN-SUFFIX,capitalg.com,🔰国外流量
+ - DOMAIN-SUFFIX,certificate-transparency.org,🔰国外流量
+ - DOMAIN-SUFFIX,chrome.com,🔰国外流量
+ - DOMAIN-SUFFIX,chromeexperiments.com,🔰国外流量
+ - DOMAIN-SUFFIX,chromestatus.com,🔰国外流量
+ - DOMAIN-SUFFIX,chromium.org,🔰国外流量
+ - DOMAIN-SUFFIX,creativelab5.com,🔰国外流量
+ - DOMAIN-SUFFIX,debug.com,🔰国外流量
+ - DOMAIN-SUFFIX,deepmind.com,🔰国外流量
+ - DOMAIN-SUFFIX,firebaseio.com,🔰国外流量
+ - DOMAIN-SUFFIX,getmdl.io,🔰国外流量
+ - DOMAIN-SUFFIX,ggpht.com,🔰国外流量
+ - DOMAIN-SUFFIX,gmail.com,🔰国外流量
+ - DOMAIN-SUFFIX,gmodules.com,🔰国外流量
+ - DOMAIN-SUFFIX,godoc.org,🔰国外流量
+ - DOMAIN-SUFFIX,golang.org,🔰国外流量
+ - DOMAIN-SUFFIX,gstatic.com,🔰国外流量
+ - DOMAIN-SUFFIX,gv.com,🔰国外流量
+ - DOMAIN-SUFFIX,gwtproject.org,🔰国外流量
+ - DOMAIN-SUFFIX,itasoftware.com,🔰国外流量
+ - DOMAIN-SUFFIX,madewithcode.com,🔰国外流量
+ - DOMAIN-SUFFIX,material.io,🔰国外流量
+ - DOMAIN-SUFFIX,polymer-project.org,🔰国外流量
+ - DOMAIN-SUFFIX,admin.recaptcha.net,🔰国外流量
+ - DOMAIN-SUFFIX,recaptcha.net,🔰国外流量
+ - DOMAIN-SUFFIX,shattered.io,🔰国外流量
+ - DOMAIN-SUFFIX,synergyse.com,🔰国外流量
+ - DOMAIN-SUFFIX,tensorflow.org,🔰国外流量
+ - DOMAIN-SUFFIX,tfhub.dev,🔰国外流量
+ - DOMAIN-SUFFIX,tiltbrush.com,🔰国外流量
+ - DOMAIN-SUFFIX,waveprotocol.org,🔰国外流量
+ - DOMAIN-SUFFIX,waymo.com,🔰国外流量
+ - DOMAIN-SUFFIX,webmproject.org,🔰国外流量
+ - DOMAIN-SUFFIX,webrtc.org,🔰国外流量
+ - DOMAIN-SUFFIX,whatbrowser.org,🔰国外流量
+ - DOMAIN-SUFFIX,widevine.com,🔰国外流量
+ - DOMAIN-SUFFIX,x.company,🔰国外流量
+ - DOMAIN-SUFFIX,youtu.be,🔰国外流量
+ - DOMAIN-SUFFIX,yt.be,🔰国外流量
+ - DOMAIN-SUFFIX,ytimg.com,🔰国外流量
+ - DOMAIN-SUFFIX,1drv.com,🔰国外流量
+ - DOMAIN-SUFFIX,1drv.ms,🔰国外流量
+ - DOMAIN-SUFFIX,blob.core.windows.net,🔰国外流量
+ - DOMAIN-SUFFIX,livefilestore.com,🔰国外流量
+ - DOMAIN-SUFFIX,onedrive.com,🔰国外流量
+ - DOMAIN-SUFFIX,storage.live.com,🔰国外流量
+ - DOMAIN-SUFFIX,storage.msn.com,🔰国外流量
+ - DOMAIN,oneclient.sfx.ms,🔰国外流量
+ - DOMAIN-SUFFIX,0rz.tw,🔰国外流量
+ - DOMAIN-SUFFIX,4bluestones.biz,🔰国外流量
+ - DOMAIN-SUFFIX,9bis.net,🔰国外流量
+ - DOMAIN-SUFFIX,allconnected.co,🔰国外流量
+ - DOMAIN-SUFFIX,aol.com,🔰国外流量
+ - DOMAIN-SUFFIX,bcc.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,bit.ly,🔰国外流量
+ - DOMAIN-SUFFIX,bitshare.com,🔰国外流量
+ - DOMAIN-SUFFIX,blog.jp,🔰国外流量
+ - DOMAIN-SUFFIX,blogimg.jp,🔰国外流量
+ - DOMAIN-SUFFIX,blogtd.org,🔰国外流量
+ - DOMAIN-SUFFIX,broadcast.co.nz,🔰国外流量
+ - DOMAIN-SUFFIX,camfrog.com,🔰国外流量
+ - DOMAIN-SUFFIX,cfos.de,🔰国外流量
+ - DOMAIN-SUFFIX,citypopulation.de,🔰国外流量
+ - DOMAIN-SUFFIX,cloudfront.net,🔰国外流量
+ - DOMAIN-SUFFIX,ctitv.com.tw,🔰国外流量
+ - DOMAIN-SUFFIX,cuhk.edu.hk,🔰国外流量
+ - DOMAIN-SUFFIX,cusu.hk,🔰国外流量
+ - DOMAIN-SUFFIX,discord.gg,🔰国外流量
+ - DOMAIN-SUFFIX,discuss.com.hk,🔰国外流量
+ - DOMAIN-SUFFIX,dropboxapi.com,🔰国外流量
+ - DOMAIN-SUFFIX,duolingo.cn,🔰国外流量
+ - DOMAIN-SUFFIX,edditstatic.com,🔰国外流量
+ - DOMAIN-SUFFIX,flickriver.com,🔰国外流量
+ - DOMAIN-SUFFIX,focustaiwan.tw,🔰国外流量
+ - DOMAIN-SUFFIX,free.fr,🔰国外流量
+ - DOMAIN-SUFFIX,gigacircle.com,🔰国外流量
+ - DOMAIN-SUFFIX,hk-pub.com,🔰国外流量
+ - DOMAIN-SUFFIX,hosting.co.uk,🔰国外流量
+ - DOMAIN-SUFFIX,hwcdn.net,🔰国外流量
+ - DOMAIN-SUFFIX,ifixit.com,🔰国外流量
+ - DOMAIN-SUFFIX,iphone4hongkong.com,🔰国外流量
+ - DOMAIN-SUFFIX,iphonetaiwan.org,🔰国外流量
+ - DOMAIN-SUFFIX,iptvbin.com,🔰国外流量
+ - DOMAIN-SUFFIX,linksalpha.com,🔰国外流量
+ - DOMAIN-SUFFIX,manyvids.com,🔰国外流量
+ - DOMAIN-SUFFIX,myactimes.com,🔰国外流量
+ - DOMAIN-SUFFIX,newsblur.com,🔰国外流量
+ - DOMAIN-SUFFIX,now.im,🔰国外流量
+ - DOMAIN-SUFFIX,nowe.com,🔰国外流量
+ - DOMAIN-SUFFIX,redditlist.com,🔰国外流量
+ - DOMAIN-SUFFIX,s3.amazonaws.com,🔰国外流量
+ - DOMAIN-SUFFIX,signal.org,🔰国外流量
+ - DOMAIN-SUFFIX,smartmailcloud.com,🔰国外流量
+ - DOMAIN-SUFFIX,sparknotes.com,🔰国外流量
+ - DOMAIN-SUFFIX,streetvoice.com,🔰国外流量
+ - DOMAIN-SUFFIX,supertop.co,🔰国外流量
+ - DOMAIN-SUFFIX,tv.com,🔰国外流量
+ - DOMAIN-SUFFIX,typepad.com,🔰国外流量
+ - DOMAIN-SUFFIX,udnbkk.com,🔰国外流量
+ - DOMAIN-SUFFIX,urbanairship.com,🔰国外流量
+ - DOMAIN-SUFFIX,whispersystems.org,🔰国外流量
+ - DOMAIN-SUFFIX,wikia.com,🔰国外流量
+ - DOMAIN-SUFFIX,wn.com,🔰国外流量
+ - DOMAIN-SUFFIX,wolframalpha.com,🔰国外流量
+ - DOMAIN-SUFFIX,x-art.com,🔰国外流量
+ - DOMAIN-SUFFIX,yimg.com,🔰国外流量
+ - DOMAIN,api.steampowered.com,🔰国外流量
+ - DOMAIN,store.steampowered.com,🔰国外流量
+
+ - DOMAIN-SUFFIX,aaplimg.com,🍎苹果服务
+ - DOMAIN-SUFFIX,apple.co,🍎苹果服务
+ - DOMAIN-SUFFIX,apple.com,🍎苹果服务
+ - DOMAIN-SUFFIX,apple-cloudkit.com,🍎苹果服务
+ - DOMAIN-SUFFIX,appstore.com,🍎苹果服务
+ - DOMAIN-SUFFIX,cdn-apple.com,🍎苹果服务
+ - DOMAIN-SUFFIX,crashlytics.com,🍎苹果服务
+ - DOMAIN-SUFFIX,icloud.com,🍎苹果服务
+ - DOMAIN-SUFFIX,icloud-content.com,🍎苹果服务
+ - DOMAIN-SUFFIX,me.com,🍎苹果服务
+ - DOMAIN-SUFFIX,mzstatic.com,🍎苹果服务
+ - DOMAIN,www-cdn.icloud.com.akadns.net,🍎苹果服务
+
+ - DOMAIN-SUFFIX,t.me,✈️Telegram
+ - DOMAIN-SUFFIX,tdesktop.com,✈️Telegram
+ - DOMAIN-SUFFIX,telegra.ph,✈️Telegram
+ - DOMAIN-SUFFIX,telegram.me,✈️Telegram
+ - DOMAIN-SUFFIX,telegram.org,✈️Telegram
+ - IP-CIDR,91.108.4.0/22,✈️Telegram,no-resolve
+ - IP-CIDR,91.108.8.0/22,✈️Telegram,no-resolve
+ - IP-CIDR,91.108.12.0/22,✈️Telegram,no-resolve
+ - IP-CIDR,91.108.16.0/22,✈️Telegram,no-resolve
+ - IP-CIDR,91.108.56.0/22,✈️Telegram,no-resolve
+ - IP-CIDR,149.154.160.0/20,✈️Telegram,no-resolve
+ - IP-CIDR6,2001:b28:f23d::/48,✈️Telegram,no-resolve
+ - IP-CIDR6,2001:b28:f23f::/48,✈️Telegram,no-resolve
+ - IP-CIDR6,2001:67c:4e8::/48,✈️Telegram,no-resolve
+
+ - DOMAIN-SUFFIX,googlevideo.com,🎬Youtube
+ - DOMAIN-SUFFIX,youtube.com,🎬Youtube
+ - DOMAIN,youtubei.googleapis.com,🎬Youtube
+
+ - DOMAIN-SUFFIX,netflix.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflix.net,🎬Netflix
+ - DOMAIN-SUFFIX,nflxext.com,🎬Netflix
+ - DOMAIN-SUFFIX,nflximg.com,🎬Netflix
+ - DOMAIN-SUFFIX,nflximg.net,🎬Netflix
+ - DOMAIN-SUFFIX,nflxso.net,🎬Netflix
+ - DOMAIN-SUFFIX,nflxvideo.net,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest0.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest1.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest2.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest3.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest4.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest5.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest6.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest7.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest8.com,🎬Netflix
+ - DOMAIN-SUFFIX,netflixdnstest9.com,🎬Netflix
+ - IP-CIDR,23.246.0.0/18,🎬Netflix,no-resolve
+ - IP-CIDR,37.77.184.0/21,🎬Netflix,no-resolve
+ - IP-CIDR,45.57.0.0/17,🎬Netflix,no-resolve
+ - IP-CIDR,64.120.128.0/17,🎬Netflix,no-resolve
+ - IP-CIDR,66.197.128.0/17,🎬Netflix,no-resolve
+ - IP-CIDR,108.175.32.0/20,🎬Netflix,no-resolve
+ - IP-CIDR,192.173.64.0/18,🎬Netflix,no-resolve
+ - IP-CIDR,198.38.96.0/19,🎬Netflix,no-resolve
+ - IP-CIDR,198.45.48.0/20,🎬Netflix,no-resolve
+
+ - DOMAIN-SUFFIX,deezer.com,🎬国外媒体
+ - DOMAIN-SUFFIX,dzcdn.net,🎬国外媒体
+ - DOMAIN-SUFFIX,kkbox.com,🎬国外媒体
+ - DOMAIN-SUFFIX,kkbox.com.tw,🎬国外媒体
+ - DOMAIN-SUFFIX,kfs.io,🎬国外媒体
+ - DOMAIN-SUFFIX,joox.com,🎬国外媒体
+ - DOMAIN-SUFFIX,pandora.com,🎬国外媒体
+ - DOMAIN-SUFFIX,p-cdn.us,🎬国外媒体
+ - DOMAIN-SUFFIX,sndcdn.com,🎬国外媒体
+ - DOMAIN-SUFFIX,soundcloud.com,🎬国外媒体
+ - DOMAIN-SUFFIX,pscdn.co,🎬国外媒体
+ - DOMAIN-SUFFIX,scdn.co,🎬国外媒体
+ - DOMAIN-SUFFIX,spotify.com,🎬国外媒体
+ - DOMAIN-SUFFIX,spoti.fi,🎬国外媒体
+ - DOMAIN-KEYWORD,spotify.com,🎬国外媒体
+ - DOMAIN-KEYWORD,-spotify-com,🎬国外媒体
+ - DOMAIN-SUFFIX,tidal.com,🎬国外媒体
+ - DOMAIN-SUFFIX,c4assets.com,🎬国外媒体
+ - DOMAIN-SUFFIX,channel4.com,🎬国外媒体
+ - DOMAIN-SUFFIX,abema.io,🎬国外媒体
+ - DOMAIN-SUFFIX,ameba.jp,🎬国外媒体
+ - DOMAIN-SUFFIX,abema.tv,🎬国外媒体
+ - DOMAIN-SUFFIX,hayabusa.io,🎬国外媒体
+ - DOMAIN,abematv.akamaized.net,🎬国外媒体
+ - DOMAIN,ds-linear-abematv.akamaized.net,🎬国外媒体
+ - DOMAIN,ds-vod-abematv.akamaized.net,🎬国外媒体
+ - DOMAIN,linear-abematv.akamaized.net,🎬国外媒体
+ - DOMAIN-SUFFIX,aiv-cdn.net,🎬国外媒体
+ - DOMAIN-SUFFIX,aiv-delivery.net,🎬国外媒体
+ - DOMAIN-SUFFIX,amazonvideo.com,🎬国外媒体
+ - DOMAIN-SUFFIX,primevideo.com,🎬国外媒体
+ - DOMAIN,avodmp4s3ww-a.akamaihd.net,🎬国外媒体
+ - DOMAIN,d25xi40x97liuc.cloudfront.net,🎬国外媒体
+ - DOMAIN,dmqdd6hw24ucf.cloudfront.net,🎬国外媒体
+ - DOMAIN,d22qjgkvxw22r6.cloudfront.net,🎬国外媒体
+ - DOMAIN,d1v5ir2lpwr8os.cloudfront.net,🎬国外媒体
+ - DOMAIN-KEYWORD,avoddashs,🎬国外媒体
+ - DOMAIN-SUFFIX,bahamut.com.tw,🎬国外媒体
+ - DOMAIN-SUFFIX,gamer.com.tw,🎬国外媒体
+ - DOMAIN,gamer-cds.cdn.hinet.net,🎬国外媒体
+ - DOMAIN,gamer2-cds.cdn.hinet.net,🎬国外媒体
+ - DOMAIN-SUFFIX,bbc.co.uk,🎬国外媒体
+ - DOMAIN-SUFFIX,bbci.co.uk,🎬国外媒体
+ - DOMAIN-KEYWORD,bbcfmt,🎬国外媒体
+ - DOMAIN-KEYWORD,uk-live,🎬国外媒体
+ - DOMAIN-SUFFIX,dazn.com,🎬国外媒体
+ - DOMAIN-SUFFIX,dazn-api.com,🎬国外媒体
+ - DOMAIN,d151l6v8er5bdm.cloudfront.net,🎬国外媒体
+ - DOMAIN-KEYWORD,voddazn,🎬国外媒体
+ - DOMAIN-SUFFIX,bamgrid.com,🎬国外媒体
+ - DOMAIN-SUFFIX,disney-plus.net,🎬国外媒体
+ - DOMAIN-SUFFIX,disneyplus.com,🎬国外媒体
+ - DOMAIN-SUFFIX,dssott.com,🎬国外媒体
+ - DOMAIN,cdn.registerdisney.go.com,🎬国外媒体
+ - DOMAIN-SUFFIX,encoretvb.com,🎬国外媒体
+ - DOMAIN,edge.api.brightcove.com,🎬国外媒体
+ - DOMAIN,bcbolt446c5271-a.akamaihd.net,🎬国外媒体
+ - DOMAIN-SUFFIX,fox.com,🎬国外媒体
+ - DOMAIN-SUFFIX,foxdcg.com,🎬国外媒体
+ - DOMAIN-SUFFIX,theplatform.com,🎬国外媒体
+ - DOMAIN-SUFFIX,uplynk.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hbo.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hbogo.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hbonow.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hbogoasia.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hbogoasia.hk,🎬国外媒体
+ - DOMAIN,bcbolthboa-a.akamaihd.net,🎬国外媒体
+ - DOMAIN,players.brightcove.net,🎬国外媒体
+ - DOMAIN,s3-ap-southeast-1.amazonaws.com,🎬国外媒体
+ - DOMAIN,dai3fd1oh325y.cloudfront.net,🎬国外媒体
+ - DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com,🎬国外媒体
+ - DOMAIN,hboasia1-i.akamaihd.net,🎬国外媒体
+ - DOMAIN,hboasia2-i.akamaihd.net,🎬国外媒体
+ - DOMAIN,hboasia3-i.akamaihd.net,🎬国外媒体
+ - DOMAIN,hboasia4-i.akamaihd.net,🎬国外媒体
+ - DOMAIN,hboasia5-i.akamaihd.net,🎬国外媒体
+ - DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net,🎬国外媒体
+ - DOMAIN-SUFFIX,5itv.tv,🎬国外媒体
+ - DOMAIN-SUFFIX,ocnttv.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hulu.com,🎬国外媒体
+ - DOMAIN-SUFFIX,huluim.com,🎬国外媒体
+ - DOMAIN-SUFFIX,hulustream.com,🎬国外媒体
+ - DOMAIN-SUFFIX,happyon.jp,🎬国外媒体
+ - DOMAIN-SUFFIX,hulu.jp,🎬国外媒体
+ - DOMAIN-SUFFIX,itv.com,🎬国外媒体
+ - DOMAIN-SUFFIX,itvstatic.com,🎬国外媒体
+ - DOMAIN,itvpnpmobile-a.akamaihd.net,🎬国外媒体
+ - DOMAIN-SUFFIX,kktv.com.tw,🎬国外媒体
+ - DOMAIN-SUFFIX,kktv.me,🎬国外媒体
+ - DOMAIN,kktv-theater.kk.stream,🎬国外媒体
+ - DOMAIN-SUFFIX,linetv.tw,🎬国外媒体
+ - DOMAIN,d3c7rimkq79yfu.cloudfront.net,🎬国外媒体
+ - DOMAIN-SUFFIX,litv.tv,🎬国外媒体
+ - DOMAIN,litvfreemobile-hichannel.cdn.hinet.net,🎬国外媒体
+ - DOMAIN-SUFFIX,channel5.com,🎬国外媒体
+ - DOMAIN-SUFFIX,my5.tv,🎬国外媒体
+ - DOMAIN,d349g9zuie06uo.cloudfront.net,🎬国外媒体
+ - DOMAIN-SUFFIX,mytvsuper.com,🎬国外媒体
+ - DOMAIN-SUFFIX,tvb.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflix.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflix.net,🎬国外媒体
+ - DOMAIN-SUFFIX,nflxext.com,🎬国外媒体
+ - DOMAIN-SUFFIX,nflximg.com,🎬国外媒体
+ - DOMAIN-SUFFIX,nflximg.net,🎬国外媒体
+ - DOMAIN-SUFFIX,nflxso.net,🎬国外媒体
+ - DOMAIN-SUFFIX,nflxvideo.net,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest0.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest1.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest2.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest3.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest4.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest5.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest6.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest7.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest8.com,🎬国外媒体
+ - DOMAIN-SUFFIX,netflixdnstest9.com,🎬国外媒体
+ - IP-CIDR,23.246.0.0/18,🎬国外媒体,no-resolve
+ - IP-CIDR,37.77.184.0/21,🎬国外媒体,no-resolve
+ - IP-CIDR,45.57.0.0/17,🎬国外媒体,no-resolve
+ - IP-CIDR,64.120.128.0/17,🎬国外媒体,no-resolve
+ - IP-CIDR,66.197.128.0/17,🎬国外媒体,no-resolve
+ - IP-CIDR,108.175.32.0/20,🎬国外媒体,no-resolve
+ - IP-CIDR,192.173.64.0/18,🎬国外媒体,no-resolve
+ - IP-CIDR,198.38.96.0/19,🎬国外媒体,no-resolve
+ - IP-CIDR,198.45.48.0/20,🎬国外媒体,no-resolve
+ - DOMAIN-SUFFIX,dmc.nico,🎬国外媒体
+ - DOMAIN-SUFFIX,nicovideo.jp,🎬国外媒体
+ - DOMAIN-SUFFIX,nimg.jp,🎬国外媒体
+ - DOMAIN-SUFFIX,socdm.com,🎬国外媒体
+ - DOMAIN-SUFFIX,pbs.org,🎬国外媒体
+ - DOMAIN-SUFFIX,phncdn.com,🎬国外媒体
+ - DOMAIN-SUFFIX,pornhub.com,🎬国外媒体
+ - DOMAIN-SUFFIX,pornhubpremium.com,🎬国外媒体
+ - DOMAIN-SUFFIX,skyking.com.tw,🎬国外媒体
+ - DOMAIN,hamifans.emome.net,🎬国外媒体
+ - DOMAIN-SUFFIX,twitch.tv,🎬国外媒体
+ - DOMAIN-SUFFIX,twitchcdn.net,🎬国外媒体
+ - DOMAIN-SUFFIX,ttvnw.net,🎬国外媒体
+ - DOMAIN-SUFFIX,jtvnw.net,🎬国外媒体
+ - DOMAIN-SUFFIX,viu.com,🎬国外媒体
+ - DOMAIN-SUFFIX,viu.tv,🎬国外媒体
+ - DOMAIN,api.viu.now.com,🎬国外媒体
+ - DOMAIN,d1k2us671qcoau.cloudfront.net,🎬国外媒体
+ - DOMAIN,d2anahhhmp1ffz.cloudfront.net,🎬国外媒体
+ - DOMAIN,dfp6rglgjqszk.cloudfront.net,🎬国外媒体
+ - DOMAIN-SUFFIX,googlevideo.com,🎬国外媒体
+ - DOMAIN-SUFFIX,youtube.com,🎬国外媒体
+ - DOMAIN,youtubei.googleapis.com,🎬国外媒体
+ - DOMAIN-SUFFIX,biliapi.com,🎬哔哩哔哩
+ - DOMAIN-SUFFIX,biliapi.net,🎬哔哩哔哩
+ - DOMAIN-SUFFIX,bilibili.com,🎬哔哩哔哩
+ - DOMAIN-SUFFIX,bilibili.tv,🎬哔哩哔哩
+ - DOMAIN-SUFFIX,bilivideo.com,🎬哔哩哔哩
+
+ - DOMAIN-SUFFIX,local,DIRECT
+ - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
+ - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
+ - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
+ - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
+ - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
+ - IP-CIDR6,::1/128,DIRECT,no-resolve
+ - IP-CIDR6,fc00::/7,DIRECT,no-resolve
+ - IP-CIDR6,fe80::/10,DIRECT,no-resolve
+ - IP-CIDR6,fd00::/8,DIRECT,no-resolve
+ - DOMAIN,app.adjust.com,DIRECT
+ - DOMAIN-SUFFIX,googletraveladservices.com,DIRECT
+ - DOMAIN,dl.google.com,DIRECT
+ - DOMAIN,mtalk.google.com,DIRECT
+ - DOMAIN,livew.l.qq.com,DIRECT
+ - DOMAIN,vd.l.qq.com,DIRECT
+ - DOMAIN,analytics.strava.com,DIRECT
+ - DOMAIN,msg.umeng.com,DIRECT
+ - DOMAIN,msg.umengcloud.com,DIRECT
+ - DOMAIN-SUFFIX,qhres.com,DIRECT
+ - DOMAIN-SUFFIX,qhimg.com,DIRECT
+ - DOMAIN-SUFFIX,akadns.net,DIRECT
+ - DOMAIN-SUFFIX,alibaba.com,DIRECT
+ - DOMAIN-SUFFIX,alicdn.com,DIRECT
+ - DOMAIN-SUFFIX,alikunlun.com,DIRECT
+ - DOMAIN-SUFFIX,alipay.com,DIRECT
+ - DOMAIN-SUFFIX,amap.com,DIRECT
+ - DOMAIN-SUFFIX,autonavi.com,DIRECT
+ - DOMAIN-SUFFIX,dingtalk.com,DIRECT
+ - DOMAIN-SUFFIX,mxhichina.com,DIRECT
+ - DOMAIN-SUFFIX,soku.com,DIRECT
+ - DOMAIN-SUFFIX,taobao.com,DIRECT
+ - DOMAIN-SUFFIX,tmall.com,DIRECT
+ - DOMAIN-SUFFIX,tmall.hk,DIRECT
+ - DOMAIN-SUFFIX,ykimg.com,DIRECT
+ - DOMAIN-SUFFIX,youku.com,DIRECT
+ - DOMAIN-SUFFIX,xiami.com,DIRECT
+ - DOMAIN-SUFFIX,xiami.net,DIRECT
+ - DOMAIN-SUFFIX,aaplimg.com,DIRECT
+ - DOMAIN-SUFFIX,apple.co,DIRECT
+ - DOMAIN-SUFFIX,apple.com,DIRECT
+ - DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
+ - DOMAIN-SUFFIX,appstore.com,DIRECT
+ - DOMAIN-SUFFIX,cdn-apple.com,DIRECT
+ - DOMAIN-SUFFIX,crashlytics.com,DIRECT
+ - DOMAIN-SUFFIX,icloud.com,DIRECT
+ - DOMAIN-SUFFIX,icloud-content.com,DIRECT
+ - DOMAIN-SUFFIX,me.com,DIRECT
+ - DOMAIN-SUFFIX,mzstatic.com,DIRECT
+ - DOMAIN,www-cdn.icloud.com.akadns.net,DIRECT
+ - DOMAIN-SUFFIX,baidu.com,DIRECT
+ - DOMAIN-SUFFIX,baidubcr.com,DIRECT
+ - DOMAIN-SUFFIX,bdstatic.com,DIRECT
+ - DOMAIN-SUFFIX,yunjiasu-cdn.net,DIRECT
+ - DOMAIN-SUFFIX,acgvideo.com,DIRECT
+ - DOMAIN-SUFFIX,hdslb.com,DIRECT
+ - DOMAIN-SUFFIX,blizzard.com,DIRECT
+ - DOMAIN-SUFFIX,battle.net,DIRECT
+ - DOMAIN,blzddist1-a.akamaihd.net,DIRECT
+ - DOMAIN-SUFFIX,feiliao.com,DIRECT
+ - DOMAIN-SUFFIX,pstatp.com,DIRECT
+ - DOMAIN-SUFFIX,snssdk.com,DIRECT
+ - DOMAIN-SUFFIX,iesdouyin.com,DIRECT
+ - DOMAIN-SUFFIX,toutiao.com,DIRECT
+ - DOMAIN-SUFFIX,cctv.com,DIRECT
+ - DOMAIN-SUFFIX,cctvpic.com,DIRECT
+ - DOMAIN-SUFFIX,livechina.com,DIRECT
+ - DOMAIN-SUFFIX,didialift.com,DIRECT
+ - DOMAIN-SUFFIX,didiglobal.com,DIRECT
+ - DOMAIN-SUFFIX,udache.com,DIRECT
+ - DOMAIN-SUFFIX,343480.com,DIRECT
+ - DOMAIN-SUFFIX,baduziyuan.com,DIRECT
+ - DOMAIN-SUFFIX,com-hs-hkdy.com,DIRECT
+ - DOMAIN-SUFFIX,czybjz.com,DIRECT
+ - DOMAIN-SUFFIX,dandanzan.com,DIRECT
+ - DOMAIN-SUFFIX,fjhps.com,DIRECT
+ - DOMAIN-SUFFIX,kuyunbo.club,DIRECT
+ - DOMAIN-SUFFIX,21cn.com,DIRECT
+ - DOMAIN-SUFFIX,hitv.com,DIRECT
+ - DOMAIN-SUFFIX,mgtv.com,DIRECT
+ - DOMAIN-SUFFIX,iqiyi.com,DIRECT
+ - DOMAIN-SUFFIX,iqiyipic.com,DIRECT
+ - DOMAIN-SUFFIX,71.am.com,DIRECT
+ - DOMAIN-SUFFIX,jd.com,DIRECT
+ - DOMAIN-SUFFIX,jd.hk,DIRECT
+ - DOMAIN-SUFFIX,jdpay.com,DIRECT
+ - DOMAIN-SUFFIX,360buyimg.com,DIRECT
+ - DOMAIN-SUFFIX,iciba.com,DIRECT
+ - DOMAIN-SUFFIX,ksosoft.com,DIRECT
+ - DOMAIN-SUFFIX,meitu.com,DIRECT
+ - DOMAIN-SUFFIX,meitudata.com,DIRECT
+ - DOMAIN-SUFFIX,meitustat.com,DIRECT
+ - DOMAIN-SUFFIX,meipai.com,DIRECT
+ - DOMAIN-SUFFIX,duokan.com,DIRECT
+ - DOMAIN-SUFFIX,mi-img.com,DIRECT
+ - DOMAIN-SUFFIX,miui.com,DIRECT
+ - DOMAIN-SUFFIX,miwifi.com,DIRECT
+ - DOMAIN-SUFFIX,xiaomi.com,DIRECT
+ - DOMAIN-SUFFIX,microsoft.com,DIRECT
+ - DOMAIN-SUFFIX,msecnd.net,DIRECT
+ - DOMAIN-SUFFIX,office365.com,DIRECT
+ - DOMAIN-SUFFIX,outlook.com,DIRECT
+ - DOMAIN-SUFFIX,s-microsoft.com,DIRECT
+ - DOMAIN-SUFFIX,visualstudio.com,DIRECT
+ - DOMAIN-SUFFIX,windows.com,DIRECT
+ - DOMAIN-SUFFIX,windowsupdate.com,DIRECT
+ - DOMAIN,officecdn-microsoft-com.akamaized.net,DIRECT
+ - DOMAIN-SUFFIX,163.com,DIRECT
+ - DOMAIN-SUFFIX,126.net,DIRECT
+ - DOMAIN-SUFFIX,127.net,DIRECT
+ - DOMAIN-SUFFIX,163yun.com,DIRECT
+ - DOMAIN-SUFFIX,lofter.com,DIRECT
+ - DOMAIN-SUFFIX,netease.com,DIRECT
+ - DOMAIN-SUFFIX,ydstatic.com,DIRECT
+ - DOMAIN-SUFFIX,sina.com,DIRECT
+ - DOMAIN-SUFFIX,weibo.com,DIRECT
+ - DOMAIN-SUFFIX,weibocdn.com,DIRECT
+ - DOMAIN-SUFFIX,sohu.com,DIRECT
+ - DOMAIN-SUFFIX,sohucs.com,DIRECT
+ - DOMAIN-SUFFIX,sohu-inc.com,DIRECT
+ - DOMAIN-SUFFIX,v-56.com,DIRECT
+ - DOMAIN-SUFFIX,sogo.com,DIRECT
+ - DOMAIN-SUFFIX,sogou.com,DIRECT
+ - DOMAIN-SUFFIX,sogoucdn.com,DIRECT
+ - DOMAIN-SUFFIX,steampowered.com,DIRECT
+ - DOMAIN-SUFFIX,steam-chat.com,DIRECT
+ - DOMAIN-SUFFIX,steamgames.com,DIRECT
+ - DOMAIN-SUFFIX,steamusercontent.com,DIRECT
+ - DOMAIN-SUFFIX,steamcontent.com,DIRECT
+ - DOMAIN-SUFFIX,steamstatic.com,DIRECT
+ - DOMAIN-SUFFIX,steamcdn-a.akamaihd.net,DIRECT
+ - DOMAIN-SUFFIX,steamstat.us,DIRECT
+ - DOMAIN-SUFFIX,gtimg.com,DIRECT
+ - DOMAIN-SUFFIX,idqqimg.com,DIRECT
+ - DOMAIN-SUFFIX,igamecj.com,DIRECT
+ - DOMAIN-SUFFIX,myapp.com,DIRECT
+ - DOMAIN-SUFFIX,myqcloud.com,DIRECT
+ - DOMAIN-SUFFIX,qq.com,DIRECT
+ - DOMAIN-SUFFIX,tencent.com,DIRECT
+ - DOMAIN-SUFFIX,tencent-cloud.net,DIRECT
+ - DOMAIN-SUFFIX,jstucdn.com,DIRECT
+ - DOMAIN-SUFFIX,zimuzu.io,DIRECT
+ - DOMAIN-SUFFIX,zimuzu.tv,DIRECT
+ - DOMAIN-SUFFIX,zmz2019.com,DIRECT
+ - DOMAIN-SUFFIX,zmzapi.com,DIRECT
+ - DOMAIN-SUFFIX,zmzapi.net,DIRECT
+ - DOMAIN-SUFFIX,zmzfile.com,DIRECT
+ - DOMAIN-SUFFIX,ccgslb.com,DIRECT
+ - DOMAIN-SUFFIX,ccgslb.net,DIRECT
+ - DOMAIN-SUFFIX,chinanetcenter.com,DIRECT
+ - DOMAIN-SUFFIX,meixincdn.com,DIRECT
+ - DOMAIN-SUFFIX,ourdvs.com,DIRECT
+ - DOMAIN-SUFFIX,staticdn.net,DIRECT
+ - DOMAIN-SUFFIX,wangsu.com,DIRECT
+ - DOMAIN-SUFFIX,ipip.net,DIRECT
+ - DOMAIN-SUFFIX,ip.la,DIRECT
+ - DOMAIN-SUFFIX,ip-cdn.com,DIRECT
+ - DOMAIN-SUFFIX,ipv6-test.com,DIRECT
+ - DOMAIN-SUFFIX,test-ipv6.com,DIRECT
+ - DOMAIN-SUFFIX,whatismyip.com,DIRECT
+ - DOMAIN-SUFFIX,netspeedtestmaster.com,DIRECT
+ - DOMAIN,speedtest.macpaw.com,DIRECT
+ - DOMAIN-SUFFIX,awesome-hd.me,DIRECT
+ - DOMAIN-SUFFIX,broadcasthe.net,DIRECT
+ - DOMAIN-SUFFIX,chdbits.co,DIRECT
+ - DOMAIN-SUFFIX,classix-unlimited.co.uk,DIRECT
+ - DOMAIN-SUFFIX,empornium.me,DIRECT
+ - DOMAIN-SUFFIX,gazellegames.net,DIRECT
+ - DOMAIN-SUFFIX,hdchina.org,DIRECT
+ - DOMAIN-SUFFIX,hdsky.me,DIRECT
+ - DOMAIN-SUFFIX,icetorrent.org,DIRECT
+ - DOMAIN-SUFFIX,jpopsuki.eu,DIRECT
+ - DOMAIN-SUFFIX,keepfrds.com,DIRECT
+ - DOMAIN-SUFFIX,madsrevolution.net,DIRECT
+ - DOMAIN-SUFFIX,m-team.cc,DIRECT
+ - DOMAIN-SUFFIX,nanyangpt.com,DIRECT
+ - DOMAIN-SUFFIX,ncore.cc,DIRECT
+ - DOMAIN-SUFFIX,open.cd,DIRECT
+ - DOMAIN-SUFFIX,ourbits.club,DIRECT
+ - DOMAIN-SUFFIX,passthepopcorn.me,DIRECT
+ - DOMAIN-SUFFIX,privatehd.to,DIRECT
+ - DOMAIN-SUFFIX,redacted.ch,DIRECT
+ - DOMAIN-SUFFIX,springsunday.net,DIRECT
+ - DOMAIN-SUFFIX,tjupt.org,DIRECT
+ - DOMAIN-SUFFIX,totheglory.im,DIRECT
+ - DOMAIN-SUFFIX,acm.org,DIRECT
+ - DOMAIN-SUFFIX,acs.org,DIRECT
+ - DOMAIN-SUFFIX,aip.org,DIRECT
+ - DOMAIN-SUFFIX,ams.org,DIRECT
+ - DOMAIN-SUFFIX,annualreviews.org,DIRECT
+ - DOMAIN-SUFFIX,aps.org,DIRECT
+ - DOMAIN-SUFFIX,ascelibrary.org,DIRECT
+ - DOMAIN-SUFFIX,asm.org,DIRECT
+ - DOMAIN-SUFFIX,asme.org,DIRECT
+ - DOMAIN-SUFFIX,astm.org,DIRECT
+ - DOMAIN-SUFFIX,bmj.com,DIRECT
+ - DOMAIN-SUFFIX,cambridge.org,DIRECT
+ - DOMAIN-SUFFIX,cas.org,DIRECT
+ - DOMAIN-SUFFIX,clarivate.com,DIRECT
+ - DOMAIN-SUFFIX,ebscohost.com,DIRECT
+ - DOMAIN-SUFFIX,emerald.com,DIRECT
+ - DOMAIN-SUFFIX,engineeringvillage.com,DIRECT
+ - DOMAIN-SUFFIX,icevirtuallibrary.com,DIRECT
+ - DOMAIN-SUFFIX,ieee.org,DIRECT
+ - DOMAIN-SUFFIX,imf.org,DIRECT
+ - DOMAIN-SUFFIX,iop.org,DIRECT
+ - DOMAIN-SUFFIX,jamanetwork.com,DIRECT
+ - DOMAIN-SUFFIX,jhu.edu,DIRECT
+ - DOMAIN-SUFFIX,jstor.org,DIRECT
+ - DOMAIN-SUFFIX,karger.com,DIRECT
+ - DOMAIN-SUFFIX,libguides.com,DIRECT
+ - DOMAIN-SUFFIX,madsrevolution.net,DIRECT
+ - DOMAIN-SUFFIX,mpg.de,DIRECT
+ - DOMAIN-SUFFIX,myilibrary.com,DIRECT
+ - DOMAIN-SUFFIX,nature.com,DIRECT
+ - DOMAIN-SUFFIX,oecd-ilibrary.org,DIRECT
+ - DOMAIN-SUFFIX,osapublishing.org,DIRECT
+ - DOMAIN-SUFFIX,oup.com,DIRECT
+ - DOMAIN-SUFFIX,ovid.com,DIRECT
+ - DOMAIN-SUFFIX,oxfordartonline.com,DIRECT
+ - DOMAIN-SUFFIX,oxfordbibliographies.com,DIRECT
+ - DOMAIN-SUFFIX,oxfordmusiconline.com,DIRECT
+ - DOMAIN-SUFFIX,pnas.org,DIRECT
+ - DOMAIN-SUFFIX,proquest.com,DIRECT
+ - DOMAIN-SUFFIX,rsc.org,DIRECT
+ - DOMAIN-SUFFIX,sagepub.com,DIRECT
+ - DOMAIN-SUFFIX,sciencedirect.com,DIRECT
+ - DOMAIN-SUFFIX,sciencemag.org,DIRECT
+ - DOMAIN-SUFFIX,scopus.com,DIRECT
+ - DOMAIN-SUFFIX,siam.org,DIRECT
+ - DOMAIN-SUFFIX,spiedigitallibrary.org,DIRECT
+ - DOMAIN-SUFFIX,springer.com,DIRECT
+ - DOMAIN-SUFFIX,springerlink.com,DIRECT
+ - DOMAIN-SUFFIX,tandfonline.com,DIRECT
+ - DOMAIN-SUFFIX,un.org,DIRECT
+ - DOMAIN-SUFFIX,uni-bielefeld.de,DIRECT
+ - DOMAIN-SUFFIX,webofknowledge.com,DIRECT
+ - DOMAIN-SUFFIX,westlaw.com,DIRECT
+ - DOMAIN-SUFFIX,wiley.com,DIRECT
+ - DOMAIN-SUFFIX,worldbank.org,DIRECT
+ - DOMAIN-SUFFIX,worldscientific.com,DIRECT
+ - DOMAIN-SUFFIX,cn,DIRECT
+ - DOMAIN-SUFFIX,360in.com,DIRECT
+ - DOMAIN-SUFFIX,51ym.me,DIRECT
+ - DOMAIN-SUFFIX,8686c.com,DIRECT
+ - DOMAIN-SUFFIX,abchina.com,DIRECT
+ - DOMAIN-SUFFIX,accuweather.com,DIRECT
+ - DOMAIN-SUFFIX,aicoinstorge.com,DIRECT
+ - DOMAIN-SUFFIX,air-matters.com,DIRECT
+ - DOMAIN-SUFFIX,air-matters.io,DIRECT
+ - DOMAIN-SUFFIX,aixifan.com,DIRECT
+ - DOMAIN-SUFFIX,amd.com,DIRECT
+ - DOMAIN-SUFFIX,b612.net,DIRECT
+ - DOMAIN-SUFFIX,bdatu.com,DIRECT
+ - DOMAIN-SUFFIX,beitaichufang.com,DIRECT
+ - DOMAIN-SUFFIX,bjango.com,DIRECT
+ - DOMAIN-SUFFIX,booking.com,DIRECT
+ - DOMAIN-SUFFIX,bstatic.com,DIRECT
+ - DOMAIN-SUFFIX,cailianpress.com,DIRECT
+ - DOMAIN-SUFFIX,camera360.com,DIRECT
+ - DOMAIN-SUFFIX,chinaso.com,DIRECT
+ - DOMAIN-SUFFIX,chua.pro,DIRECT
+ - DOMAIN-SUFFIX,chuimg.com,DIRECT
+ - DOMAIN-SUFFIX,chunyu.mobi,DIRECT
+ - DOMAIN-SUFFIX,chushou.tv,DIRECT
+ - DOMAIN-SUFFIX,cmbchina.com,DIRECT
+ - DOMAIN-SUFFIX,cmbimg.com,DIRECT
+ - DOMAIN-SUFFIX,ctrip.com,DIRECT
+ - DOMAIN-SUFFIX,dfcfw.com,DIRECT
+ - DOMAIN-SUFFIX,docschina.org,DIRECT
+ - DOMAIN-SUFFIX,douban.com,DIRECT
+ - DOMAIN-SUFFIX,doubanio.com,DIRECT
+ - DOMAIN-SUFFIX,douyu.com,DIRECT
+ - DOMAIN-SUFFIX,dxycdn.com,DIRECT
+ - DOMAIN-SUFFIX,dytt8.net,DIRECT
+ - DOMAIN-SUFFIX,eastmoney.com,DIRECT
+ - DOMAIN-SUFFIX,eudic.net,DIRECT
+ - DOMAIN-SUFFIX,feng.com,DIRECT
+ - DOMAIN-SUFFIX,fengkongcloud.com,DIRECT
+ - DOMAIN-SUFFIX,frdic.com,DIRECT
+ - DOMAIN-SUFFIX,futu5.com,DIRECT
+ - DOMAIN-SUFFIX,futunn.com,DIRECT
+ - DOMAIN-SUFFIX,gandi.net,DIRECT
+ - DOMAIN-SUFFIX,geilicdn.com,DIRECT
+ - DOMAIN-SUFFIX,getpricetag.com,DIRECT
+ - DOMAIN-SUFFIX,gifshow.com,DIRECT
+ - DOMAIN-SUFFIX,godic.net,DIRECT
+ - DOMAIN-SUFFIX,hicloud.com,DIRECT
+ - DOMAIN-SUFFIX,hongxiu.com,DIRECT
+ - DOMAIN-SUFFIX,hostbuf.com,DIRECT
+ - DOMAIN-SUFFIX,huxiucdn.com,DIRECT
+ - DOMAIN-SUFFIX,huya.com,DIRECT
+ - DOMAIN-SUFFIX,infinitynewtab.com,DIRECT
+ - DOMAIN-SUFFIX,ithome.com,DIRECT
+ - DOMAIN-SUFFIX,java.com,DIRECT
+ - DOMAIN-SUFFIX,jidian.im,DIRECT
+ - DOMAIN-SUFFIX,kaiyanapp.com,DIRECT
+ - DOMAIN-SUFFIX,kaspersky-labs.com,DIRECT
+ - DOMAIN-SUFFIX,keepcdn.com,DIRECT
+ - DOMAIN-SUFFIX,kkmh.com,DIRECT
+ - DOMAIN-SUFFIX,licdn.com,DIRECT
+ - DOMAIN-SUFFIX,loli.net,DIRECT
+ - DOMAIN-SUFFIX,luojilab.com,DIRECT
+ - DOMAIN-SUFFIX,maoyan.com,DIRECT
+ - DOMAIN-SUFFIX,maoyun.tv,DIRECT
+ - DOMAIN-SUFFIX,meituan.com,DIRECT
+ - DOMAIN-SUFFIX,meituan.net,DIRECT
+ - DOMAIN-SUFFIX,mobike.com,DIRECT
+ - DOMAIN-SUFFIX,moke.com,DIRECT
+ - DOMAIN-SUFFIX,mubu.com,DIRECT
+ - DOMAIN-SUFFIX,myzaker.com,DIRECT
+ - DOMAIN-SUFFIX,nim-lang-cn.org,DIRECT
+ - DOMAIN-SUFFIX,nvidia.com,DIRECT
+ - DOMAIN-SUFFIX,oracle.com,DIRECT
+ - DOMAIN-SUFFIX,paypal.com,DIRECT
+ - DOMAIN-SUFFIX,paypalobjects.com,DIRECT
+ - DOMAIN-SUFFIX,qdaily.com,DIRECT
+ - DOMAIN-SUFFIX,qidian.com,DIRECT
+ - DOMAIN-SUFFIX,qyer.com,DIRECT
+ - DOMAIN-SUFFIX,qyerstatic.com,DIRECT
+ - DOMAIN-SUFFIX,raychase.net,DIRECT
+ - DOMAIN-SUFFIX,ronghub.com,DIRECT
+ - DOMAIN-SUFFIX,ruguoapp.com,DIRECT
+ - DOMAIN-SUFFIX,s-reader.com,DIRECT
+ - DOMAIN-SUFFIX,sankuai.com,DIRECT
+ - DOMAIN-SUFFIX,scomper.me,DIRECT
+ - DOMAIN-SUFFIX,seafile.com,DIRECT
+ - DOMAIN-SUFFIX,sm.ms,DIRECT
+ - DOMAIN-SUFFIX,smzdm.com,DIRECT
+ - DOMAIN-SUFFIX,snapdrop.net,DIRECT
+ - DOMAIN-SUFFIX,snwx.com,DIRECT
+ - DOMAIN-SUFFIX,sspai.com,DIRECT
+ - DOMAIN-SUFFIX,takungpao.com,DIRECT
+ - DOMAIN-SUFFIX,teamviewer.com,DIRECT
+ - DOMAIN-SUFFIX,tianyancha.com,DIRECT
+ - DOMAIN-SUFFIX,udacity.com,DIRECT
+ - DOMAIN-SUFFIX,uning.com,DIRECT
+ - DOMAIN-SUFFIX,vmware.com,DIRECT
+ - DOMAIN-SUFFIX,weather.com,DIRECT
+ - DOMAIN-SUFFIX,weico.cc,DIRECT
+ - DOMAIN-SUFFIX,weidian.com,DIRECT
+ - DOMAIN-SUFFIX,xiachufang.com,DIRECT
+ - DOMAIN-SUFFIX,ximalaya.com,DIRECT
+ - DOMAIN-SUFFIX,xinhuanet.com,DIRECT
+ - DOMAIN-SUFFIX,xmcdn.com,DIRECT
+ - DOMAIN-SUFFIX,yangkeduo.com,DIRECT
+ - DOMAIN-SUFFIX,zhangzishi.cc,DIRECT
+ - DOMAIN-SUFFIX,zhihu.com,DIRECT
+ - DOMAIN-SUFFIX,zhimg.com,DIRECT
+ - DOMAIN-SUFFIX,zhuihd.com,DIRECT
+ - DOMAIN,download.jetbrains.com,DIRECT
+ - DOMAIN,images-cn.ssl-images-amazon.com,DIRECT
+ - IP-CIDR,119.28.28.28/32,DIRECT,no-resolve
+ - GEOIP,CN,DIRECT
+
+ - MATCH,⚓️其他流量
diff --git a/server/public/lkeqHaCOXv.txt b/server/public/lkeqHaCOXv.txt
new file mode 100755
index 000000000..27686f3b6
--- /dev/null
+++ b/server/public/lkeqHaCOXv.txt
@@ -0,0 +1 @@
+67691d06fbef1df482d1152f8b71cf0d
\ No newline at end of file
diff --git a/server/tests/DiagnosisValidateAddSceneTest.php b/server/tests/DiagnosisValidateAddSceneTest.php
new file mode 100644
index 000000000..427a31ffa
--- /dev/null
+++ b/server/tests/DiagnosisValidateAddSceneTest.php
@@ -0,0 +1,47 @@
+remove('task', true)"),
+ 'add scene strips the AI assistant task rule'
+);
+diagnosisAddSceneExpect(
+ str_contains($validateSource, "return \$this->only(['id', 'task', 'prompt']);"),
+ 'aiAssistant scene still requires a task'
+);
+
+$addPayload = [
+ 'patient_name' => '张三',
+ 'phone' => '13800138000',
+ 'gender' => 1,
+ 'age' => 50,
+ 'diagnosis_type' => 'follow_up',
+ 'local_hospital_name' => '某医院',
+];
+
+$addScene = (new DiagnosisValidate())->scene('add');
+$addOk = $addScene->check($addPayload);
+diagnosisAddSceneExpect(
+ $addOk === true,
+ 'add scene accepts a diagnosis payload without an AI assistant task'
+ . ($addOk ? '' : '; got: ' . $addScene->getError())
+);
+
+echo "Diagnosis add-scene validation: OK\n";