1 line
13 KiB
JavaScript
1 line
13 KiB
JavaScript
import{$ as e,Bt as t,Cr as n,Er as r,H as i,K as a,U as o,W as s,Wn as c,er as l,ft as u,mn as d,tt as f,xr as ee}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-CFxQnYK4.js";import{t as p}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-BnO-wAhh.js";import"./vendor-vue-CSlAvuUs.js";import{D as m}from"./workspace-DxKKyh8w.js";import{a as h,d as g,i as _,s as v}from"./decimal-D3bp1pbs.js";import{n as y,r as b}from"./numberFormat-jhZZmX17.js";import{C as x}from"./sql-C69Jo4HU.js";import{C as te,n as S}from"./index-CAPJG_im.js";import{t as ne}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-DXO754eW.js";import{a as re,i as ie,o as ae,r as C,t as w}from"./agGridReadonlyAutoHeight-BpRhYCq1.js";import{t as T}from"./xmFactorDefaults-yPGPQ25R.js";import{t as E}from"./pricingPersistControl-DVG_7RF1.js";import{n as oe}from"./pricingScaleCalc-CxdG8IMv.js";import{t as se}from"./pricingScalePaneLifecycle-CUGyrg3j.js";import{t as ce}from"./MethodUnavailableNotice-Cx7GLj7Z.js";const le=e=>[e];var ue={class:`h-full min-h-0 flex flex-col`},de={class:`rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col`},fe={class:`flex items-center justify-between border-b px-4 py-3`},pe={class:`text-sm font-semibold text-foreground`},me=`pricing-force-default:`,D=f({__name:`WorkloadPricingPane`,props:{contractId:{},contractName:{},serviceId:{}},setup(D){let O=D,k=te(),{t:A,locale:j}=m(),M=g(),N=i(()=>`gzlF-${O.contractId}-${O.serviceId}`),P=i(()=>`ht-consult-category-factor-v1-${O.contractId}`),F=c(new Map),I=!1,L=c(null),R=()=>F.value.get(String(O.serviceId))??null,z=async()=>{I||=(F.value=await T(P.value),!0)},he=()=>{let e=E(me,N.value),t=sessionStorage.getItem(e);if(!t)return!1;let n=Number(t);return sessionStorage.removeItem(e),Number.isFinite(n)&&Date.now()<=n},ge=()=>k.getServicePricingMethodState(O.contractId,O.serviceId,`serviceFee`),B=i({get:()=>{let e=ge()?.detailRows;return Array.isArray(e)?e:[]},set:e=>{k.setServicePricingMethodState(O.contractId,O.serviceId,`serviceFee`,{detailRows:e})}}),V=e=>e?String(j.value).toLowerCase().startsWith(`en`)&&e.nameEn||e.name:``,_e=e=>{let t=e.unit||``,n=typeof e.minPrice==`number`&&Number.isFinite(e.minPrice),r=typeof e.maxPrice==`number`&&Number.isFinite(e.maxPrice);return n&&r?`${e.minPrice}${t}-${e.maxPrice}${t}`:n?`${e.minPrice}${t}`:r?`${e.maxPrice}${t}`:``},H=()=>{let e=k.getContractState(O.contractId)?.selectedIds,t=[];return e?.forEach((e,n)=>{t.push(...Object.entries(x).filter(([,t])=>Number(t.serviceID)===Number(e)).map(([e])=>Number(e)).filter(Number.isFinite).sort((e,t)=>e-t))}),t},U=i(()=>H().length>0),W=()=>{let e=[],t=H();for(let[n,r]of t.entries()){let t=x[String(r)],n=t?.code||t?.ref||``;if(!n||!t?.name)continue;let i=`${O.contractId}-task-${r}`;e.push({id:i,taskCode:n,taskName:V(t),unit:t.unit||``,conversion:typeof t.conversion==`number`&&Number.isFinite(t.conversion)?t.conversion:null,workload:typeof t.midPrice==`number`&&Number.isFinite(t.midPrice)?t.midPrice:null,basicFee:null,budgetBase:t.basicParam||``,budgetReferenceUnitPrice:null,budgetAdoptedUnitPrice:typeof t.defPrice==`number`&&Number.isFinite(t.defPrice)?t.defPrice:null,consultCategoryFactor:typeof t.highPrice==`number`?t.highPrice:null,serviceFee:null,QuantityBasis:0,ProjectQuantityPhase:0,remark:t.desc||``,type:`task`,path:[i]})}return e},G=e=>e?.id?.startsWith(`task-none-`)??!1,ve=e=>{let t=new Map;for(let n of e||[])t.set(n.id,n);return W().map(e=>{console.log(e);let n=t.get(e.id);if(!n)return e;let r=Object.prototype.hasOwnProperty.call(n,`remark`);Object.prototype.hasOwnProperty.call(n,`consultCategoryFactor`);let i=null,a=null,o=null,s=n.budgetReferenceUnitPrice,c=e.budgetAdoptedUnitPrice,l=e.workload,u=e.consultCategoryFactor;return i=s*c,a=s*l,o=s*u,{...e,workload:typeof n.workload==`number`?n.workload:null,basicFee:typeof n.basicFee==`number`?n.basicFee:null,budgetReferenceUnitPrice:n.budgetReferenceUnitPrice??e.budgetReferenceUnitPrice,budgetAdoptedUnitPrice:1,cLow:i,cMid:a,cHigh:o,QuantityBasis:n.QuantityBasis??0,serviceFee:typeof n.serviceFee==`number`?n.serviceFee:a,remark:typeof n.remark==`string`?n.remark:r?``:e.remark}})},K=e=>b(e,{sanitize:!0,precision:3}),ye=e=>b(e,{sanitize:!0,precision:6}),q=e=>{if(!e||G(e))return null;let t=e.budgetAdoptedUnitPrice,n=e.conversion,r=e.workload;return typeof t!=`number`||!Number.isFinite(t)||typeof n!=`number`||!Number.isFinite(n)||typeof r!=`number`||!Number.isFinite(r)?null:_(v(t).mul(n).mul(r),2)},be=e=>{if(!e||G(e))return null;let t=e.consultCategoryFactor,n=q(e);return n==null||typeof t!=`number`||!Number.isFinite(t)?null:_(v(n).mul(t),2)},J=e=>G(e.data)?A(`workloadPricing.none`):!e.node?.group&&!e.node?.rowPinned&&(e.value==null||e.value===``)?A(`workloadPricing.clickToInput`):e.value==null?``:y(e.value,3),xe=e=>{let t=e?.nodeA?.data,n=e?.nodeB?.data;return!t||!n||G(t)||G(n)?!1:!!t.taskName&&!!t.budgetBase&&t.taskName===n.taskName&&t.budgetBase===n.budgetBase},Se=f({name:`SelectQuantityBasis`,props:{params:{type:Object,required:!0}},setup(e){return()=>{let t=e.params?.data||{},n=[{label:A(`pricingPane.land.columns.projectquantityoption.a`),value:`0`},{label:A(`pricingPane.land.columns.projectquantityoption.b`),value:`1`},{label:A(`pricingPane.land.columns.projectquantityoption.c`),value:`2`},{label:A(`pricingPane.land.columns.projectquantityoption.d`),value:`3`},{label:A(`pricingPane.land.columns.projectquantityoption.e`),value:`4`},{label:A(`pricingPane.land.columns.projectquantityoption.f`),value:`5`},{label:A(`pricingPane.land.columns.projectquantityoption.g`),value:`6`},{label:A(`pricingPane.land.columns.projectquantityoption.h`),value:`7`}];function r(e){t.QuantityBasis=e,Y()}return u(`div`,{style:{height:`100%`,width:`100%`,display:`flex`,alignItems:`center`,padding:`0 10px`,gap:`14px`,flexWrap:`wrap`}},[...n.map(e=>u(`label`,{style:{display:`inline-flex`,alignItems:`center`,fontSize:`13px`,color:`#333`}},[u(`input`,{type:`radio`,name:`QuantityBasis-${t.id}`,style:{width:`16px`,height:`16px`,marginRight:`6px`,accentColor:`#1677ff`,cursor:`default`},value:e.value,checked:t.QuantityBasis==Number(e.value),onInput:()=>r(e.value)}),e.label]))])}}}),Ce=f({name:`SelectProjectQuantityPhase`,props:{params:{type:Object,required:!0}},setup(e){return()=>{let t=e.params?.data||{},n=[{label:A(`pricingPane.land.columns.ProjectSectionoption.a`),value:`0`},{label:A(`pricingPane.land.columns.ProjectSectionoption.b`),value:`1`},{label:A(`pricingPane.land.columns.ProjectSectionoption.c`),value:`2`},{label:A(`pricingPane.land.columns.ProjectSectionoption.d`),value:`3`},{label:A(`pricingPane.land.columns.ProjectSectionoption.e`),value:`4`}];function r(e){t.ProjectQuantityPhase=e,Y()}return u(`div`,{style:{height:`100%`,width:`100%`,display:`flex`,alignItems:`center`,padding:`0 10px`,gap:`14px`,flexWrap:`wrap`}},[...n.map(e=>u(`label`,{style:{display:`inline-flex`,alignItems:`center`,fontSize:`13px`,color:`#333`}},[u(`input`,{type:`radio`,name:`ProjectQuantityPhase-${t.id}`,style:{width:`16px`,height:`16px`,marginRight:`6px`,accentColor:`#1677ff`,cursor:`default`},value:e.value,checked:t.ProjectQuantityPhase==Number(e.value),onInput:()=>r(e.value)}),e.label]))])}}}),we=[{headerName:A(`workloadPricing.columns.code`),field:`taskCode`,minWidth:100,width:120,pinned:`left`,colSpan:e=>e.node?.rowPinned?2:1,valueFormatter:e=>e.node?.rowPinned?A(`workloadPricing.total`):e.value||``},{headerName:A(`workloadPricing.columns.name`),field:`taskName`,minWidth:150,width:220,pinned:`left`,wrapText:!0,autoHeight:!0,cellStyle:{whiteSpace:`normal`,lineHeight:`1.4`},spanRows:!0,valueFormatter:e=>e.node?.rowPinned?``:e.value||``},{headerName:A(`workloadPricing.columns.budgetBase`),field:`budgetBase`,minWidth:150,autoHeight:!0,width:180,colSpan:e=>e.node?.rowPinned?3:1,spanRows:xe,valueFormatter:e=>A(`workloadPricing.columns.budgetBasevalue`)},{headerName:A(`workloadPricing.columns.budgetReferenceUnitPrice`),field:`budgetReferenceUnitPrice`,minWidth:170,flex:1,editable:e=>!e.node?.group&&!e.node?.rowPinned&&!G(e.data),cellClass:e=>!e.node?.group&&!e.node?.rowPinned?`editable-cell-line`:``,cellClassRules:{"ag-right-aligned-cell":()=>!0,"editable-cell-empty":e=>!e.node?.group&&!e.node?.rowPinned&&(e.value==null||e.value===``)},valueFormatter:J},{headerName:A(`workloadPricing.columns.consultCategoryFactor`),field:`consultCategoryFactor`,headerClass:`ag-right-aligned-header`,minWidth:170,flex:1,editable:!1,cellClass:`ag-right-aligned-cell`,cellClassRules:{"ag-right-aligned-cell":()=>!0},valueFormatter:e=>{let t=e.data?.consultCategoryFactor||null;return String(t)},valueParser:()=>1,cellEditor:void 0},{headerName:A(`workloadPricing.columns.cHigh`),field:`cHigh`,width:100,minWidth:70,maxWidth:120,editable:!1,cellClass:`ag-right-aligned-cell`,cellClassRules:{"ag-right-aligned-cell":()=>!0}},{headerName:A(`workloadPricing.columns.serviceFee`),field:`serviceFee`,headerClass:`ag-right-aligned-header`,minWidth:150,flex:1,editable:e=>!e.node?.group&&!e.node?.rowPinned&&!G(e.data),cellClass:e=>!e.node?.group&&!e.node?.rowPinned?`editable-cell-line`:``,cellClassRules:{"ag-right-aligned-cell":()=>!0,"editable-cell-empty":e=>!e.node?.group&&!e.node?.rowPinned&&!G(e.data)&&(e.value==null||e.value===``)},valueParser:e=>K(e.newValue),valueFormatter:J},{headerName:A(`workloadPricing.columns.QuantityBasis`),field:`QuantityBasis`,headerClass:`ag-right-aligned-header`,minWidth:372,cellRenderer:Se},{headerName:A(`workloadPricing.columns.ProjectQuantityPhase`),field:`ProjectQuantityPhase`,headerClass:`ag-right-aligned-header`,minWidth:240,cellRenderer:Ce}],Te=i(()=>w(we)),Ee=i(()=>1),De=i(()=>h(B.value,e=>q(e))),Oe=i(()=>oe(B.value,e=>be(e)));i(()=>le({id:`pinned-total-row`,taskCode:A(`workloadPricing.total`),taskName:``,unit:``,conversion:null,workload:Ee.value,basicFee:De.value,budgetBase:``,budgetReferenceUnitPrice:``,budgetAdoptedUnitPrice:null,consultCategoryFactor:null,serviceFee:Oe.value,remark:``,path:[`TOTAL`]}));let Y=async()=>{try{let e=B.value.map(e=>({...e,type:`${O.contractId}-task`})),t=await S().upsertBatch(e);console.log(`💾 数据保存成功:`,t)}catch(e){console.error(`saveToIndexedDB failed:`,e)}},ke=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:_(e,6)===_(t,6),Ae=async()=>{if(!U.value||B.value.length===0)return;F.value=await T(P.value),I=!0;let e=R(),t=!1;B.value=B.value.map(n=>ke(n.consultCategoryFactor,e)?n:(t=!0,{...n})),t&&await Y()},je=i(()=>JSON.stringify({consultFactor:k.keyedStates[P.value]??M.entries[P.value]??null})),Me=async()=>{try{if(!U.value){B.value=[];return}if(await z(),he()){B.value=W();return}let e=await k.loadServicePricingMethodState(O.contractId,O.serviceId,`serviceFee`);if(e){B.value=ve(e.detailRows);return}B.value=W()}catch(e){console.error(`loadFromIndexedDB failed:`,e),B.value=W()}},Ne=async()=>{if(!U.value||B.value.length===0)return;let e=!1;B.value=B.value.map(t=>{if(G(t))return t;let n=String(t.id||``).match(/^task-(\d+)-\d+$/);if(!n)return t;let r=x[n[1]];if(!r)return t;let i=V(r),a=r.unit||``,o=r.basicParam||``,s=_e(r);return t.taskName===i&&t.unit===a&&t.budgetBase===o&&t.budgetReferenceUnitPrice===s?t:(e=!0,{...t,taskName:i,unit:a,budgetBase:o,budgetReferenceUnitPrice:s})}),L.value?.refreshCells({force:!0}),e&&await Y()},X=!1,Z=()=>{Y()},Pe=e=>{e.colDef.field===`budgetReferenceUnitPrice`&&(e.node.setDataValue(`cHigh`,e.data.consultCategoryFactor*e.value),e.node.setDataValue(`serviceFee`,e.data.consultCategoryFactor*e.value)),!X&&Z()},Q=()=>{X=!0},$=()=>{X=!1,Z()},Fe=e=>{L.value=e.api};se({gridApi:L,loadFromIndexedDB:Me,syncLinkedFields:Ae,linkedSourceSignature:je,saveToIndexedDB:Y}),d(()=>j.value,()=>{Ne()});let Ie=e=>Array.isArray(e.value)?JSON.stringify(e.value):e.value,Le=e=>{let t=String(e.column?.getColDef?.().field||``);if(t===`budgetAdoptedUnitPrice`)return ye(e.value);if(t===`workload`||t===`consultCategoryFactor`)return K(e.value);try{let t=JSON.parse(e.value);if(Array.isArray(t))return t}catch{}return e.value},Re=ae.withParams({rowBorder:{style:`solid`,width:.8,color:`var(--border)`},columnBorder:{style:`solid`,width:.8,color:`var(--border)`}});return(i,c)=>(t(),a(`div`,ue,[o(`div`,de,[o(`div`,fe,[o(`h3`,pe,r(l(A)(`workloadPricing.title`)),1),c[0]||=o(`div`,{class:`text-xs text-muted-foreground`},null,-1)]),U.value?(t(),a(`div`,{key:0,class:ee(l(ie))},[e(l(p),{style:n(l(C)),rowData:B.value,columnDefs:Te.value,gridOptions:l(re),theme:l(Re),treeData:!1,animateRows:!0,enableCellSpan:!0,onGridReady:Fe,onCellValueChanged:Pe,suppressColumnVirtualisation:!0,onPasteStart:Q,onPasteEnd:$,onFillStart:Q,onFillEnd:$,suppressRowVirtualisation:!0,cellSelection:{handle:{mode:`range`}},enableClipboard:!0,localeText:l(ne),tooltipShowDelay:500,headerHeight:50,processCellForClipboard:Ie,processCellFromClipboard:Le,undoRedoCellEditing:!0,undoRedoCellEditingLimit:20},null,8,[`style`,`rowData`,`columnDefs`,`gridOptions`,`theme`,`localeText`])],2)):(t(),s(ce,{key:1,title:l(A)(`workloadPricing.unavailableTitle`),message:l(A)(`workloadPricing.unavailableMessage`)},null,8,[`title`,`message`]))])]))}});export{D as default}; |