DB0MqOeb.js 15.3 KB
import{_ as K}from"./Cba5FCYW.js";import{d as Le,u as Me,a as ze,b as Ke,y as je,k as N,w as u,A as Qe,o as m,e as c,f as r,g as t,_ as oe,c as w,n as b,j as R,t as d,l as ae,$ as Ye,p as g,q as se,s as p,B as x,a8 as Xe}from"./BtEn9SvP.js";import{a as We,_ as ie}from"./CISWP1pQ.js";import{_ as Ge}from"./CGpKcNx7.js";import{_ as He}from"./D1XImzPn.js";import{_ as Je,a as Ze,b as et}from"./Cw8QoC40.js";import{_ as tt}from"./7yIyqIY0.js";import{_ as ot}from"./9JBjgwkJ.js";import{_ as at,g as st}from"./K7-Fp-h8.js";import{_ as it}from"./3BmF-CSc.js";import{_ as nt}from"./B57PMWCO.js";import{_ as lt,b as rt}from"./Bu1OYQOt.js";import{_ as ct}from"./C392U5_K.js";import{u as dt}from"./sZhUfCvq.js";import{u as ut}from"./BW6H2G9j.js";import"./D5W8WIzq.js";import"./BP6f2Ivu.js";import"./B4Klxa_r.js";import"./BHXyHhK1.js";import"./3laQJA1P.js";import"./DYcig7R4.js";import"./BO2UtWXE.js";import"./BlfKXJ2P.js";import"./CKCLIpbs.js";import"./Dd6skURy.js";const pt={class:"space-y-4"},mt={class:"space-y-2"},ft={class:"flex flex-wrap items-center gap-2"},_t={key:0,class:"grid grid-cols-1 gap-2 md:grid-cols-2 lg:grid-cols-3"},gt={key:0,class:"text-sm text-error"},bt={class:"flex items-center justify-between gap-3 border-t border-default pt-4"},vt={class:"text-sm text-muted"},kt={class:"space-y-3"},wt=["accept"],xt={key:0,class:"mt-2 text-xs text-muted"},yt={class:"flex justify-end gap-2"},ht={class:"space-y-3"},St={class:"text-sm text-muted"},At={key:0,class:"rounded-lg border border-default px-3 py-2"},Tt={class:"text-xs text-muted"},Nt={class:"flex flex-wrap items-center gap-2 text-sm"},Vt={class:"font-semibold"},Ut={class:"text-muted"},$t={class:"space-y-1 text-sm"},Ct={class:"flex flex-wrap items-center gap-2 text-muted"},It={key:0,class:"text-xs text-muted"},Rt={key:1,class:"text-xs text-muted"},Pt=["href"],Et={key:1,class:"text-sm text-muted"},ne="/operations",Ft=50*1024*1024,co=Le({__name:"operations",setup(Ot){const j=K,V=oe,le=He,{t:a,locale:re}=Me(),Q=Xe(),v=ze(),{user:ce}=Ke(),{can:de,getDeniedReason:ue}=dt(),P=ut(),Y=["image/jpeg","image/png","image/webp","image/heic","video/mp4","video/quicktime","video/webm"],y=Qe("table"),E=g(!1),U=g(""),S=g(null),$=g(!1),A=g(),X=g([]),F=g(),O=g({}),B=g({pageIndex:0,pageSize:10}),n=se({workstation:"",stepName:"",operator:"",status:"all",sn:""}),T=g(!1),i=se({open:!1,task:void 0,action:"start",remark:"",testPassed:!0,evidenceFile:null}),D=p(()=>de(ne,"operations.skip")),W=e=>{if(!e)return!1;const o=e.trim().toLowerCase();return o.includes("返修")||o.includes("rework")},G=p(()=>!!i.task&&W(i.task?.stepName)),pe=p(()=>G.value),me=p(()=>!(G.value&&i.action==="complete_rework"));function H(e){v.add({title:a("permission.toast.title"),description:a(ue(ne,e)),icon:"i-lucide-shield-alert",color:"warning"})}function fe(){return{workstation:n.workstation.trim()||void 0,stepName:n.stepName.trim()||void 0,operator:n.operator.trim()||void 0,status:n.status==="all"?void 0:n.status,sn:n.sn.trim()||void 0}}async function q(){E.value=!0,U.value="";try{X.value=await P.getOperationTasks(fe())}catch{U.value=a("common.requestFailed")}finally{E.value=!1}}function _(e){return a(`operations.status.${e}`)}function L(e){return{pending:"neutral",in_progress:"primary",pending_test:"warning",failed:"error",rework:"warning",completed:"success",skipped:"neutral"}[e]}function _e(e){return a(`operations.result.${e}`)}function ge(e){return{pending:"neutral",pass:"success",fail:"error"}[e]}function M(e){if(!e)return"-";const o=new Date(e);if(Number.isNaN(o.getTime()))return e;const l=re.value==="zh-CN"?"zh-CN":"en-US";return new Intl.DateTimeFormat(l,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(o)}function be(e){return e===null?a("operations.audit.initialStatus"):_(e)}function ve(e){return e===null?"neutral":L(e)}function ke(e){return{start:"i-lucide-play",complete_assembly:"i-lucide-wrench",complete_rework:"i-lucide-wrench",submit_test:"i-lucide-flask-conical",skip:"i-lucide-skip-forward"}[e]}function J(e){return a(`operations.nextAction.${e}`)}const we=["start","complete_assembly","complete_rework","submit_test"];function xe(e){const o=W(e.stepName);return e.status==="pending"?["start","skip"]:e.status==="in_progress"?o?["complete_rework","submit_test","skip"]:["complete_assembly","submit_test","skip"]:e.status==="pending_test"||e.status==="rework"?e.status==="rework"?["complete_rework","skip"]:["submit_test","skip"]:e.status==="failed"?o?["complete_rework","skip"]:["skip"]:[]}function ye(e){const o=xe(e),l=e.nextAction;return we.includes(l)?o.filter(h=>h==="skip"||h===l):o}function C(e){return a(`operations.actions.${e}`)}function he(e,o){if(o==="skip"&&!D.value){H("operations.skip");return}i.open=!0,i.task=e,i.action=o,i.remark="",i.testPassed=!0,i.evidenceFile=null}function Se(e){const o=e.target,l=o?.files?.[0]??null;if(i.evidenceFile=null,!!l){if(!Y.includes(l.type)){v.add({title:a("common.error"),description:a("operations.actions.evidenceTypeInvalid"),icon:"i-lucide-circle-alert",color:"error"}),o&&(o.value="");return}if(l.size>Ft){v.add({title:a("common.error"),description:a("operations.actions.evidenceSizeExceeded"),icon:"i-lucide-circle-alert",color:"error"}),o&&(o.value="");return}i.evidenceFile=l}}function Ae(e){A.value=e,$.value=!0}async function Z(e){if(!i.task)return;const o=typeof e=="string"?e:i.action;if(o==="skip"&&!D.value){H("operations.skip");return}if(S.value===null){if(I.value&&!i.evidenceFile){v.add({title:a("common.error"),description:a("operations.actions.evidenceRequired"),icon:"i-lucide-circle-alert",color:"error"});return}if(o==="skip"&&!i.remark.trim()){v.add({title:a("common.error"),description:a("operations.actions.skipReasonRequired"),icon:"i-lucide-circle-alert",color:"error"});return}S.value=i.task.id;try{let l;if(I.value&&i.evidenceFile){const k=await P.uploadOperationEvidence(i.evidenceFile);if(!k.success||!k.relativePath){v.add({title:a("common.error"),description:k.message||a("operations.actions.evidenceUploadFailed"),icon:"i-lucide-circle-alert",color:"error"});return}l=k.relativePath}const h={operator:ce.value?.name||"未知操作员",remark:i.remark.trim()||void 0,testPassed:o==="submit_test"?i.testPassed:void 0,workstation:i.task.workstation,stepName:i.task.stepName,evidencePath:l},f=await P.runOperationAction(i.task.id,o,h);v.add({title:f.success?a("settings.profile.toastTitle"):a("common.error"),description:f.message,icon:f.success?"i-lucide-check":"i-lucide-circle-alert",color:f.success?"success":"error"}),f.success?(i.open=!1,await q()):f.errorCode==="ACTION_NOT_ALLOWED"&&await q()}catch{v.add({title:a("common.error"),description:a("common.requestFailed"),icon:"i-lucide-circle-alert",color:"error"})}finally{S.value=null}}}function Te(e){const o=e.original;return[{type:"label",label:a("operations.table.actions")},{label:a("operations.actions.audit"),icon:"i-lucide-scroll-text",onSelect:()=>Ae(o)},...ye(o).map(l=>({label:C(l),icon:{start:"i-lucide-play",complete_assembly:"i-lucide-wrench",complete_rework:"i-lucide-wrench",submit_test:"i-lucide-flask-conical",skip:"i-lucide-skip-forward"}[l],color:l==="skip"?"warning":"primary",disabled:l==="skip"&&!D.value,onSelect:()=>he(o,l)}))]}const Ne=p(()=>[{label:a("operations.filters.statusAll"),value:"all"},{label:_("pending"),value:"pending"},{label:_("in_progress"),value:"in_progress"},{label:_("pending_test"),value:"pending_test"},{label:_("failed"),value:"failed"},{label:_("rework"),value:"rework"},{label:_("completed"),value:"completed"},{label:_("skipped"),value:"skipped"}]),Ve=p(()=>[{label:a("operations.result.pass"),value:!0},{label:a("operations.result.fail"),value:!1}]),I=p(()=>i.action==="complete_assembly"||i.action==="submit_test"),Ue=Y.join(","),$e=p(()=>[{id:"select",header:({table:e})=>x(ie,{modelValue:e.getIsSomePageRowsSelected()?"indeterminate":e.getIsAllPageRowsSelected(),"onUpdate:modelValue":o=>e.toggleAllPageRowsSelected(!!o),ariaLabel:a("operations.table.selectAll")}),cell:({row:e})=>x(ie,{modelValue:e.getIsSelected(),"onUpdate:modelValue":o=>e.toggleSelected(!!o),ariaLabel:a("operations.table.selectRow")})},{id:"actions",cell:({row:e})=>x("div",{class:"text-right"},x(Ge,{content:{align:"end"},items:Te(e)},()=>x(oe,{icon:S.value===e.original.id?"i-lucide-loader-circle":"i-lucide-ellipsis-vertical",color:"neutral",variant:"ghost",class:S.value===e.original.id?"animate-spin":""})))},{accessorKey:"id",header:a("operations.table.taskId")},{id:"workOrderSn",header:a("operations.table.workOrderSn"),cell:({row:e})=>`${e.original.workOrderNo} / ${e.original.sn}`},{accessorKey:"stepName",header:a("operations.table.stepName")},{id:"workstationDevice",header:a("operations.table.workstationDevice"),cell:({row:e})=>`${e.original.workstation} / ${e.original.device}`},{accessorKey:"operator",header:a("operations.table.operator")},{id:"timeRange",header:a("operations.table.timeRange"),cell:({row:e})=>`${M(e.original.startedAt)} ~ ${M(e.original.endedAt)}`},{accessorKey:"result",header:a("operations.table.result"),cell:({row:e})=>{const o=e.original.result;return x(K,{color:ge(o),variant:"subtle"},()=>_e(o))}},{accessorKey:"status",header:a("operations.table.status"),cell:({row:e})=>{const o=e.original.status;return x(K,{color:L(o),variant:"subtle"},()=>_(o))}},{accessorKey:"nextAction",header:a("operations.table.nextAction"),cell:({row:e})=>J(e.original.nextAction)}]),Ce=p(()=>y.value?.tableApi?.getFilteredSelectedRowModel().rows.length||0),ee=p(()=>y.value?.tableApi?.getFilteredRowModel().rows.length||0),Ie=p(()=>A.value?.auditEvents??[]),te=p(()=>Ie.value.map(e=>({...e,icon:ke(e.action),dateText:M(e.at),actionLabel:C(e.action),fromStatusText:be(e.fromStatus),toStatusText:_(e.toStatus),nextActionLabel:J(e.nextAction),fromStatusColor:ve(e.fromStatus),toStatusColor:L(e.toStatus)}))),Re=p(()=>typeof Q.public.apiBase=="string"?Q.public.apiBase:"");return je(()=>({workstation:n.workstation,stepName:n.stepName,operator:n.operator,status:n.status,sn:n.sn}),()=>{q()},{immediate:!0}),(e,o)=>{const l=et,h=Ze,f=tt,k=ot,Pe=at,Ee=We,z=it,Fe=nt,Oe=Ye,Be=lt,De=ct,qe=Je;return m(),N(qe,{id:"operations"},{header:u(()=>[r(h,{title:t(a)("operations.title")},{leading:u(()=>[r(l)]),_:1},8,["title"])]),body:u(()=>[c("div",pt,[c("div",mt,[c("div",ft,[r(f,{modelValue:t(n).workstation,"onUpdate:modelValue":o[0]||(o[0]=s=>t(n).workstation=s),class:"w-72 max-w-full",placeholder:t(a)("operations.filters.workstation"),icon:"i-lucide-map-pin"},null,8,["modelValue","placeholder"]),r(t(V),{color:"neutral",variant:"outline",icon:t(T)?"i-lucide-chevron-up":"i-lucide-chevron-down",label:t(T)?t(a)("common.collapseQuery"):t(a)("common.advancedQuery"),onClick:o[1]||(o[1]=s=>T.value=!t(T))},null,8,["icon","label"])]),t(T)?(m(),w("div",_t,[r(f,{modelValue:t(n).stepName,"onUpdate:modelValue":o[2]||(o[2]=s=>t(n).stepName=s),placeholder:t(a)("operations.filters.stepName"),icon:"i-lucide-git-branch"},null,8,["modelValue","placeholder"]),r(f,{modelValue:t(n).operator,"onUpdate:modelValue":o[3]||(o[3]=s=>t(n).operator=s),placeholder:t(a)("operations.filters.operator"),icon:"i-lucide-user"},null,8,["modelValue","placeholder"]),r(k,{modelValue:t(n).status,"onUpdate:modelValue":o[4]||(o[4]=s=>t(n).status=s),items:t(Ne),placeholder:t(a)("operations.filters.status")},null,8,["modelValue","items","placeholder"]),r(f,{modelValue:t(n).sn,"onUpdate:modelValue":o[5]||(o[5]=s=>t(n).sn=s),placeholder:t(a)("operations.filters.sn"),icon:"i-lucide-scan-line"},null,8,["modelValue","placeholder"])])):b("",!0)]),r(Pe,{ref_key:"table",ref:y,"column-visibility":t(F),"onUpdate:columnVisibility":o[6]||(o[6]=s=>R(F)?F.value=s:null),"row-selection":t(O),"onUpdate:rowSelection":o[7]||(o[7]=s=>R(O)?O.value=s:null),pagination:t(B),"onUpdate:pagination":o[8]||(o[8]=s=>R(B)?B.value=s:null),"pagination-options":{getPaginationRowModel:t(st)()},data:t(X),columns:t($e),loading:t(E),class:"shrink-0",ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"py-2 first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default",separator:"h-0"}},null,8,["column-visibility","row-selection","pagination","pagination-options","data","columns","loading"]),t(U)?(m(),w("div",gt,d(t(U)),1)):b("",!0),c("div",bt,[c("div",vt,d(t(a)("operations.table.selectedRows",{selected:t(Ce),total:t(ee)})),1),r(Ee,{"default-page":(t(y)?.tableApi?.getState().pagination.pageIndex||0)+1,"items-per-page":t(y)?.tableApi?.getState().pagination.pageSize,total:t(ee),"onUpdate:page":o[9]||(o[9]=s=>t(y)?.tableApi?.setPageIndex(s-1))},null,8,["default-page","items-per-page","total"])])]),r(Fe,{open:t(i).open,"onUpdate:open":o[15]||(o[15]=s=>t(i).open=s),title:C(t(i).action)},{body:u(()=>[c("div",kt,[t(i).action==="submit_test"?(m(),N(z,{key:0,label:t(a)("operations.actions.testResult"),required:""},{default:u(()=>[r(k,{modelValue:t(i).testPassed,"onUpdate:modelValue":o[10]||(o[10]=s=>t(i).testPassed=s),items:t(Ve)},null,8,["modelValue","items"])]),_:1},8,["label"])):b("",!0),r(z,{label:t(a)("operations.actions.remarkLabel"),required:t(i).action==="skip"},{default:u(()=>[r(t(le),{modelValue:t(i).remark,"onUpdate:modelValue":o[11]||(o[11]=s=>t(i).remark=s),rows:5,placeholder:t(a)("operations.actions.remarkPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label","required"]),t(I)?(m(),N(z,{key:1,label:t(a)("operations.actions.evidenceLabel"),required:""},{default:u(()=>[c("input",{accept:t(Ue),type:"file",class:"block w-full rounded-md border border-default bg-default px-3 py-2 text-sm text-default",onChange:Se},null,40,wt),t(i).evidenceFile?(m(),w("p",xt,d(t(a)("operations.actions.evidenceSelected"))+": "+d(t(i).evidenceFile.name),1)):b("",!0)]),_:1},8,["label"])):b("",!0)])]),footer:u(()=>[c("div",yt,[r(t(V),{color:"neutral",variant:"outline",label:t(a)("common.cancel"),onClick:o[12]||(o[12]=s=>t(i).open=!1)},null,8,["label"]),t(pe)?(m(),N(t(V),{key:0,color:"primary",variant:"soft",label:t(a)("operations.actions.complete_repair"),onClick:o[13]||(o[13]=s=>Z("complete_rework"))},null,8,["label"])):b("",!0),t(me)?(m(),N(t(V),{key:1,disabled:t(I)&&!t(i).evidenceFile,label:C(t(i).action),onClick:o[14]||(o[14]=s=>Z())},null,8,["disabled","label"])):b("",!0)])]),_:1},8,["open","title"]),r(De,{open:t($),"onUpdate:open":o[16]||(o[16]=s=>R($)?$.value=s:null),title:t(a)("operations.audit.title")},{body:u(()=>[c("div",ht,[c("div",St," #"+d(t(A)?.id)+" · "+d(t(A)?.workOrderNo)+" / "+d(t(A)?.sn),1),t(te).length?(m(),w("div",At,[r(Be,{items:t(te),size:"sm",color:"neutral"},{date:u(({item:s})=>[c("span",Tt,d(s.dateText),1)]),title:u(({item:s})=>[c("div",Nt,[c("span",Vt,d(s.operator),1),o[17]||(o[17]=c("span",{class:"text-muted"},"·",-1)),c("span",Ut,d(s.actionLabel),1)])]),description:u(({item:s})=>[c("div",$t,[c("div",Ct,[r(t(j),{color:s.fromStatusColor,variant:"soft"},{default:u(()=>[ae(d(s.fromStatusText),1)]),_:2},1032,["color"]),r(Oe,{name:"i-lucide-arrow-right",class:"size-4 text-muted"}),r(t(j),{color:s.toStatusColor,variant:"soft"},{default:u(()=>[ae(d(s.toStatusText),1)]),_:2},1032,["color"]),c("span",null,"· "+d(s.nextActionLabel),1)]),s.remark?(m(),w("div",It,d(s.remark),1)):b("",!0),s.evidencePath?(m(),w("div",Rt,[c("a",{class:"text-primary underline",href:t(rt)(s.evidencePath,t(Re)),target:"_blank",rel:"noopener noreferrer"},d(t(a)("operations.audit.showAttachment")),9,Pt)])):b("",!0)])]),_:1},8,["items"])])):(m(),w("div",Et,d(t(a)("operations.audit.empty")),1))])]),_:1},8,["open","title"])]),_:1})}}});export{co as default};