1 line
13 KiB
JavaScript
1 line
13 KiB
JavaScript
import{$ as e,At as t,Bt as n,Cr as r,Er as i,H as a,K as o,Kt as s,M as c,Pt as ee,Q as l,U as u,W as te,Wn as d,er as f,mn as p,tt as m,xr as h,yn as g}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-CFxQnYK4.js";import{t as ne}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-BnO-wAhh.js";import{D as re}from"./workspace-DxKKyh8w.js";import{a as ie,d as ae,i as _,n as v}from"./decimal-D3bp1pbs.js";import{A as oe,D as se,M as ce,O as le,j as ue,k as de}from"./vendor-ui-B4V4Cf1T.js";import{n as y,r as b}from"./numberFormat-jhZZmX17.js";import{T as x,c as fe,y as S}from"./sql-C69Jo4HU.js";import{k as pe}from"./index-CAPJG_im.js";import{t as me}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-DXO754eW.js";import{a as he,i as ge,o as _e,r as ve,t as ye}from"./agGridReadonlyAutoHeight-BpRhYCq1.js";import{n as be}from"./zxFwPricingSync-PWsfNukj.js";var xe={class:`h-full`},Se={class:`rounded-lg border bg-card xmMx scroll-mt-3 flex flex-col overflow-hidden h-full`},Ce={class:`flex items-center justify-between border-b px-4 py-3`},we={class:`text-sm font-semibold text-foreground cursor-pointer select-none transition-colors hover:text-primary`},Te={class:`border-b px-4 py-3 space-y-3 bg-card`},Ee={class:`flex items-center gap-4`},De={class:`flex-1 flex flex-wrap gap-2`},Oe=[`onClick`],ke={class:`flex items-center gap-4`},Ae={class:`flex-1 flex flex-wrap gap-2`},je=[`onClick`],Me={class:`flex items-start justify-between gap-3`},Ne={class:`space-y-1`},C=`jgjs:xm-scale-flush-request`,Pe=`ht-info-v3-`,Fe=`ht-info-scale-change-v1-`,w=`xm-project-phase-v1`,T=m({__name:`xmCommonAgGrid`,props:{title:{},dbKey:{},xmInfoKey:{},baseInfoKey:{}},setup(m){let T=ae(),{t:E,locale:Ie}=re(),D=d([]),O=d([]),k=d([]),A=d(new Map),j=()=>{let e=fe();k.value=e.map(({id:e,item:t})=>[e,t]),A.value=new Map(e.map(({rawId:e,id:t})=>[e,t]))};j();let M=e=>{let t=new Map,n=[],r=new Map(e.map(([e,t])=>[t.code,{id:e,...t}]));for(let[i,a]of e){if(!a.code.includes(`-`)){t.has(a.code)||n.push(a.code),t.set(a.code,{id:i,code:a.code,name:a.name,children:[]});continue}let e=a.code.split(`-`)[0];if(!t.has(e)){let i=r.get(e);n.includes(e)||n.push(e),t.set(e,{id:i?.id||`group-${e}`,code:e,name:i?.name||e,children:[]})}t.get(e).children.push({id:i,code:a.code,name:a.name,hasCost:a.hasCost!==!1,hasArea:a.hasArea!==!1})}return n.map(e=>t.get(e)).filter(e=>!!e)},N=()=>{let e=[];for(let t of O.value)for(let n of t.children)e.push({id:n.id,groupCode:t.code,groupName:t.name,majorCode:n.code,majorName:n.name,hasCost:n.hasCost,hasArea:n.hasArea,amount:null,landArea:null,path:[`${t.code} ${t.name}`,`${n.code} ${n.name}`]});return e},P=e=>{let t=new Map;for(let n of e||[]){if(n?.isGroupRow===!0)continue;let e=String(n.id);t.set(e,n);let r=A.value.get(e);r&&!t.has(r)&&t.set(r,n)}return N().map(e=>{let n=t.get(e.id);return n?{...e,hide:n.hide,amount:e.hasCost&&typeof n.amount==`number`?n.amount:null,landArea:e.hasArea&&typeof n.landArea==`number`?n.landArea:null}:e})},Le=e=>{let t=new Map(e.map(e=>[String(e.id||``),e])),n=[];for(let e of O.value){let r=0,i=!1,a=0,o=!1;for(let n of e.children){let e=t.get(String(n.id||``)),s=e?.amount;typeof s==`number`&&Number.isFinite(s)&&(r+=s,i=!0);let c=e?.landArea;typeof c==`number`&&Number.isFinite(c)&&(a+=c,o=!0)}n.push({id:e.id,groupCode:e.code,groupName:e.name,majorCode:e.code,majorName:e.name,hasCost:!0,hasArea:!0,amount:i?_(r,3):null,landArea:o?_(a,3):null,path:[`${e.code} ${e.name}`],hide:!1,isGroupRow:!0})}return n},F=(e,t)=>{let n=typeof t==`number`&&Number.isFinite(t)?_(t,2):null;G.value[0].amount=n;let r=e?.getPinnedTopRow(0);r&&r.setDataValue(`amount`,n)},Re=async e=>{try{let[t,n]=await Promise.all([T.getItem(I.baseInfoKey||`xm-base-info-v1`),T.getItem(I.dbKey)]);if(z.value=typeof t?.projectIndustry==`string`?t.projectIndustry.trim():``,!z.value){O.value=[],D.value=[],J=[],V.value=!1,F(e,null);return}O.value=M(k.value.filter(([e])=>S(e,z.value))),V.value=!!n?.roughCalcEnabled,F(e,n?.totalAmount);let r=Array.isArray(n?.detailRows)?n.detailRows:[],i=r.length>0,a=i?r.some(e=>{let t=e?.amount,n=e?.landArea;return typeof t==`number`&&Number.isFinite(t)||typeof n==`number`&&Number.isFinite(n)}):!1,o=i&&!a&&!V.value&&typeof n?.totalAmount==`number`&&Number.isFinite(n.totalAmount);if(i&&!o){D.value=P(r),J=Y(D.value);return}if(I.xmInfoKey){let t=await T.getItem(I.xmInfoKey);if(V.value=!!t?.roughCalcEnabled,F(e,t?.totalAmount),Array.isArray(t?.detailRows)&&t.detailRows.length>0){D.value=P(t.detailRows),J=Y(D.value);return}}D.value=N(),J=Y(D.value),X()}catch(t){console.error(`loadFromIndexedDB failed:`,t),z.value=``,D.value=[],J=[],V.value=!1,F(e,null)}},I=m,L=null,R=d(null),z=d(``),B=d(x.pinnedTotalLabel),V=d(!1),ze=a(()=>D.value.filter(e=>!e.hide)),Be=x.feePhaseOptions,Ve=x.feeStageOptions,H=d(``),U=d(``),He=async()=>{try{let e=await T.getItem(w);e&&(H.value=e.feePhase||``,U.value=e.feeStage||``)}catch(e){console.error(`load phase state failed:`,e)}},Ue=async()=>{try{await T.setItem(w,{feePhase:H.value,feeStage:U.value})}catch(e){console.error(`save phase state failed:`,e)}};p([H,U],()=>{Ue()}),He();let W=()=>{if(!R.value)return;let e=R.value.getPinnedTopRow(0);e&&R.value.refreshCells({rowNodes:[e],force:!0})},We=[{headerName:E(`pricingScale.columns.investAmount`),field:`amount`,headerClass:`ag-right-aligned-header`,minWidth:100,flex:1,editable:e=>V.value?!!e.node?.rowPinned:!e.node?.group&&!e.node?.rowPinned&&!!e.data?.hasCost,cellClass:e=>V.value&&e.node?.rowPinned||!V.value&&!e.node?.group&&!e.node?.rowPinned&&e.data?.hasCost?`editable-cell-line`:``,cellClassRules:{"ag-right-aligned-cell":()=>!0,"editable-cell-empty":e=>(V.value&&e.node?.rowPinned||!e.node?.group&&!e.node?.rowPinned&&!!e.data?.hasCost)&&(e.value==null||e.value===``)},aggFunc:v,valueParser:e=>b(e.newValue,{precision:3}),valueFormatter:e=>V.value?e.node?.rowPinned?e.value==null||e.value===``?E(`pricingScale.clickToInput`):y(e.value,3):``:!e.node?.group&&!e.node?.rowPinned&&!e.data?.hasCost?``:!e.node?.group&&!e.node?.rowPinned&&(e.value==null||e.value===``)?E(`pricingScale.clickToInput`):e.value==null?``:y(e.value,3)},{headerName:`造价金额(元)`,field:`amountYuan`,headerClass:`ag-right-aligned-header`,minWidth:120,flex:1,editable:!1,aggFunc:v,valueGetter:e=>e.data?.amount,cellClassRules:{"ag-right-aligned-cell":()=>!0},valueFormatter:e=>{if(V.value)return``;let t=e.value;return typeof t!=`number`||!Number.isFinite(t)?``:y(_(t*1e4,0),0)}}],Ge=a(()=>ye(We)),Ke={headerName:E(`pricingScale.columns.majorGroup`),minWidth:200,flex:2,cellRendererParams:{suppressCount:!0},valueFormatter:e=>e.node?.rowPinned?B.value:String(e.value||``),tooltipValueGetter:e=>e.node?.rowPinned?B.value:String(e.value||``)},G=d([{id:`pinned-total-row`,groupCode:``,groupName:``,majorCode:``,majorName:``,hasCost:!1,hasArea:!1,amount:null,landArea:null,path:[`TOTAL`]}]),K=d(!1),q=d(``),J=null,Y=e=>e.map(e=>({...JSON.parse(JSON.stringify(e)),hide:!!e.hide,isGroupRow:!1})),qe=(e,t)=>{let n=new Map(e.map(e=>[String(e?.id||``).trim(),e])),r=new Map(t.map(e=>[String(e?.id||``).trim(),e]));return Array.from(new Set([...n.keys(),...r.keys()])).filter(e=>{let t=n.get(e),i=r.get(e),a=typeof t?.amount==`number`&&Number.isFinite(t.amount)?_(t.amount,6):null,o=typeof i?.amount==`number`&&Number.isFinite(i.amount)?_(i.amount,6):null,s=typeof t?.landArea==`number`&&Number.isFinite(t.landArea)?_(t.landArea,6):null,c=typeof i?.landArea==`number`&&Number.isFinite(i.landArea)?_(i.landArea,6):null;return a!==o||s!==c})},Je=e=>{e.updatedMethodCount<=0||(q.value=E(`xmScaleGrid.syncToastDesc`,{serviceCount:e.updatedServiceCount,methodCount:e.updatedMethodCount,rowCount:e.updatedRowCount}),K.value=!1,requestAnimationFrame(()=>{K.value=!0}))},X=async()=>{try{let e=Y(D.value),t=(()=>{let t=!1,n=0;for(let r of e){let e=r?.amount;typeof e!=`number`||!Number.isFinite(e)||(n+=e,t=!0)}return t?_(n,2):null})(),n=G.value[0].amount,r=typeof n==`number`&&Number.isFinite(n)?_(n,2):null,i=V.value?r:t;G.value[0].amount=i;let a={detailRows:[...e,...Le(e)]};a.roughCalcEnabled=V.value,a.totalAmount=i,await T.setItem(I.dbKey,a);let o=qe(J||e,e);if(J=Y(e),I.dbKey.startsWith(Pe)){let e=I.dbKey.slice(11).trim();e&&o.length>0&&(await T.setItem(`${Fe}${e}`,{changedRowIds:o,updatedAt:Date.now()}),Je(await be(e,{changedRowIds:o})))}}catch(e){console.error(`saveToIndexedDB failed:`,e)}},Z=()=>{L&&clearTimeout(L),L=setTimeout(()=>{X()},600)},Ye=e=>String(e.data?.id||``),Xe={...he,getRowId:Ye},Q=e=>{let t=e?.detail?.done;L&&=(clearTimeout(L),null),X().finally(()=>{t?.()})},$=!1,Ze=()=>{if(V.value){let e=G.value[0]?.amount,t=typeof e==`number`?e:Number(e),n=Number.isFinite(t)?_(t,2):null;G.value[0].amount=n;let r=R.value?.getPinnedTopRow(0);r&&r.setDataValue(`amount`,n)}else at();Z()},Qe=e=>{if(!$){if(V.value&&e.node?.rowPinned&&e.colDef.field===`amount`)if(typeof e.newValue==`number`)G.value[0].amount=_(e.newValue,2);else{let t=Number(e.newValue);G.value[0].amount=Number.isFinite(t)?_(t,2):null}else V.value||at();Z()}},$e=()=>{$=!0},et=()=>{$=!1,Ze()},tt=e=>{R.value=e.api,Re(e.api),W()},nt=e=>Array.isArray(e.value)?JSON.stringify(e.value):e.value,rt=e=>{let t=String(e.column?.getColDef?.().field||``);if(t===`amount`||t===`landArea`)return b(e.value,{precision:3});try{let t=JSON.parse(e.value);if(Array.isArray(t))return t}catch{}return e.value},it=async()=>{if(j(),!z.value)return;if(O.value=M(k.value.filter(([e])=>S(e,z.value))),D.value.length===0){R.value?.refreshCells({force:!0});return}let e=P(D.value),t=e.some((e,t)=>{let n=D.value[t];return n?.groupCode!==e.groupCode||n?.groupName!==e.groupName||n?.majorCode!==e.majorCode||n?.majorName!==e.majorName});D.value=e,R.value?.refreshCells({force:!0}),W(),t&&await X()};p(B,()=>{W()}),p(()=>Ie.value,()=>{it()});let at=()=>{if(V.value)return;if(!R.value){G.value[0].amount=ie(D.value,e=>e.amount);return}let e=0,t=!1;D.value.forEach(n=>{let r=n.amount;typeof r==`number`&&Number.isFinite(r)&&(e+=r,t=!0)}),G.value[0].amount=t?_(e,2):null;let n=R.value.getPinnedTopRow(0);n&&n.setDataValue(`amount`,t?_(e,2):null)};return t(()=>{L&&clearTimeout(L),window.removeEventListener(C,Q),R.value=null,X()}),ee(()=>{window.addEventListener(C,Q)}),(t,a)=>(n(),te(f(ce),null,{default:g(()=>[u(`div`,xe,[u(`div`,Se,[u(`div`,Ce,[u(`h3`,we,i(I.title),1)]),u(`div`,Te,[u(`div`,Ee,[a[2]||=u(`span`,{class:`shrink-0 text-sm font-medium text-foreground w-28`},`项目费用阶段`,-1),u(`div`,De,[(n(!0),o(c,null,s(f(Be),e=>(n(),o(`button`,{key:e,class:h([`px-3 py-1.5 text-xs rounded-lg border transition-colors`,H.value===e?`bg-blue-600 border-blue-600 text-white font-medium`:`bg-white border-slate-200 text-slate-600 hover:bg-slate-50`]),onClick:t=>H.value=e},i(e),11,Oe))),128))])]),u(`div`,ke,[a[3]||=u(`span`,{class:`shrink-0 text-sm font-medium text-foreground w-28`},`项目费用环节`,-1),u(`div`,Ae,[(n(!0),o(c,null,s(f(Ve),e=>(n(),o(`button`,{key:e,class:h([`px-3 py-1.5 text-xs rounded-lg border transition-colors`,U.value===e?`bg-blue-600 border-blue-600 text-white font-medium`:`bg-white border-slate-200 text-slate-600 hover:bg-slate-50`]),onClick:t=>U.value=e},i(e),11,je))),128))])])]),u(`div`,{class:h(f(ge))},[e(f(ne),{style:r(f(ve)),rowData:ze.value,pinnedTopRowData:G.value,columnDefs:Ge.value,autoGroupColumnDef:Ke,gridOptions:Xe,theme:f(_e),animateRows:!0,onGridReady:tt,onCellValueChanged:Qe,suppressColumnVirtualisation:!0,onPasteStart:$e,onPasteEnd:et,onFillStart:$e,onFillEnd:et,suppressRowVirtualisation:!0,cellSelection:{handle:{mode:`range`}},enableClipboard:!0,localeText:f(me),tooltipShowDelay:500,headerHeight:50,suppressHorizontalScroll:!0,processCellForClipboard:nt,processCellFromClipboard:rt,undoRedoCellEditing:!0,undoRedoCellEditingLimit:20},null,8,[`style`,`rowData`,`pinnedTopRowData`,`columnDefs`,`theme`,`localeText`])],2)]),e(f(de),{open:K.value,"onUpdate:open":a[1]||=e=>K.value=e,class:`group pointer-events-auto rounded-lg border bg-background px-4 py-3 text-sm shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in data-[state=closed]:fade-out data-[state=open]:slide-in-from-bottom-2`},{default:g(()=>[u(`div`,Me,[u(`div`,Ne,[e(f(le),{class:`text-sm font-semibold text-foreground`},{default:g(()=>[l(i(f(E)(`xmScaleGrid.syncToastTitle`)),1)]),_:1}),e(f(oe),{class:`text-xs text-muted-foreground`},{default:g(()=>[l(i(q.value),1)]),_:1})]),e(f(ue),{"as-child":``,"alt-text":f(E)(`common.close`)},{default:g(()=>[e(f(pe),{variant:`ghost`,size:`sm`,class:`h-7 px-2 text-xs`,onClick:a[0]||=e=>K.value=!1},{default:g(()=>[l(i(f(E)(`common.close`)),1)]),_:1})]),_:1},8,[`alt-text`])])]),_:1},8,[`open`]),e(f(se),{class:`fixed bottom-5 right-5 z-[85] flex w-[420px] max-w-[92vw] flex-col gap-2 outline-none`})])]),_:1}))}});export{T as t}; |