import{o as ie,ap as fe,be as ye,q as d,r as k,s as l,ac as N,O as $,D as n,L as v,u as L,by as be,K as we,P as te,bi as ke,T as s,ae as xe,v as i,b6 as Ce,b7 as Me,b8 as ne,bA as A,bm as Ve,bn as Le,aw as Se,b9 as Te,bk as ze,br as Ee,F as M,bI as Ne,cR as $e,bj as he,bs as Ue,G as Be,bt as De,M as p,ba as Ie,e as Pe}from"./.pnpm-9dA1PEvN.js";import{r as S,i as qe,_ as Fe}from"./index-BWzN7QIb.js";function G(){let u=0;return{next(m){u+=1;const T=Array.isArray(m)?[...m]:m&&typeof m=="object"?{...m}:m;return Object.freeze({generation:u,snapshot:T})},invalidate(){return u+=1,u},isLatest(m){return(m==null?void 0:m.generation)===u}}}function Re(u){return S.get({url:"/pharmacy.medicineMapping/lists",params:u})}function Oe(){return S.get({url:"/pharmacy.medicineMapping/status"})}function je(u){return S.get({url:"/pharmacy.medicineMapping/catalogOptions",params:u})}function Ke(u){return S.post({url:"/pharmacy.medicineMapping/save",params:u})}function Ae(u){return S.post({url:"/pharmacy.medicineMapping/unlink",params:u})}function Ge(){return S.post({url:"/pharmacy.medicineMapping/sync"})}const He={class:"mapping-page"},Je={class:"page-header"},Qe={class:"status-strip"},We={class:"status-item"},Xe={class:"status-item warning"},Ye={class:"status-item"},Ze=["title"],ea={class:"table-wrap"},aa={class:"medicine-name"},la={class:"subline"},ta={class:"medicine-name"},na={class:"subline code"},ia={class:"subline"},sa={class:"subline"},oa={class:"pagination-wrap"},ua={class:"local-summary"},da={class:"option-row"},ra=ie({name:"pharmacyMedicineMapping"}),ca=ie({...ra,setup(u){const m=()=>({sync_enabled:!1,cursor:0,last_success_time:0,last_failure_time:0,last_error_summary:"",is_syncing:!1,catalog_total:0,catalog_active:0,unmapped_local:0}),T=p(!1),I=p(!1),P=p(!1),q=p(!1),F=p(!1),H=p([]),J=p(0),r=p(m()),o=Ie({page_no:1,page_size:20,local_name:"",remote_keyword:"",mapping_status:""}),z=p(!1),g=p(null),b=p(""),h=p([]);let E;const R=G(),V=G(),O=G(),Q=t=>{const e=Number(t||0);return Number.isFinite(e)?e.toFixed(2):"0.00"},W=t=>t?new Date(t*1e3).toLocaleString("zh-CN",{hour12:!1}):"",se=t=>t===1?"已映射":t===2?"远端失效":"未映射",oe=t=>t===1?"success":t===2?"warning":"info",C=async()=>{const t=R.next({...o});T.value=!0;try{const e=await Re(t.snapshot);R.isLatest(t)&&(H.value=e.lists||[],J.value=e.count||0)}finally{R.isLatest(t)&&(T.value=!1)}},U=async()=>{const t=O.next(void 0);I.value=!0;try{const e=await Oe();O.isLatest(t)&&(r.value=e)}finally{O.isLatest(t)&&(I.value=!1)}},B=()=>{o.page_no=1,C()},ue=()=>{o.local_name="",o.remote_keyword="",o.mapping_status="",B()},de=async()=>{P.value=!0;try{const t=await Ge();qe.msgSuccess(`同步完成:拉取 ${t.pulled},新增 ${t.created},更新 ${t.updated},停用 ${t.deactivated}`),await Promise.all([C(),U()])}finally{P.value=!1}},j=async(t,e=Number((c=>(c=g.value)==null?void 0:c.local_medicine_id)()||0))=>{var _;const f=V.next({keyword:t.trim(),localMedicineId:e});F.value=!0;try{const x=await je({keyword:f.snapshot.keyword,limit:30});V.isLatest(f)&&Number(((_=g.value)==null?void 0:_.local_medicine_id)||0)===f.snapshot.localMedicineId&&(h.value=x)}finally{V.isLatest(f)&&(F.value=!1)}return f},re=t=>{E&&window.clearTimeout(E),V.invalidate(),E=window.setTimeout(()=>void j(t),250)},ce=async t=>{var _;E&&window.clearTimeout(E),V.invalidate();const e={...t},c=Number(e.local_medicine_id);g.value=e,b.value=e.mapping_status===1&&e.medicine_code||"",h.value=[],z.value=!0;const f=await j(e.local_name,c);!V.isLatest(f)||Number(((_=g.value)==null?void 0:_.local_medicine_id)||0)!==c||b.value&&!h.value.some(x=>x.medicine_code===b.value)&&await j(b.value,c)},me=async()=>{if(!(!g.value||!b.value)){q.value=!0;try{await Ke({local_medicine_id:g.value.local_medicine_id,medicine_code:b.value}),z.value=!1,await Promise.all([C(),U()])}finally{q.value=!1}}},pe=async t=>{await Pe.confirm(`确认解除“${t.local_name}”与 ${t.medicine_code} 的映射?`,"解除映射",{type:"warning",confirmButtonText:"解除",cancelButtonText:"取消"}),await Ae({local_medicine_id:t.local_medicine_id}),await Promise.all([C(),U()])};return fe(()=>{Promise.all([C(),U()])}),(t,e)=>{var ae;const c=we,f=Me,_=Ce,x=Le,X=Ve,Y=Te,w=ze,Z=Ee,_e=he,ve=Ue,ge=De,K=ye("perms"),ee=ke;return d(),k("div",He,[l("header",Je,[e[10]||(e[10]=l("h1",null,"洛阳药房药材映射",-1)),r.value.sync_enabled?N((d(),$(c,{key:0,type:"primary",icon:L(be),loading:P.value,onClick:de},{default:n(()=>[...e[9]||(e[9]=[v(" 增量同步 ",-1)])]),_:1},8,["icon","loading"])),[[K,["pharmacy.medicineMapping/sync"]]]):te("",!0)]),N((d(),k("section",Qe,[l("div",We,[e[11]||(e[11]=l("span",null,"目录",-1)),l("strong",null,s(r.value.catalog_active)+" / "+s(r.value.catalog_total),1),e[12]||(e[12]=l("small",null,"启用 / 总数",-1))]),l("div",Xe,[e[13]||(e[13]=l("span",null,"未映射本地药材",-1)),l("strong",null,s(r.value.unmapped_local),1),e[14]||(e[14]=l("small",null,"仅统计启用药材",-1))]),l("div",Ye,[e[15]||(e[15]=l("span",null,"同步游标",-1)),l("strong",null,s(r.value.cursor),1),l("small",null,s(W(r.value.last_success_time)||"尚未成功同步"),1)]),l("div",{class:xe(["status-item",{danger:!!r.value.last_error_summary}])},[e[16]||(e[16]=l("span",null,"最近同步",-1)),l("strong",null,s(r.value.is_syncing?"进行中":r.value.last_error_summary?"失败":"正常"),1),l("small",{title:r.value.last_error_summary},s(r.value.last_error_summary||W(r.value.last_failure_time)||"无失败记录"),9,Ze)],2)])),[[ee,I.value]]),i(Y,{class:"filter-bar",inline:"",onSubmit:e[3]||(e[3]=Se(()=>{},["prevent"]))},{default:n(()=>[i(_,{label:"本地药材"},{default:n(()=>[i(f,{modelValue:o.local_name,"onUpdate:modelValue":e[0]||(e[0]=a=>o.local_name=a),clearable:"",placeholder:"名称","prefix-icon":L(A),onKeyup:ne(B,["enter"])},null,8,["modelValue","prefix-icon"])]),_:1}),i(_,{label:"远端目录"},{default:n(()=>[i(f,{modelValue:o.remote_keyword,"onUpdate:modelValue":e[1]||(e[1]=a=>o.remote_keyword=a),clearable:"",placeholder:"名称或编码","prefix-icon":L(A),onKeyup:ne(B,["enter"])},null,8,["modelValue","prefix-icon"])]),_:1}),i(_,{label:"映射状态"},{default:n(()=>[i(X,{modelValue:o.mapping_status,"onUpdate:modelValue":e[2]||(e[2]=a=>o.mapping_status=a),clearable:"",placeholder:"全部",style:{width:"150px"}},{default:n(()=>[i(x,{label:"已映射",value:"mapped"}),i(x,{label:"未映射",value:"unmapped"}),i(x,{label:"远端失效",value:"invalid"})]),_:1},8,["modelValue"])]),_:1}),i(_,null,{default:n(()=>[i(c,{type:"primary",icon:L(A),onClick:B},{default:n(()=>[...e[17]||(e[17]=[v("查询",-1)])]),_:1},8,["icon"]),i(c,{onClick:ue},{default:n(()=>[...e[18]||(e[18]=[v("重置",-1)])]),_:1})]),_:1})]),_:1}),l("div",ea,[N((d(),$(_e,{data:H.value,border:"",stripe:"","table-layout":"fixed"},{default:n(()=>[i(w,{label:"本地药材","min-width":"190",fixed:"left"},{default:n(({row:a})=>[l("div",aa,s(a.local_name),1),l("div",la," ID "+s(a.local_medicine_id)+" · "+s(a.local_unit||"-"),1)]),_:1}),i(w,{label:"本地状态",width:"90",align:"center"},{default:n(({row:a})=>[i(Z,{type:a.local_status===1?"success":"info",size:"small"},{default:n(()=>[v(s(a.local_status===1?"启用":"停用"),1)]),_:2},1032,["type"])]),_:1}),i(w,{label:"映射状态",width:"105",align:"center"},{default:n(({row:a})=>[i(Z,{type:oe(a.mapping_status),size:"small"},{default:n(()=>[v(s(se(a.mapping_status)),1)]),_:2},1032,["type"])]),_:1}),i(w,{label:"洛阳药房目录","min-width":"250"},{default:n(({row:a})=>[a.medicine_code?(d(),k(M,{key:0},[l("div",ta,s(a.remote_name||"目录项不可用"),1),l("div",na,s(a.medicine_code),1)],64)):(d(),k(M,{key:1},[e[19]||(e[19]=l("div",{class:"medicine-name"},"-",-1)),e[20]||(e[20]=l("div",{class:"subline"},"未映射",-1))],64))]),_:1}),i(w,{label:"品牌","min-width":"130","show-overflow-tooltip":""},{default:n(({row:a})=>[v(s(a.mapping_status===0?"-":a.remote_brand||"-"),1)]),_:1}),i(w,{label:"单位",width:"80",align:"center"},{default:n(({row:a})=>[v(s(a.remote_unit||"-"),1)]),_:1}),i(w,{label:"价格",width:"155",align:"right"},{default:n(({row:a})=>[a.mapping_status!==0?(d(),k(M,{key:0},[l("div",null,"结算 ¥"+s(Q(a.settlement_price)),1),l("div",ia,"零售 ¥"+s(Q(a.retail_price)),1)],64)):(d(),k(M,{key:1},[e[21]||(e[21]=l("div",null,"-",-1)),e[22]||(e[22]=l("div",{class:"subline"},"未映射",-1))],64))]),_:1}),i(w,{label:"版本 / 状态",width:"130",align:"center"},{default:n(({row:a})=>[a.medicine_code?(d(),k(M,{key:0},[l("div",null,"v"+s(a.catalog_version||0),1),l("div",sa,s(a.remote_status===1&&a.remote_deleted!==1?"远端启用":"远端停用"),1)],64)):(d(),k(M,{key:1},[e[23]||(e[23]=l("div",null,"-",-1)),e[24]||(e[24]=l("div",{class:"subline"},"未映射",-1))],64))]),_:1}),i(w,{label:"操作",width:"170",fixed:"right",align:"center"},{default:n(({row:a})=>[N((d(),$(c,{type:"primary",link:"",icon:L(Ne),disabled:a.local_status!==1,onClick:D=>ce(a)},{default:n(()=>[v(s(a.mapping_status===1?"更换":"映射"),1)]),_:2},1032,["icon","disabled","onClick"])),[[K,["pharmacy.medicineMapping/save"]]]),a.mapping_status===1||a.mapping_status===2?N((d(),$(c,{key:0,type:"danger",link:"",icon:L($e),onClick:D=>pe(a)},{default:n(()=>[...e[25]||(e[25]=[v(" 解除 ",-1)])]),_:1},8,["icon","onClick"])),[[K,["pharmacy.medicineMapping/unlink"]]]):te("",!0)]),_:1})]),_:1},8,["data"])),[[ee,T.value]])]),l("div",oa,[i(ve,{"current-page":o.page_no,"onUpdate:currentPage":e[4]||(e[4]=a=>o.page_no=a),"page-size":o.page_size,"onUpdate:pageSize":e[5]||(e[5]=a=>o.page_size=a),total:J.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next, jumper",onSizeChange:C,onCurrentChange:C},null,8,["current-page","page-size","total"])]),i(ge,{modelValue:z.value,"onUpdate:modelValue":e[8]||(e[8]=a=>z.value=a),title:`${((ae=g.value)==null?void 0:ae.mapping_status)===1?"更换":"建立"}药材映射`,width:"min(560px, calc(100vw - 32px))","destroy-on-close":""},{footer:n(()=>[i(c,{onClick:e[7]||(e[7]=a=>z.value=!1)},{default:n(()=>[...e[27]||(e[27]=[v("取消",-1)])]),_:1}),i(c,{type:"primary",loading:q.value,disabled:!b.value,onClick:me},{default:n(()=>[...e[28]||(e[28]=[v(" 保存映射 ",-1)])]),_:1},8,["loading","disabled"])]),default:n(()=>{var a,D,le;return[l("div",ua,[e[26]||(e[26]=l("span",null,"本地药材",-1)),l("strong",null,s((a=g.value)==null?void 0:a.local_name),1),l("small",null,"ID "+s((D=g.value)==null?void 0:D.local_medicine_id)+" · "+s(((le=g.value)==null?void 0:le.local_unit)||"-"),1)]),i(Y,{"label-position":"top",class:"mapping-form"},{default:n(()=>[i(_,{label:"洛阳药房药材"},{default:n(()=>[i(X,{modelValue:b.value,"onUpdate:modelValue":e[6]||(e[6]=y=>b.value=y),filterable:"",remote:"","reserve-keyword":"",clearable:"","remote-method":re,loading:F.value,placeholder:"输入药材名称或编码检索",style:{width:"100%"}},{default:n(()=>[(d(!0),k(M,null,Be(h.value,y=>(d(),$(x,{key:y.medicine_code,label:`${y.name} · ${y.medicine_code}`,value:y.medicine_code},{default:n(()=>[l("div",da,[l("span",null,s(y.name),1),l("small",null,s(y.medicine_code)+" · "+s(y.brand||"无品牌")+" · "+s(y.unit),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),_:1})]),_:1})]}),_:1},8,["modelValue","title"])])}}}),_a=Fe(ca,[["__scopeId","data-v-1b7afda4"]]);export{_a as default};