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

1 line
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{$ as e,At as t,Bt as n,Cr as r,Dt as i,Er as a,H as o,K as ee,Ot as te,Pt as ne,Q as s,U as c,Wn as l,er as u,mn as d,tt as f,yn as p}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-CFxQnYK4.js";import{t as re}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{d as h}from"./decimal-D3bp1pbs.js";import{dt as g,ft as _,gt as v,ht as y,lt as b,mt as ie,pt as ae,ut as oe}from"./vendor-ui-B4V4Cf1T.js";import"./numberFormat-jhZZmX17.js";import{g as se,h as x}from"./sql-C69Jo4HU.js";import{t as S}from"./_plugin-vue_export-helper-DUFB50Ey.js";import{C as ce,k as C,n as w}from"./index-CAPJG_im.js";import{t as le}from"./vendor-ag-grid~XmMajorFactor~XmConsultCategoryFactor~xmInfo~ZxFwView~HtFeeMethodTypeLineVie~ntegcu2a-DXO754eW.js";import{n as ue,o as de,r as fe,t as pe}from"./agGridReadonlyAutoHeight-BpRhYCq1.js";var me={class:`h-full min-h-0 xmMx`},he={class:`h-full min-h-0 rounded-2xl border border-border/60 bg-card/90 shadow-sm backdrop-blur-sm`},ge={class:`flex items-center justify-between border-b border-border/60 px-4 py-3`},_e={class:`text-sm font-semibold text-foreground`},T={class:`ag-theme-quartz h-[calc(100%-56px)] min-h-0 w-full`},E={class:`mt-4 flex items-center justify-end gap-2`},D=S(f({__name:`WorkContentGrid`,props:{title:{default:``},storageKey:{},serviceId:{},contractId:{},projectInfoKey:{default:`xm-base-info-v1`},dictMode:{default:`none`}},emits:[`checkedChange`],setup(f,{expose:S,emit:D}){let O=f,k=async()=>await w().query([{field:`type`,value:`${O.contractId}-zxFw`,operator:`eq`}]),A=D,{t:j,locale:M}=m(),N=ce(),P=h(),F=l(null),I=l([]),L=l(!1),R=l([]),ve={...ue,resizable:!0,sortable:!1,filter:!1},z=async()=>{await i();let e=F.value;!e||e.isDestroyed?.()||(L.value&&e.expandAll(),e.refreshClientSideRowModel(`group`),e.refreshCells({force:!0}),e.redrawRows(),setTimeout(()=>{let e=F.value;!e||e.isDestroyed?.()||(L.value&&e.expandAll(),e.refreshCells({force:!0}),e.redrawRows())},16))},B=e=>{let t=Number(e);return Number.isSafeInteger(t)?t:null},ye=e=>{let t=String(e||``).trim();if(!t.startsWith(`dict-`))return``;let n=/^dict-(-?\d+)-(\d+)(?:-|$)/.exec(t);return n?`sid:${n[1]}|order:${n[2]}`:``},V=e=>{let t=ye(e.id);if(t)return t;let n=String(e.content||``).trim(),r=B(e.serviceid),i=Number(e.dictOrder);if(r!=null&&Number.isFinite(i))return`sid:${r}|order:${i}`;if(r!=null)return`sid:${r}|content:${n}`;let a=String(e.serviceGroup||``).trim();return a?`group:${a}|content:${n}`:`content:${n}`},be=async()=>{try{let e=await P.getItem(O.projectInfoKey),t=typeof e?.projectIndustry==`string`?e.projectIndustry.trim():``;if(t.toUpperCase()===`E2`)return 0;if(t.toUpperCase()===`E3`)return 1;if(t.toUpperCase()===`E4`)return 2;let n=Number(t);return Number.isFinite(n)?n:null}catch{return null}},xe=async()=>{let e=[],t=se(M.value),n=[],r=[];if(L.value=!1,R.value=[],O.dictMode===`service`){let e=await be(),i=(await k()).filter(e=>e.id.split(`-`).at(-1)!==`1`&&e.id.split(`-`).at(-1)!==`2`).map(e=>e.id.split(`-`).at(-1)),a={fid:0,industry:e,sid:[`5`,`7`,`17`,`9`,`10`,`11`,`19`,`20`,`21`,`23`,`25`,`26`,`27`,`30`,`31`,`32`,`0`,`1`,`2`,`3`,`4`].filter(e=>i.includes(e))};if(a){r=Array.isArray(a.sid)?a.sid.map(e=>Number(e)).filter(Number.isFinite):[],Number(a.fid),Number(a.industry),[...r];let e=new Set(r);n=t.filter(t=>e.has(Number(t.serviceid))),L.value=r.length>0,R.value=r.map(e=>{let t=x(e);return t?`${String(t.code||``).trim()} ${String(t.name||``).trim()}`.trim():String(e)})}else n=t.filter(e=>e.serviceid===0)}else if(O.dictMode===`additional`)n=t.filter(e=>e.serviceid===-1&&O.storageKey.split(`-`).at(-1)==`2`);else return[];if(L.value){let e=new Map(r.map((e,t)=>[e,t]));n.sort((t,n)=>{let r=e.get(Number(t.serviceid))??2**53-1,i=e.get(Number(n.serviceid))??2**53-1;return r===i?t.order-n.order:r-i})}else n.sort((e,t)=>e.order-t.order);for(let t of n){let n=String(t.text||``).trim();if(!n)continue;let r=t.type===1?j(`workContent.type.optional`):t.type===2?j(`workContent.type.daily`):t.type===3?j(`workContent.type.special`):t.type===4?j(`workContent.type.additional`):j(`workContent.type.basic`),i=x(t.serviceid),a=i?`${String(i.code||``).trim()} ${String(i.name||``).trim()}`.trim():``;e.push({id:`dict-${t.serviceid}-${t.order}`,content:n,type:r,dictOrder:t.order,serviceGroup:a,serviceid:B(t.serviceid),remark:``,checked:!0,custom:!1,path:L.value&&a?[a,n]:[r,n]})}return e},H=l(!1),U=l(null),W=l(``),Se=o(()=>I.value.filter(e=>!Y(e)&&e.checked).map(e=>e.id));S({selectedTexts:o(()=>I.value.filter(e=>!Y(e)&&(e.custom||e.checked)).map(e=>e.content).filter(Boolean))});let G=()=>{A(`checkedChange`,[...Se.value])},K=async()=>{let e={detailRows:X(I.value).map(e=>({...e}))};N.setKeyState(O.storageKey,e),G();let t=e.detailRows.map(e=>({...e,type:`${O.contractId}-workcontent`}));await w().upsertBatch(t)},q=async()=>{let e=O.dictMode===`none`?[]:await xe(),t=await N.loadKeyState(O.storageKey);if(Array.isArray(t?.detailRows)&&t.detailRows.length>0){let n=t.detailRows.map(e=>({...e,type:e.custom?j(`workContent.type.custom`):e.type||j(`workContent.type.basic`),checked:e.custom?!1:e.checked!==!1,serviceid:B(e.serviceid),path:Array.isArray(e.path)&&e.path.length?e.path:[j(`workContent.type.custom`),e.content||j(`workContent.unnamed`)]})),r=new Map;for(let t of e){let e=String(t.serviceGroup||``).trim(),n=B(t.serviceid);!e||n==null||r.set(e,n)}for(let e of n){if(e.serviceid!=null)continue;let t=String(e.serviceGroup||``).trim();if(!t)continue;let n=r.get(t);n!=null&&(e.serviceid=n)}if(e.length>0){let t=n.filter(e=>e.custom),r=n.filter(e=>!e.custom),i=new Set(e.map(V)),a=r.filter(e=>i.has(V(e))),o=new Map(a.map(e=>[V(e),e]));I.value=Q([...e.map(e=>{let t=V(e),n=o.get(t);return n?{...e,checked:n.checked!==!1,remark:String(n.remark||``)}:e}),...t]),K()}else I.value=Q(n),L.value=I.value.some(e=>!e.custom&&!!String(e.serviceGroup||``).trim())}else I.value=Q(e),K();G(),await z()},Ce=(e,t)=>{let n=I.value.find(t=>t.id===e);!n||Y(n)||(n.checked=t,F.value?.refreshCells({force:!0}),F.value?.redrawRows(),K())},J=e=>e?(e.allLeafChildren||[]).map(e=>e.data).filter(e=>!!(e&&!Y(e)&&!e.custom)):[],we=(e,t)=>{let n=J(e);if(n.length===0)return;let r=new Set(n.map(e=>e.id)),i=!1;for(let e of I.value)r.has(e.id)&&e.checked!==t&&(e.checked=t,i=!0);i&&(F.value?.refreshCells({force:!0}),F.value?.redrawRows(),K())},Te=o(()=>{if(L.value)return{suppressCount:!0,innerRenderer:e=>{let t=document.createElement(`div`);t.className=`work-content-group-row`;let n=document.createElement(`input`);n.type=`checkbox`,n.className=`work-content-group-check`;let r=J(e.node),i=r.filter(e=>e.checked).length;n.checked=r.length>0&&i===r.length,n.indeterminate=i>0&&i<r.length,n.disabled=r.length===0,n.addEventListener(`mousedown`,e=>e.stopPropagation()),n.addEventListener(`click`,e=>e.stopPropagation()),n.addEventListener(`change`,t=>{t.stopPropagation(),we(e.node,n.checked)});let a=document.createElement(`span`);return a.className=`work-content-group-label`,a.textContent=String(e.valueFormatted||e.value||e.node.key||``),t.append(n,a),t}}}),Ee=[{headerName:j(`workContent.columns.no`),minWidth:60,width:70,suppressMovable:!0,editable:!1,colSpan:e=>Y(e.data)?5:1,valueGetter:e=>{if(!e.node||e.node.group||Y(e.data))return``;if(!L.value)return(e.node.rowIndex??0)+1;let t=(e.node.parent?.childrenAfterSort||[]).filter(e=>!e.group&&!Y(e.data)).findIndex(t=>t.id===e.node?.id);return t>=0?t+1:``},cellRenderer:e=>{let t=e.data;if(!Y(t))return e.value;let n=document.createElement(`button`);return n.type=`button`,n.className=`inline-flex h-full w-full cursor-pointer items-center justify-center rounded-none border-0 bg-transparent px-3 py-3 text-sm font-medium text-blue-700 hover:bg-transparent focus:outline-none`,n.textContent=` ${j(`workContent.addCustom`)}`,n.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),ke(String(t?.serviceGroup||``).trim())}),n}},{headerName:j(`workContent.columns.content`),field:`content`,minWidth:320,flex:2,cellClass:`work-content-main-cell`,editable:e=>!!(e.data?.custom&&!Y(e.data)),valueParser:e=>String(e.newValue||``).trim(),wrapText:!0,autoHeight:!0,cellStyle:{whiteSpace:`normal`,lineHeight:`1.5`},cellRenderer:e=>{let t=e.data;if(!t)return``;let n=document.createElement(`div`);if(n.style.display=`flex`,n.style.alignItems=`center`,n.style.justifyContent=`space-between`,n.style.gap=`6px`,n.style.width=`100%`,n.className=`work-content-cell`,Y(t)){let e=document.createElement(`span`);return e.className=`work-content-placeholder`,e.textContent=String(t.content||j(`workContent.addCustom`)),n.appendChild(e),n}if(t.custom){let e=document.createElement(`span`);return t.content?(e.className=`work-content-text`,e.textContent=t.content):(e.className=`work-content-placeholder`,e.textContent=j(`workContent.clickToInputContent`)),n.appendChild(e),n}let r=document.createElement(`input`);r.type=`checkbox`,r.className=`work-content-check`,r.checked=!!t.checked,r.addEventListener(`change`,()=>{Ce(t.id,r.checked)});let i=document.createElement(`span`);return i.className=`work-content-text`,i.textContent=String(t.content||``),n.appendChild(r),n.appendChild(i),n}},{headerName:j(`workContent.columns.remark`),field:`remark`,minWidth:180,flex:1.2,editable:e=>!Y(e.data),cellEditor:`agLargeTextCellEditor`,wrapText:!0,autoHeight:!0,cellStyle:{whiteSpace:`normal`,lineHeight:`1.4`},cellClass:`remark-wrap-cell`,cellClassRules:{"editable-cell-empty":e=>e.value==null||e.value===``},valueFormatter:e=>Y(e.data)?``:e.value||j(`workContent.clickToInput`)}],De=o(()=>pe(Ee)),Y=e=>!!e?.isAddTrigger,X=e=>e.filter(e=>!Y(e)),Z=e=>({id:`add-trigger-${e?String(e).trim():`root`}`,content:j(`workContent.addCustom`),type:j(`workContent.type.custom`),serviceGroup:e||``,serviceid:null,remark:``,checked:!1,custom:!1,isAddTrigger:!0,path:e?[e,`__add__`]:[`__add__`]}),Q=e=>{let t=X(e);if(L.value){let e=new Map;for(let n of t){let t=String(n.serviceGroup||``).trim()||j(`workContent.ungrouped`);e.has(t)||e.set(t,[]),e.get(t)?.push(n)}let n=R.value.length?[...R.value]:[...e.keys()],r=[],i=new Set;for(let t of n)i.add(t),r.push(...e.get(t)||[]),r.push(Z(t));for(let[t,n]of e.entries())i.has(t)||(r.push(...n),r.push(Z(t)));return r}return[...t,Z()]},Oe=e=>{let t=Array.isArray(e?.path)?e.path.map(e=>String(e||``).trim()).filter(Boolean):[];return t.length>0?t:[String(e?.id||``).trim()||`__row__`]},ke=e=>{let t=Date.now(),n=L.value?String(e||R.value[0]||``).trim():``,r=L.value?X(I.value).find(e=>String(e.serviceGroup||``).trim()===n&&e.serviceid!=null)?.serviceid??null:null,i={id:`custom-${t}`,content:``,type:j(`workContent.type.custom`),serviceGroup:n,serviceid:r,remark:``,checked:!1,custom:!0,path:L.value&&n?[n,`${j(`workContent.type.custom`)}-${t}`]:[j(`workContent.type.custom`),`${j(`workContent.type.custom`)}-${t}`]},a=X(I.value);a.push(i),I.value=Q(a),K(),setTimeout(()=>{let e=I.value.findIndex(e=>e.id===i.id);e>=0&&F.value?.startEditingCell({rowIndex:e,colKey:`content`})},0)},Ae=e=>{F.value=e.api,z()},$=e=>{z()},je=e=>{let t=e.data;if(!(!t||Y(t))){if(e.colDef.field===`content`&&t.custom){let e=String(t.serviceGroup||``).trim();t.path=L.value&&e?[e,t.content||`${j(`workContent.type.custom`)}-${t.id}`]:[j(`workContent.type.custom`),t.content||`${j(`workContent.type.custom`)}-${t.id}`]}e.colDef.field===`type`&&t.custom&&(t.type=j(`workContent.type.custom`)),K()}};ne(()=>{q()}),d(L,()=>{z()}),d(()=>I.value.length,()=>{z()}),d(M,()=>{q()}),t(()=>{F.value?.stopEditing(),K()});let Me=e=>{H.value=e},Ne=e=>{I.value=Q(I.value.filter(t=>t.id!==e)),K()},Pe=()=>{let e=U.value;e&&(Ne(e),H.value=!1,U.value=null,W.value=``)};return te(async()=>{await q()}),(t,i)=>(n(),ee(`div`,me,[c(`div`,he,[c(`div`,ge,[c(`h3`,_e,a(O.title||u(j)(`workContent.title`)),1)]),c(`div`,T,[e(u(re),{style:r(u(fe)),rowData:I.value,columnDefs:De.value,theme:u(de),getRowId:e=>e.data.id,treeData:L.value,getDataPath:Oe,groupDefaultExpanded:L.value?-1:0,groupDisplayType:L.value?`groupRows`:void 0,groupRowRendererParams:Te.value,animateRows:!0,localeText:u(le),tooltipShowDelay:500,singleClickEdit:!0,stopEditingWhenCellsLoseFocus:!0,enterNavigatesVertically:!0,enterNavigatesVerticallyAfterEdit:!0,defaultColDef:ve,suppressColumnVirtualisation:!1,suppressRowVirtualisation:!1,onGridReady:Ae,onFirstDataRendered:$,onCellValueChanged:je},null,8,[`style`,`rowData`,`columnDefs`,`theme`,`getRowId`,`treeData`,`groupDefaultExpanded`,`groupDisplayType`,`groupRowRendererParams`,`localeText`])])]),e(u(oe),{open:H.value,"onUpdate:open":Me},{default:p(()=>[e(u(g),null,{default:p(()=>[e(u(_),{class:`fixed inset-0 z-50 bg-black/45`}),e(u(y),{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:p(()=>[e(u(b),{class:`text-base font-semibold`},{default:p(()=>[s(a(u(j)(`workContent.dialog.deleteTitle`)),1)]),_:1}),e(u(ae),{class:`mt-2 text-sm text-muted-foreground`},{default:p(()=>[s(a(u(j)(`workContent.dialog.deleteDesc`,{name:W.value})),1)]),_:1}),c(`div`,E,[e(u(ie),{"as-child":``},{default:p(()=>[e(u(C),{variant:`outline`},{default:p(()=>[s(a(u(j)(`common.cancel`)),1)]),_:1})]),_:1}),e(u(v),{"as-child":``},{default:p(()=>[e(u(C),{variant:`destructive`,onClick:Pe},{default:p(()=>[s(a(u(j)(`common.delete`)),1)]),_:1})]),_:1})])]),_:1})]),_:1})]),_:1},8,[`open`])]))}}),[[`__scopeId`,`data-v-2dd31a50`]]);export{D as default};