calculator2026/33/static/js/XmFactorGrid-DLfcqkt0.js
2026-06-25 09:43:48 +08:00

1 line
7.8 KiB
JavaScript

import{$ as e,At as t,Bt as n,Cr as r,Er as i,H as a,K as ee,Pt as te,U as o,Wn as s,er as c,mn as ne,tt as l,xr as u}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-CFxQnYK4.js";import{t as d}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-BnO-wAhh.js";import{D as f}from"./workspace-DxKKyh8w.js";import{d as p}from"./decimal-D3bp1pbs.js";import{r as m}from"./numberFormat-jhZZmX17.js";import{C as re,n as ie}from"./index-CAPJG_im.js";import{t as ae}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-DXO754eW.js";import{a as oe,i as se,o as h,r as g,t as ce}from"./agGridReadonlyAutoHeight-BpRhYCq1.js";import{t as _}from"./zxFwPricingSync-PWsfNukj.js";var v={class:`h-full min-h-0 flex flex-col`},y={class:`rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col`},b={class:`flex items-center justify-between border-b px-4 py-3`},x={class:`text-sm font-semibold text-foreground`},S=l({__name:`XmFactorGrid`,props:{title:{},storageKey:{},parentStorageKey:{},dict:{},disableBudgetEditWhenStandardNull:{type:Boolean},excludeNotshowByZxflxs:{type:Boolean},initBudgetValueFromStandard:{type:Boolean}},setup(l){let S=l,{t:C}=f(),w=re(),le=p(),T=s([]),E=s(null),D=a(()=>`${S.storageKey}-change`),O=e=>{if(e==null||e===``)return``;let t=m(e,{precision:3});return t==null?``:t.toFixed(3)},k=e=>{if(e.value==null||e.value===``)return C(`xmFactorGrid.clickToInput`);let t=m(e.value,{precision:3});return t==null?``:t.toFixed(3)},A=()=>Object.entries(S.dict).filter(e=>{let t=e[1];return!(!t?.code||!t?.name||S.excludeNotshowByZxflxs&&t.notshowByzxflxs===!0)}).sort((e,t)=>{let n=Number(e[1]?.order),r=Number(t[1]?.order);return Number.isFinite(n)&&Number.isFinite(r)&&n!==r?n-r:Number.isFinite(n)&&!Number.isFinite(r)?-1:!Number.isFinite(n)&&Number.isFinite(r)?1:String(e[1]?.code||e[0]).localeCompare(String(t[1]?.code||t[0]))}),j=()=>{let e=A(),t=new Map;for(let[n,r]of e)t.set(r.code,n);return e.map(([e,t])=>{let n=typeof t.defCoe==`number`&&Number.isFinite(t.defCoe)?t.defCoe:null;return{id:e,code:t.code,name:t.name,standardFactor:n,budgetValue:S.initBudgetValueFromStandard?n:null,remark:``,path:[]}})},M=e=>Array.isArray(e)&&e.some(e=>{let t=typeof e?.budgetValue==`number`&&Number.isFinite(e.budgetValue),n=typeof e?.remark==`string`&&e.remark.trim()!==``;return t||n}),N=e=>{let t=new Map;for(let n of e||[])t.set(n.id,n);return j().map(e=>{let n=t.get(e.id);if(!n)return e;let r=Object.prototype.hasOwnProperty.call(n,`budgetValue`),i=Object.prototype.hasOwnProperty.call(n,`remark`);return{...e,budgetValue:typeof n.budgetValue==`number`?n.budgetValue:r?null:e.budgetValue,remark:typeof n.remark==`string`?n.remark:i?``:e.remark}})},P=[{headerName:C(`xmFactorGrid.columns.projectname`),field:`name`,minWidth:86,maxWidth:300,headerClass:`ag-right-aligned-header`,flex:2},{headerName:C(`xmFactorGrid.columns.standardFactor`),field:`standardFactor`,type:`numericColumn`,cellClass:`ag-right-aligned-cell`,minWidth:86,maxWidth:100,headerClass:`ag-right-aligned-header`,flex:.9,cellClassRules:{"ag-right-aligned-cell":()=>!0},valueFormatter:e=>O(e.value)},{headerName:C(`xmFactorGrid.columns.budgetValue`),field:`budgetValue`,minWidth:86,maxWidth:100,headerClass:`ag-right-aligned-header`,cellClass:e=>S.disableBudgetEditWhenStandardNull&&e.data?.standardFactor==null?``:`editable-cell-line`,flex:.9,cellClassRules:{"ag-right-aligned-cell":()=>!0,"editable-cell-empty":e=>!(S.disableBudgetEditWhenStandardNull&&e.data?.standardFactor==null)&&(e.value==null||e.value===``)},editable:e=>S.disableBudgetEditWhenStandardNull?e.data?.standardFactor!=null:!0,valueParser:e=>m(e.newValue,{precision:3}),valueFormatter:e=>S.disableBudgetEditWhenStandardNull&&e.data?.standardFactor==null&&(e.value==null||e.value===``)?``:k(e)},{headerName:C(`xmFactorGrid.columns.remark`),field:`remark`,minWidth:170,flex:2.4,cellEditor:`agLargeTextCellEditor`,wrapText:!0,autoHeight:!0,cellStyle:{whiteSpace:`normal`,lineHeight:`1.4`},editable:!0,valueFormatter:e=>e.value||C(`xmFactorGrid.clickToInput`),cellClass:` remark-wrap-cell`,cellClassRules:{"editable-cell-empty":e=>e.value==null||e.value===``}}],F=a(()=>ce(P)),I={headerName:C(`xmFactorGrid.columns.code`),flex:.5,width:100,cellRendererParams:{suppressCount:!0},valueFormatter:e=>{if(e.data?.code&&e.data?.name)return`${e.data.code}`;let t=String(e.node?.key||``),n=S.dict[t];return n?`${n.code} ${n.name}`:``}},L=async()=>{try{let e={detailRows:JSON.parse(JSON.stringify(T.value))};w.setKeyState(S.storageKey,e);let t=T.value.map(e=>({...e,type:`${S.storageKey}-factor`})),n=await ie().upsertBatch(t);console.log(`💾 数据保存成功:`,n)}catch(e){console.error(`saveToIndexedDB failed:`,e)}},R=e=>{let t=m(e,{precision:6});return typeof t==`number`&&Number.isFinite(t)?t:null},z=(e,t)=>{let n=R(e),r=R(t);return n==null&&r==null?!0:n==null||r==null?!1:n===r},B=e=>{let t=/^ht-consult-category-factor-v1-(.+)$/.exec(e);if(t)return{factorType:`consult`,contractId:String(t[1]||``).trim()};let n=/^ht-major-factor-v1-(.+)$/.exec(e);return n?{factorType:`major`,contractId:String(n[1]||``).trim()}:null},V=async e=>{if(e.length===0)return;let t={changedRowIds:Array.from(new Set(e.map(e=>String(e||``).trim()).filter(Boolean))),updatedAt:Date.now()};if(t.changedRowIds.length===0)return;w.setKeyState(D.value,t,{force:!0});let n=B(S.storageKey);if(n?.contractId){if(n.factorType===`consult`){await _(n.contractId,{consultChangedServiceIds:t.changedRowIds});return}await _(n.contractId,{majorChangedRowIds:t.changedRowIds})}},H=async e=>{if(!e)return null;let t=await w.loadKeyState(e);if(t?.detailRows&&Array.isArray(t.detailRows))return t;let n=await le.getItem(e);return!n?.detailRows||!Array.isArray(n.detailRows)?null:(w.setKeyState(e,n,{force:!0}),n)},U=e=>{E.value=e.api},W=async()=>{try{let e=await H(S.storageKey);if(e&&M(e.detailRows)){T.value=N(e.detailRows);return}let t=S.parentStorageKey?.trim();if(t){let e=await H(t);if(e&&M(e.detailRows)){T.value=N(e.detailRows),await L();return}}if(e){T.value=N(e.detailRows);return}T.value=j(),await L()}catch(e){console.error(`loadFromIndexedDB failed:`,e),T.value=j()}},G=null,K=!1,q=null,J=new Set,Y=e=>{let t=String(e||``).trim();t&&J.add(t)},X=async()=>{if(await L(),J.size===0)return;let e=Array.from(J);J.clear(),await V(e)},Z=()=>{G&&clearTimeout(G),G=setTimeout(()=>{X()},500)},ue=e=>{K||(String(e?.colDef?.field||``)===`budgetValue`&&!z(e?.oldValue,e?.newValue)&&Y(e?.data?.id),Z())},Q=()=>{K=!0,q=new Map(T.value.map(e=>[String(e.id||``).trim(),R(e.budgetValue)]))},$=()=>{if(K=!1,q){let e=new Map(T.value.map(e=>[String(e.id||``).trim(),R(e.budgetValue)])),t=new Set([...q.keys(),...e.keys()]);for(let n of t)z(q.get(n),e.get(n))||Y(n);q=null}Z()},de=e=>Array.isArray(e.value)?JSON.stringify(e.value):e.value,fe=e=>{if(String(e.column?.getColDef?.().field||``)===`budgetValue`)return m(e.value,{precision:3});try{let t=JSON.parse(e.value);if(Array.isArray(t))return t}catch{return e.value}return e.value};return te(async()=>{await W()}),ne(()=>S.dict,()=>{W()},{deep:!0}),t(()=>{G&&clearTimeout(G),E.value?.stopEditing(),E.value=null,X()}),(t,a)=>(n(),ee(`div`,v,[o(`div`,y,[o(`div`,b,[o(`h3`,x,i(l.title),1),a[0]||=o(`div`,{class:`text-xs text-muted-foreground`},null,-1)]),o(`div`,{class:u(c(se))},[e(c(d),{style:r(c(g)),rowData:T.value,columnDefs:F.value,autoGroupColumnDef:I,gridOptions:c(oe),theme:c(h),animateRows:!0,treeData:!0,onCellValueChanged:ue,onPasteStart:Q,onPasteEnd:$,onFillStart:Q,onFillEnd:$,suppressColumnVirtualisation:!0,suppressRowVirtualisation:!0,cellSelection:{handle:{mode:`range`}},enableClipboard:!0,localeText:c(ae),tooltipShowDelay:500,headerHeight:50,suppressHorizontalScroll:!0,processCellForClipboard:de,processCellFromClipboard:fe,undoRedoCellEditing:!0,undoRedoCellEditingLimit:20,onGridReady:U},null,8,[`style`,`rowData`,`columnDefs`,`gridOptions`,`theme`,`localeText`])],2)])]))}});export{S as t};