1 line
15 KiB
JavaScript
1 line
15 KiB
JavaScript
import{$ as e,At as t,Bt as n,Cr as r,Dt as i,Er as a,G as o,H as s,Jt as c,K as ee,M as te,Mt as l,Ot as u,Pt as d,Q as f,U as p,W as m,Wn as h,er as g,ft as _,mn as v,tt as y,xr as ne,yn as b}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-CFxQnYK4.js";import{t as x}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-BnO-wAhh.js";import"./vendor-vue-CSlAvuUs.js";import{D as S}from"./workspace-DxKKyh8w.js";import{a as C}from"./decimal-D3bp1pbs.js";import{d as w,n as T}from"./vendor-ui-B4V4Cf1T.js";import{r as E}from"./numberFormat-jhZZmX17.js";import{n as D}from"./sql-C69Jo4HU.js";import{t as O}from"./_plugin-vue_export-helper-DUFB50Ey.js";import{C as k,n as A}from"./index-CAPJG_im.js";import{t as j}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-DXO754eW.js";import{a as re,i as ie,o as ae,r as oe,t as se}from"./agGridReadonlyAutoHeight-BpRhYCq1.js";import"./pricingPersistControl-DVG_7RF1.js";var ce={class:`h-full min-h-0 flex flex-col`},le={class:`rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col`},ue={class:`flex items-center justify-between border-b px-4 py-3`},de={class:`text-sm font-semibold text-foreground`},fe={class:`px-6 py-4 border-b bg-slate-50 flex items-center justify-between shrink-0`},pe={class:`font-bold text-base`},me={class:`flex gap-3`},he={class:`mt-4 flex items-center justify-end gap-2`},ge={class:`mt-4 flex items-center justify-end gap-2`},M=O(y({__name:`OtherService`,props:{storageKey:{},title:{default:void 0},contractId:{},serviceId:{},enableZxFwSync:{type:Boolean,default:!1},syncField:{default:`hourly`},htMainStorageKey:{},htRowId:{},htMethodType:{}},setup(O){let M=O;k();let{t:N,locale:P}=S(),F=h([]),I=h(null),L=s(()=>M.syncField===`investScale`?`investScale`:M.syncField===`landScale`?`landScale`:M.syncField===`workload`?`workload`:M.syncField===`hourly`?`hourly`:null);s(()=>!!(M.enableZxFwSync&&M.contractId&&M.serviceId!=null&&L.value)),s(()=>!!(M.htMainStorageKey&&M.htRowId&&M.htMethodType));let R=s({get:()=>F.value,set:e=>{F.value=e}}),z=h(!1),B=h(!1),V=h(null),H=h(null);s(()=>{if(!V.value)return``;let e=R.value.find(e=>e.id===V.value);return e?`${e.feeItem}`:V.value}),s(()=>{if(!H.value)return``;let e=R.value.find(e=>e.id===H.value);return e?`${e.feeItem}`:H.value});let _e=e=>e?String(P.value).toLowerCase().startsWith(`en`)&&e.nameEn||e.name:``;Object.entries(D).sort((e,t)=>Number(e[0])-Number(t[0])).filter(e=>{let t=e[1];return!!(t?.code&&t?.name)});let U=async()=>{},ve=async e=>{let t=[];if(e.length>0){for(let n of e||[])t.push({...n});return t}return await U()},ye=e=>{if(e===``||e==null)return null;let t=E(e,{sanitize:!0,precision:0});return t==null||!Number.isSafeInteger(t)||t<0?null:t},be=()=>{for(let e of R.value)e.serviceFee=(e.unitPrice??0)*(e.quantity??0)},xe=y({name:`ActionCellRenderer`,props:{params:{type:Object,required:!0}},setup(e){return()=>e.params.node?.rowPinned===`bottom`?null:_(`div`,{class:`zxfw-action-wrap`},[_(`div`,{class:`zxfw-action-group`},[_(`button`,{class:`zxfw-action-btn`,"data-action":`clear`,type:`button`},[_(w,{size:13,"aria-hidden":`true`}),_(`span`,N(`htZxFw.resetDefault`))]),_(`button`,{class:`zxfw-action-btn zxfw-action-btn--danger`,"data-action":`delete`,type:`button`},[_(T,{size:13,"aria-hidden":`true`}),_(`span`,N(`htZxFw.delete`))])])])}}),Se=[{headerName:N(`otherService.columns.num`),minWidth:90,width:100,editable:!1,colSpan:e=>e.node?.rowPinned?2:1,valueGetter:e=>e.node?.rowPinned===`bottom`?`/`:String(e.node.rowIndex+1),cellClass:[`text-center`,`font-mono`],filter:!1,valueFormatter:e=>e.node?.rowPinned?N(`hourlyFeeGrid.total`):e.value||0},{headerName:N(`otherService.columns.feeItem`),field:`feeItem`,flex:2,minWidth:200,wrapText:!0,autoHeight:!0,editable:!0,cellEditor:`agTextCellEditor`,valueFormatter:e=>e.node?.rowPinned===`bottom`?`/`:e.value?e.value||``:N(`otherService.clickToInput`),valueParser:e=>e.newValue?.trim()||``,cellClassRules:{"editable-cell-empty":e=>e.node?.rowPinned!==`bottom`&&(e.value==null||e.value===``||e.value===0)}},{headerName:N(`otherService.columns.unit`),field:`unit`,width:150,cellEditor:`agTextCellEditor`,editable:e=>e.node?.rowPinned!==`bottom`,valueFormatter:e=>e.node?.rowPinned===`bottom`?`/`:e.value?e.value||``:N(`otherService.clickToInput`),cellClassRules:{"editable-cell-empty":e=>!e.node?.group&&!e.node?.rowPinned&&(e.value==null||e.value===``)}},{headerName:N(`otherService.columns.unitPrice`),field:`unitPrice`,width:150,cellEditor:`agTextCellEditor`,editable:e=>e.node?.rowPinned!==`bottom`,valueFormatter:e=>e.node?.rowPinned===`bottom`?`/`:e.value?e.value||``:N(`otherService.clickToInput`),valueParser:e=>E(e.newValue,{precision:2}),cellClassRules:{"editable-cell-empty":e=>e.node?.rowPinned!==`bottom`&&(e.value==null||e.value===``||e.value===0)}},{headerName:N(`otherService.columns.quantity`),field:`quantity`,width:150,editable:e=>e.node?.rowPinned!==`bottom`,cellClass:`hourly-fee-name-cell`,valueFormatter:e=>e.node?.rowPinned===`bottom`?`/`:e.value?e.value||0:N(`otherService.clickToInput`),valueParser:e=>E(e.newValue,{precision:2}),cellClassRules:{"editable-cell-empty":e=>e.node?.rowPinned!==`bottom`&&(e.value==null||e.value===``||e.value===0)}},{headerName:N(`otherService.columns.serviceFee`),field:`serviceFee`,minWidth:210,width:230,tooltipField:`serviceFee`,wrapText:!0,autoHeight:!0,cellClass:`hourly-fee-name-cell`,cellStyle:{whiteSpace:`normal`,lineHeight:`1.2`},valueFormatter:e=>e.value||0},{headerName:N(`otherService.columns.remark`),field:`remark`,minWidth:120,flex:1,cellEditor:`agLargeTextCellEditor`,wrapText:!0,autoHeight:!0,cellStyle:{whiteSpace:`normal`,lineHeight:`1.4`},editable:e=>e.node?.rowPinned!==`bottom`,valueFormatter:e=>e.node?.rowPinned===`bottom`?`/`:e.value?e.value||``:N(`otherService.clickToInput`),cellClassRules:{"editable-cell-empty":e=>!e.node?.group&&!e.node?.rowPinned&&(e.value==null||e.value===``)}},{headerName:N(`otherService.columns.actions`),field:`actions`,minWidth:210,width:230,tooltipField:`actions`,wrapText:!0,autoHeight:!0,cellClass:`hourly-fee-name-cell`,cellStyle:{whiteSpace:`normal`,lineHeight:`1.2`},cellRenderer:xe,valueFormatter:e=>e.node?.rowPinned?``:e.value||``}],Ce=async e=>{let t={...(await U())[0],id:e.id,path:e.path,type:e.type},n=R.value.findIndex(t=>t.id===e.id);n!==-1&&(R.value[n]=t,await i(),I.value?.refreshCells({force:!0}),await K())},we=async e=>{let t=R.value.findIndex(t=>t.id===e.id);if(t!==-1){R.value.splice(t,1),await i(),I.value?.refreshCells({force:!0});try{await A().deleteItem(e.id),console.log(`🗑️ 已从数据库删除: ${e.id}`)}catch(e){console.error(`❌ 从数据库删除失败:`,e)}}},Te=s(()=>{}),Ee=s(()=>{}),De=e=>{z.value=e},Oe=e=>{B.value=e},W=e=>{V.value=e.id,z.value=!0},ke=()=>{z.value=!1,V.value=null},Ae=async()=>{if(!V.value)return;let e=R.value.find(e=>e.id===V.value);e&&await Ce(e),z.value=!1,V.value=null},G=e=>{H.value=e.id,B.value=!0},je=()=>{B.value=!1,H.value=null},Me=async()=>{if(!H.value)return;let e=R.value.find(e=>e.id===H.value);e&&await we(e),B.value=!1,H.value=null},Ne={...re,treeData:!1,getDataPath:void 0,context:{onCellClicked:async e=>{if(e.colDef.field!==`actions`||!e.data)return;let t=((e.event?.target)?.closest(`button[data-action]`))?.dataset.action;if(t===`clear`){W(e.data);return}t===`delete`&&G(e.data)}}},Pe=s(()=>se(Se));s(()=>C(R.value,e=>e.workdayCount)),s(()=>C(R.value,e=>e.workdayCount2)),s(()=>C(R.value,e=>e.workdayCount3)),s(()=>C(R.value,e=>e.workdayCount4)),s(()=>C(R.value,e=>e.workdayCount5)),s(()=>C(R.value,e=>e.feeSubtotal)),s(()=>C(R.value,e=>e.feeSubtotal2)),s(()=>C(R.value,e=>e.feeSubtotal3)),s(()=>C(R.value,e=>e.feeSubtotal4)),s(()=>C(R.value,e=>e.feeSubtotal5)),s(()=>(F.value,0)),s(()=>C(R.value,e=>e.avgUnitPrice)),s(()=>C(R.value,e=>e.personnelCount));let Fe=s(()=>(R.value||[]).reduce((e,t)=>e+(Number(t?.serviceFee)||0),0)),Ie=s(()=>[{id:`pinned-total-row`,expertCode:N(`otherService.total`),expertName:``,laborBudgetUnitPrice:``,compositeBudgetUnitPrice:``,adoptedBudgetUnitPrice:null,unitPrice:`/`,unit:`/`,serviceFee:Fe.value,remark:``,path:[`TOTAL`]}]),Le=()=>{let e=`${M.contractId}-other-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;R.value.push({id:e,type:`${M.contractId}-other`,feeItem:``,unit:``,quantity:null,unitPrice:null,serviceFee:null,remark:``,path:[e]}),K()},K=async()=>{try{be();let e=R.value.map(e=>({...e,type:`${M.contractId}-otherservice`})),t=await A().upsertBatch(e);console.log(`💾 数据保存成功:`,t)}catch(e){console.error(`❌ saveToIndexedDB 失败:`,e)}},q=async()=>{try{let e=(await A().query([{field:`type`,value:`${M.contractId}-otherservice`,operator:`eq`}])).map((e,t)=>({num:t+1,id:String(e.id||``),type:String(e.type||``),expertCode:String(e.expertCode||``),expertName:String(e.expertName||``),remark:String(e.remark||``),path:Array.isArray(e.path)?e.path:[],feeItem:e.feeItem??0,unit:e.unit,quantity:e.quantity??0,unitPrice:e.unitPrice??0,serviceFee:e.serviceFee??0}));F.value=await ve(e),console.log(`✅ 转换后的 DetailRow 数据:`,e)}catch{R.value=await U()}},Re=async()=>{if(R.value.length===0)return;let e=!1;R.value=R.value.map(t=>{let n=String(t.id||``).match(/^expert-(\d+)$/);if(!n)return t;let r=D[n[1]];if(!r)return t;let i=_e(r);return t.expertName===i?t:(e=!0,{...t,expertName:i})}),I.value?.refreshCells({force:!0}),e&&await K()},ze=e=>{K()},J=()=>{},Y=e=>{},Be=e=>{I.value=e.api,Q()},X=null,Z=e=>!!(e&&!e.isDestroyed?.()),Ve=()=>{setTimeout(()=>{let e=I.value;Z(e)&&(e.refreshCells({force:!0}),e.redrawRows())},16)},He=async()=>{await i();let e=I.value;Z(e)&&(e.onRowHeightChanged(),e.refreshCells({force:!0}),e.redrawRows(),Ve())},Q=()=>{X&&clearTimeout(X),X=setTimeout(()=>{X=null,Z(I.value)&&He()},0)},Ue=()=>{Q()},We=()=>{Q()},Ge=e=>{Q()},$=e=>{Q()},Ke=e=>Array.isArray(e.value)?JSON.stringify(e.value):e.value,qe=e=>{let t=String(e.column?.getColDef?.().field||``);if(t===`personnelCount`)return ye(e.value);if(t===`adoptedBudgetUnitPrice`||t===`workdayCount`)return E(e.value,{precision:3});try{let t=JSON.parse(e.value);if(Array.isArray(t))return t}catch{return e.value}return e.value},Je=e=>{if(e.colDef.field!==`actions`||!e.data)return;let t=((e.event?.target)?.closest(`button[data-action]`))?.dataset.action;if(t===`clear`){W(e.data);return}t===`delete`&&G(e.data)};return d(async()=>{console.log(`🚀 组件挂载`),await q(),Q()}),u(async()=>{console.log(`🔙 组件激活`),await q(),Q()}),v(()=>A().items,async e=>{Object.keys(e).length>0&&q()},{immediate:!0,deep:!0}),v(()=>M.storageKey,()=>{q(),Q()}),v(()=>P.value,()=>{Re()}),l(()=>{console.log(`🔄 组件失活,保存数据`),I.value?.stopEditing(),K()}),t(()=>{console.log(`💔 组件卸载,保存数据`),I.value?.stopEditing(),I.value=null,X&&=(clearTimeout(X),null),K()}),(t,i)=>{let s=c(`AlertDialogOverlay`),l=c(`AlertDialogTitle`),u=c(`AlertDialogDescription`),d=c(`Button`),h=c(`AlertDialogCancel`),_=c(`AlertDialogAction`),v=c(`AlertDialogContent`),y=c(`AlertDialogPortal`),S=c(`AlertDialogRoot`);return n(),ee(te,null,[p(`div`,ce,[p(`div`,le,[p(`div`,ue,[p(`h3`,de,a(M.title||g(N)(`otherService.title`)),1),i[0]||=p(`div`,{class:`text-xs text-muted-foreground`},null,-1)]),p(`div`,fe,[p(`h3`,pe,a(O.title||`费用明细`),1),p(`div`,me,[p(`button`,{onClick:Le,class:`inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white transition-colors bg-blue-600 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500`},[i[1]||=p(`span`,{class:`mr-2 text-xl leading-none`},`+`,-1),f(` `+a(g(N)(`otherService.addnew`)),1)])])]),p(`div`,{class:ne(g(ie))},[e(g(x),{gridOptions:Ne,style:r(g(oe)),rowData:R.value,pinnedBottomRowData:Ie.value,columnDefs:Pe.value,theme:g(ae),animateRows:!0,treeData:!1,onCellValueChanged:ze,onPasteStart:J,onPasteEnd:Y,onFillStart:J,onFillEnd:Y,suppressColumnVirtualisation:!0,suppressRowVirtualisation:!0,cellSelection:{handle:{mode:`range`}},enableClipboard:!0,localeText:g(j),tooltipShowDelay:500,headerHeight:50,processCellForClipboard:Ke,processCellFromClipboard:qe,undoRedoCellEditing:!0,undoRedoCellEditingLimit:20,onCellClicked:Je,onGridReady:Be,onFirstDataRendered:Ge,onRowDataUpdated:$,onGridSizeChanged:Ue,onColumnResized:We},null,8,[`style`,`rowData`,`pinnedBottomRowData`,`columnDefs`,`theme`,`localeText`])],2)])]),z.value?(n(),m(S,{key:0,open:z.value,"onUpdate:open":De},{default:b(()=>[e(y,null,{default:b(()=>[e(s,{class:`fixed inset-0 z-50 bg-black/45`}),e(v,{class:`fixed left-1/2 top-1/2 z-[70] w-[92vw] max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background p-5 shadow-xl`},{default:b(()=>[e(l,{class:`text-base font-semibold`},{default:b(()=>[f(a(g(N)(`htZxFw.dialog.resetTitle`)),1)]),_:1}),e(u,{class:`mt-2 text-sm text-muted-foreground`},{default:b(()=>[f(a(g(N)(`htZxFw.dialog.resetDesc`,{name:Te.value})),1)]),_:1}),p(`div`,he,[e(h,{"as-child":``},{default:b(()=>[e(d,{variant:`outline`,class:`px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-400`,onClick:ke},{default:b(()=>[f(a(g(N)(`common.cancel`)),1)]),_:1})]),_:1}),e(_,{"as-child":``},{default:b(()=>[e(d,{variant:`destructive`,class:`px-4 py-2 text-sm font-medium text-white bg-red-600 border border-red-600 rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500`,onClick:Ae},{default:b(()=>[f(a(g(N)(`htZxFw.dialog.confirmReset`)),1)]),_:1})]),_:1})])]),_:1})]),_:1})]),_:1},8,[`open`])):o(``,!0),B.value?(n(),m(S,{key:1,open:B.value,"onUpdate:open":Oe},{default:b(()=>[e(y,null,{default:b(()=>[e(s,{class:`fixed inset-0 z-50 bg-black/45`}),e(v,{class:`fixed left-1/2 top-1/2 z-[70] w-[92vw] max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background p-5 shadow-xl`},{default:b(()=>[e(l,{class:`text-base font-semibold`},{default:b(()=>[f(a(g(N)(`htZxFw.dialog.deleteTitle`)),1)]),_:1}),e(u,{class:`mt-2 text-sm text-muted-foreground`},{default:b(()=>[f(a(g(N)(`htZxFw.dialog.deleteDesc`,{name:Ee.value})),1)]),_:1}),p(`div`,ge,[e(h,{"as-child":``},{default:b(()=>[e(d,{variant:`outline`,class:`px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-400`,onClick:je},{default:b(()=>[f(a(g(N)(`common.cancel`)),1)]),_:1})]),_:1}),e(_,{"as-child":``},{default:b(()=>[e(d,{variant:`destructive`,class:`px-4 py-2 text-sm font-medium text-white bg-red-600 border border-red-600 rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500`,onClick:Me},{default:b(()=>[f(a(g(N)(`common.delete`)),1)]),_:1})]),_:1})])]),_:1})]),_:1})]),_:1},8,[`open`])):o(``,!0)],64)}}}),[[`__scopeId`,`data-v-fbf19b52`]]);export{M as default}; |