diff --git a/package.json b/package.json index a666074..aad90d7 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "axios": "^1.7.7", "crypto-js": "^4.2.0", "dva": "^3.0.0-alpha.1", + "exceljs": "^4.4.0", "moment": "^2.30.1", "numeral": "^2.0.6", "qrcode": "^1.5.4", diff --git a/src/pages/DigitalElectronics/index.tsx b/src/pages/DigitalElectronics/index.tsx index c1bce1b..6603b9d 100644 --- a/src/pages/DigitalElectronics/index.tsx +++ b/src/pages/DigitalElectronics/index.tsx @@ -268,14 +268,21 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => { { - await handleSynchroBILLInterface({ - ...record, - BILL_STATE: 9100 - }) + // 通知金蝶 手动开票!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - hanleManualInvoicing(record) - actionRef.current?.reload() + let data = await hanleManualInvoicing(record) + if (data.success) { + await handleSynchroBILLInterface({ + ...record, + BILL_STATE: 9100 + }) + actionRef.current?.reload() + } else { + message.error(data.message) + } + + }} onCancel={() => { }} okText="确认" @@ -757,9 +764,11 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => { data: JSON.stringify(invoiceData) })) } - let response = await handleGetForwardJDPJInterface(newreq) + let response: any = await handleGetForwardJDPJInterface(newreq) - console.log('responseresponseresponseresponse', response); + let result: any = JSON.parse(response) + console.log('resultresultresult', result); + return result } // 退回开票 const handleReturnInvoice = async (record: any) => { diff --git a/src/pages/DigitalElectronics/service.ts b/src/pages/DigitalElectronics/service.ts index 3f798ed..4c04faa 100644 --- a/src/pages/DigitalElectronics/service.ts +++ b/src/pages/DigitalElectronics/service.ts @@ -110,6 +110,20 @@ export async function handleGetBILLDETAILList(params: any) { return data.Result_Data.List } +// 批量同步票据明细 +export async function handleSynchroBILLDETAILList(params: any) { + const data = await requestOld(`/Invoice/SynchroBILLDETAILList`, { + method: 'POST', + data: params + }) + + if (data.Result_Code !== 100) { + return data + } + + return data +} + // 包一层的中转接口 用来解决金飘云的跨域问题 export async function handleGetForwardJDPJInterface(params: any) { diff --git a/src/pages/InvoiceInquiry/index.tsx b/src/pages/InvoiceInquiry/index.tsx index 58b7cb5..51c5b8b 100644 --- a/src/pages/InvoiceInquiry/index.tsx +++ b/src/pages/InvoiceInquiry/index.tsx @@ -63,6 +63,14 @@ const InvoiceInquiry: React.FC<{ currentUser: any }> = (props) => { BANK_ACCOUNT: { show: false }, }); const columns: any = [ + { + title: "查询条件", + dataIndex: "searchText", + hideInTable: true, + fieldProps: { + placeholder: "请输入票据编号/流水号/业务单号", + } + }, { title: '服务区名称', dataIndex: 'SERVERPART_NAME', @@ -766,6 +774,11 @@ const InvoiceInquiry: React.FC<{ currentUser: any }> = (props) => { PageIndex: 1, PageSize: 999999, sortstr: sortstr.length ? sortstr.toString() : "BILL_ID desc", + keyWord: { + Key: "BILL_NO,SERIAL_NO,INTERBANK_NO", + Value: params?.searchText || "" + } + } const data = await handleGetBILLList(req) diff --git a/src/pages/RentCalculation/index.tsx b/src/pages/RentCalculation/index.tsx index 01494f2..52291cd 100644 --- a/src/pages/RentCalculation/index.tsx +++ b/src/pages/RentCalculation/index.tsx @@ -1,12 +1,14 @@ import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree"; import { ActionType, FormInstance, ProForm, ProFormDatePicker, ProFormDigit, ProFormSelect, ProFormText, ProTable } from "@ant-design/pro-components"; import { Button, Col, Divider, message, Modal, Row } from "antd"; -import { useRef, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { connect } from "umi"; import './style.less' -import { handleGetServerpartTree, handleGetSERVERPARTTYPEList, handlGetSPCONTRIBUTIONList } from "../operationReport/service"; +import { handleGetServerpartTree, handleGetSERVERPARTTYPEList, handlGetDeleteRENTCALCULATION, handlGetRENTCALCULATIONList, handlGetSPCONTRIBUTIONList, handlSynchroRENTCALCULATION } from "../operationReport/service"; import { handleGetServerpartInfo } from "../serverpartAssets/service"; import { encryptAES } from "@/utils/handleAes"; +import moment from "moment"; +import { handleGetPassportInfoById } from "../DigitalElectronics/service"; const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -29,7 +31,10 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { const [SERVERPARTREGION, setSERVERPARTREGION] = useState() // 选择模式里面的 表单数据 const [selectFormData, setSelectFormData] = useState() - + // 当前选择的行数据 + const [currentRow, setCurrentRow] = useState() + // 当前的用户信息 + const [userInfoDetail, setUserInfoDetail] = useState() const operatingModels = [ '委托运营', @@ -41,55 +46,75 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { const columns: any = [ { title: "片区", - dataIndex: "", + dataIndex: "SPREGIONTYPE_NAME", hideInSearch: true, align: 'center', - width: 120, + width: 180, ellipsis: true, }, { title: "服务区", - dataIndex: "", + dataIndex: "SERVERPART_NAME", hideInSearch: true, align: 'center', - width: 120, + width: 180, ellipsis: true, }, { title: "所属高速", - dataIndex: "", + dataIndex: "EXPRESSWAY_NAME", hideInSearch: true, align: 'center', - width: 120, + width: 150, ellipsis: true, }, { title: "产权所属", - dataIndex: "", + dataIndex: "OWNER_COMPANY", hideInSearch: true, align: 'center', - width: 120, + width: 150, ellipsis: true, }, { title: "站点类型", - dataIndex: "", + dataIndex: "STATION_TYPE", hideInSearch: true, align: 'center', width: 120, ellipsis: true, + valueType: 'select', + fieldProps: { + options: [ + { label: "服务区", value: "1000" }, + { label: "停车区", value: "2000" }, + { label: "加油站", value: "3000" }, + { label: "加水站", value: "4000" }, + { label: "观景台", value: "5000" }, + { label: "休息区", value: "6000" }, + ] + } }, { title: "分类定级", - dataIndex: "", + dataIndex: "SERVERPART_TYPE", hideInSearch: true, align: 'center', width: 120, ellipsis: true, + valueType: 'select', + fieldProps: { + options: [ + { label: "立标杆", value: 1000 }, + { label: "提能级", value: 2000 }, + { label: "稳营收", value: 3000 }, + { label: "保功能", value: 4000 }, + ] + } }, { title:
断面车流统计(辆/日)
, - dataIndex: "", + dataIndex: "SECTIONFLOW_NUM", hideInSearch: true, align: 'right', width: 180, @@ -97,7 +122,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title: "业态", - dataIndex: "", + dataIndex: "BUSINESS_TYPE", hideInSearch: true, align: 'center', width: 120, @@ -105,7 +130,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title: "招商模式", - dataIndex: "", + dataIndex: "LEASING_MODE", hideInSearch: true, align: 'center', width: 120, @@ -113,7 +138,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title: "运营模式", - dataIndex: "", + dataIndex: "OPERATING_MODE", hideInSearch: true, align: 'center', width: 120, @@ -121,7 +146,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title:
首次保底营业额(元)
, - dataIndex: "", + dataIndex: "FIRST_GUARANTEE_TURNOVER", hideInSearch: true, align: 'right', width: 150, @@ -129,7 +154,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title:
首次采购人收益提点比例(%)
, - dataIndex: "", + dataIndex: "FIRST_PURCHASER_RATE", hideInSearch: true, align: 'right', width: 200, @@ -137,7 +162,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title:
二次保底营业额(元)
, - dataIndex: "", + dataIndex: "SECOND_GUARANTEE_TURNOVER", hideInSearch: true, align: 'right', width: 150, @@ -145,7 +170,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title:
二次采购人收益提点比例(%)
, - dataIndex: "", + dataIndex: "SECOND_PURCHASER_RATE", hideInSearch: true, align: 'right', width: 200, @@ -153,7 +178,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title:
三次保底营业额(元)
, - dataIndex: "", + dataIndex: "THIRD_GUARANTEE_TURNOVER", hideInSearch: true, align: 'right', width: 150, @@ -161,11 +186,26 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { }, { title:
三次采购人收益提点比例(%)
, - dataIndex: "", + dataIndex: "THIRD_PURCHASER_RATE", hideInSearch: true, align: 'right', width: 200, ellipsis: true, + }, + + { + title: '操作', + dataIndex: 'action', + width: 150, + fixed: 'left', + align: 'center', + hideInSearch: true, + render: (_: any, record: any) => ( + { + await handleDeleteRecord(record?.RENTCALCULATION_ID) + } + }>删除 + ) } ] // 根据区域获取到服务区列表 @@ -217,15 +257,114 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { console.log('newDatanewDatanewData', newData); if (newData && newData.length > 0) { let res: any = newData[0].SERVERPART_TYPE - selectFormRef.current?.setFieldsValue({ rating: res }) + selectFormRef.current?.setFieldsValue({ SERVERPART_TYPE: res }) } setSERVERPARTREGION(list) } - // 同步和新增方法 const handleAddUpdate = async (formData: any) => { + console.log('formDataformDataformData', formData); + let req: any = {} + if (currentRow?.RENTCALCULATION_ID) { + req = { + ...currentRow, + ...formData, + CONTRACT_END_DATE: formData?.CONTRACT_END_DATE ? moment(formData?.CONTRACT_END_DATE).format('YYYY-MM-DD') : "", + COOPERATION_TERM: formData?.COOPERATION_TERM ? moment(formData?.COOPERATION_TERM).format('YYYY-MM-DD') : "", + FIRSTSTART_DATE: formData?.FIRSTSTART_DATE ? moment(formData?.FIRSTSTART_DATE).format('YYYY-MM-DD') : "", + SERVERPART_TYPE: selectFormData?.SERVERPART_TYPE ? Number(selectFormData?.SERVERPART_TYPE) : "", + STAFF_ID: userInfoDetail.ID, + STAFF_NAME: userInfoDetail.Name, + RENTCALCULATION_STATE: 1, + OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), + } + } else { + req = { + ...formData, + CONTRACT_END_DATE: formData?.CONTRACT_END_DATE ? moment(formData?.CONTRACT_END_DATE).format('YYYY-MM-DD') : "", + COOPERATION_TERM: formData?.COOPERATION_TERM ? moment(formData?.COOPERATION_TERM).format('YYYY-MM-DD') : "", + FIRSTSTART_DATE: formData?.FIRSTSTART_DATE ? moment(formData?.FIRSTSTART_DATE).format('YYYY-MM-DD') : "", + SERVERPART_TYPE: selectFormData?.SERVERPART_TYPE ? Number(selectFormData?.SERVERPART_TYPE) : "", + STAFF_ID: userInfoDetail.ID, + STAFF_NAME: userInfoDetail.Name, + RENTCALCULATION_STATE: 1, + OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), + } + } + let newReq: any = { + name: "", + value: encryptAES(JSON.stringify(req)) + } + + const data = await handlSynchroRENTCALCULATION(newReq) + if (data.Result_Code === 100) { + message.success('同步成功') + setShowSelectOperatingModel(false) + setRentCalculateModal(false) + setSelectedOperatingModel(null) + actionRef.current?.reload() + } else { + message.error('同步失败') + } + } + // 加盟项目 第二次底价 和 第三次底价的处理方法 + const handleCalcSecondThirdLowPrice = (rent: number, cost: number, increase: number, first90: number) => { + // rent 原合同年末租金 cost 集团成本合计 increase 保底收益递增 first90 首次招商底价 * 90% + // 解析数字,容错去逗号/货币符号 + function toNum(v) { + if (v === null || v === undefined || v === '') return NaN; + if (typeof v === 'number') return Number.isFinite(v) ? v : NaN; + const s = String(v).trim().replace(/[,¥\s]/g, ''); + return s === '' ? NaN : Number(s); + } + + const a = toNum(rent); + const b = toNum(cost); + const c = toNum(increase); + const d = toNum(first90); + + const candidates = [a, b, c, d].filter(x => !Number.isNaN(x)); + if (candidates.length === 0) { + return { firstOffer: null, secondResult: null, thirdResult: null, candidatesSorted: [] }; + } + + // 去重并从大到小排序(保留重复也可,若需要保留请去掉 Set) + const unique = Array.from(new Set(candidates)).sort((x, y) => y - x); + + // 通过 first90 反推 firstOffer(如果 first90 不合法则 firstOffer = null) + const firstOffer = Number.isNaN(d) ? null : (d / 0.9); + + // helper: 从候选中找出 < bound 的最大值(或 null) + function maxUnder(bound) { + if (bound == null || Number.isNaN(bound)) return null; + const list = unique.filter(v => v < bound); + return list.length ? list[0] /* 因为已降序,第一项即最大 */ : null; + } + + const secondResult = maxUnder(firstOffer); + const thirdResult = secondResult == null ? null : maxUnder(secondResult); + + return { firstOffer, secondResult, thirdResult, candidatesSorted: unique }; + } + // 删除 + const handleDeleteRecord = async (id: any) => { + const req: any = { + RENTCALCULATIONId: id + } + let newReq: any = { + name: "", + value: encryptAES(JSON.stringify(req)) + } + + const data = await handlGetDeleteRENTCALCULATION(newReq) + if (data.Result_Code === 100) { + message.success('删除成功!') + actionRef.current?.reload() + } else { + message.error('删除失败!') + } } return ( @@ -247,13 +386,35 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { headerTitle={'租金测算列表'} search={{ span: 6, }} request={async (params) => { + // 地址栏传参 UserIdEncrypted 为当前登录用户的加密id + const search = window.location.search; + const addressParams = Object.fromEntries(new URLSearchParams(search).entries()); + console.log('addressParamsaddressParams', addressParams); + const reqtoken: any = { + UserIdEncrypted: addressParams.UserIdEncrypted + } + const userInfo = await handleGetPassportInfoById(reqtoken) + setUserInfoDetail(userInfo) if (!selectedId) { return { data: [], success: true } } - // if (data && data.length > 0) { - // return { data, success: true } - // } + const req: any = { + searchParameter: { + SERVERPART_IDS: selectedId, + RENTCALCULATION_STATE: 1 + }, + PageIndex: 1, + PageSize: 999999, + } + let newReq: any = { + name: "", + value: encryptAES(JSON.stringify(req)) + } + const data = await handlGetRENTCALCULATIONList(newReq) + if (data && data.length > 0) { + return { data, success: true } + } return { data: [], success: true } }} toolbar={{ @@ -316,7 +477,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { const req: any = { @@ -347,9 +508,9 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { onChange: (value: any, option: any) => { handleGetServerPartList(value) if (value) { - modalRef.current?.setFieldsValue({ belongArea: option.label }) + selectFormRef.current?.setFieldsValue({ SPREGIONTYPE_NAME: option.label }) } else { - modalRef.current?.setFieldsValue({ belongArea: "" }) + selectFormRef.current?.setFieldsValue({ SPREGIONTYPE_NAME: "" }) } } }} @@ -358,21 +519,21 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { handleGetSERVERPARTREGION(e) if (e) { - modalRef.current?.setFieldsValue({ SAName: option.label }) + selectFormRef.current?.setFieldsValue({ SERVERPART_NAME: option.label }) } else { - modalRef.current?.setFieldsValue({ SAName: "" }) + selectFormRef.current?.setFieldsValue({ SERVERPART_NAME: "" }) } } }} @@ -382,7 +543,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -392,78 +553,36 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { options={SERVERPARTREGION} /> - - - + { + selectedOperatingModel === '委托运营' ? + + + : "" + } + { - // if (e) { - // console.log('eeeeee', e); - // let fromRes: any = modalRef.current?.getFieldValue('floorPrice') - // if (fromRes) { - // let rate: number = 1.05 - // if (e === 1000 || e === 2000) { - // rate = 1.15 - // } else if (e === 3000) { - // rate = 1.1 - // } else if (e === 4000) { - // rate = 1.05 - // } - // let sum: number = fromRes * 1.15 * rate - // modalRef.current?.setFieldsValue({ floorPriceMore: sum.toFixed(2) }) - - // // 到这里是拿到新的 保底收益递增 - // let newNumber: number = Number(sum.toFixed(2)) - // // 先拿到判断是不是首次项目 - // let formDataIsFirst: number = modalRef.current?.getFieldValue('isFirst') - // // 是首次 就不去改变 保底营业额的值 不是才计算 - // if (formDataIsFirst === 1) { - // // 1 代表首次 - // // 首次则 首次招标营业额 为 最高值收益(floorPriceMore) / 35% - // modalRef.current?.setFieldsValue({ firstMinimumRevenue: (Number(newNumber) / 0.35).toFixed(2) }) - // // 那么二次保底营业额的值就是 第一次的值 - // let firstMinimumRevenueNumber: number = Number((Number(sum.toFixed(2)) / 0.35).toFixed(2)) - // modalRef.current?.setFieldsValue({ secondMinimumRevenue: (firstMinimumRevenueNumber).toFixed(2) }) - // // 那么第三次保底营业额的值 就是 第二次的值 *90% - // let secondMinimumRevenue: number = Number((firstMinimumRevenueNumber).toFixed(2)) - // modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (secondMinimumRevenue * 0.9).toFixed(2) }) - - // } else if (formDataIsFirst === 2) { - // // 2 代表非首次 - // // 不是首次进来 那么就不管首次保底营业额了 只要看第二次 有没有值即可 有值算第三次 没值就不算 - // let secondMinimumRevenueNumber: number = modalRef.current?.getFieldValue('secondMinimumRevenue') - // if (secondMinimumRevenueNumber) { - // modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (secondMinimumRevenueNumber * 0.9).toFixed(2) }) - // } - // } - // } - // } - - // } - // }} /> @@ -480,13 +599,10 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { width={1200} open={rentCalculateModal} onCancel={() => { - setSelectedOperatingModel(null) setRentCalculateModal(false) }} onOk={async () => { modalRef.current?.validateFields().then((res: any) => { - setSelectedOperatingModel(null) - setRentCalculateModal(false) // 保存同步租金测算的方法 handleAddUpdate(res) }) @@ -500,7 +616,6 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { labelCol={{ style: { width: 120 } }} request={async () => { let formData: any = selectFormRef.current?.getFieldsValue({}) - console.log('formDataformDataformData', formData); if (formData) { return { ...formData @@ -516,7 +631,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { const req: any = { @@ -544,14 +659,14 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -559,7 +674,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -574,12 +689,12 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { - if (e) { + if (e && selectedOperatingModel === '委托运营') { let sum: number = e * 16.89 - modalRef.current?.setFieldsValue({ addWaterCost: sum.toFixed(2), addWaterCostMore: (Number(sum.toFixed(2)) * 1.15).toFixed(2) }) + modalRef.current?.setFieldsValue({ GROUP_COST_WATER: sum.toFixed(2), GROUP_COST_WATER_INC: (Number(sum.toFixed(2)) * 1.15).toFixed(2) }) } } }} @@ -597,15 +712,15 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { onChange: (e: any) => { if (e) { // 因为是非首次 所以要拿到第三方保底递增收益的值 去判断 要不要重新计算首次保底营业额的值 - let floorPriceMore: number = modalRef.current?.getFieldValue('floorPriceMore') + let GUARANTEE_INCREASE: number = modalRef.current?.getFieldValue('GUARANTEE_INCREASE') if (e === 2) { - modalRef.current?.setFieldsValue({ firstReminder: 32 }) - if (floorPriceMore) { - modalRef.current?.setFieldsValue({ firstMinimumRevenue: Number(floorPriceMore / 0.35).toFixed(2) }) + modalRef.current?.setFieldsValue({ FIRST_PURCHASER_RATE: 32 }) + if (GUARANTEE_INCREASE) { + modalRef.current?.setFieldsValue({ FIRST_GUARANTEE_TURNOVER: Number(GUARANTEE_INCREASE / 0.35).toFixed(2) }) } } else if (e === 1) { - modalRef.current?.setFieldsValue({ firstReminder: 38 }) - modalRef.current?.setFieldsValue({ firstMinimumRevenue: Number(floorPriceMore).toFixed(2) }) + modalRef.current?.setFieldsValue({ FIRST_PURCHASER_RATE: 38 }) + modalRef.current?.setFieldsValue({ FIRST_GUARANTEE_TURNOVER: Number(GUARANTEE_INCREASE).toFixed(2) }) } } } @@ -615,42 +730,74 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { + + + {/* 每个类型 实际需要填写计算的内容 都不一样 所以要区分了 */} @@ -658,34 +805,27 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { selectedOperatingModel === '委托运营' ? <> 委托运营 - - - 集团公司成本价格 { if (e) { - modalRef.current?.setFieldsValue({ addWaterCostMore: (Number(e) * 1.15).toFixed(2) }) + modalRef.current?.setFieldsValue({ GROUP_COST_WATER_INC: (Number(e) * 1.15).toFixed(2) }) } } }} @@ -694,18 +834,18 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { 第三方评估测算年保底收益 { if (e) { - let fromRes: any = Number(selectFormData?.rating) + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) if (fromRes) { let rate: number = 1.05 if (fromRes === 1000 || fromRes === 2000) { @@ -716,20 +856,20 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { rate = 1.05 } let sum: number = e * 1.15 * rate - modalRef.current?.setFieldsValue({ floorPriceMore: sum.toFixed(2) }) + modalRef.current?.setFieldsValue({ GUARANTEE_INCREASE: sum.toFixed(2) }) // 是首次 那么就要把 1 2 3 次都算出来 不是首次的话 就算 2 3 即可 if (selectFormData?.isFirst === 1) { // 是首次的话 - modalRef.current?.setFieldsValue({ firstMinimumRevenue: (Number(sum.toFixed(2)) / 0.35).toFixed(2) }) + modalRef.current?.setFieldsValue({ FIRST_GUARANTEE_TURNOVER: (Number(sum.toFixed(2)) / 0.35).toFixed(2) }) // 首次的钱 赋值一下 let firstMinimumRevenueNumber: number = Number((Number(sum.toFixed(2)) / 0.35).toFixed(2)) // 第二次就是第一次的值 - modalRef.current?.setFieldsValue({ secondMinimumRevenue: (Number(firstMinimumRevenueNumber)).toFixed(2) }) + modalRef.current?.setFieldsValue({ SECOND_GUARANTEE_TURNOVER: (Number(firstMinimumRevenueNumber)).toFixed(2) }) // 给第二次的钱 赋值一下 let secondMinimumRevenueNumber: number = Number((Number(firstMinimumRevenueNumber)).toFixed(2)) // 第三次的钱是第二次的90% - modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (Number(secondMinimumRevenueNumber) * 0.9).toFixed(2) }) + modalRef.current?.setFieldsValue({ THIRD_GUARANTEE_TURNOVER: (Number(secondMinimumRevenueNumber) * 0.9).toFixed(2) }) } else if (selectFormData?.isFirst === 2) { // 非首次 这边怎么样都没关系了 等用户自己输入第一次的值之后 再给他补齐 2 3 次 } @@ -742,7 +882,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { if (e) { @@ -751,7 +891,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { // 是首次 就不去改变 保底营业额的值 不是才计算 if (formDataIsFirst === 1) { } else if (formDataIsFirst === 2) { - modalRef.current?.setFieldsValue({ firstMinimumRevenue: Number(e / 0.35).toFixed(2) }) + modalRef.current?.setFieldsValue({ FIRST_GUARANTEE_TURNOVER: Number(e / 0.35).toFixed(2) }) } } } @@ -763,28 +903,30 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { 测算结果 首次招标 { if (e) { let sum: number = e * 0.9 modalRef.current?.setFieldsValue({ - secondMinimumRevenue: e, - thriceMinimumRevenue: sum.toFixed(2) + SECOND_GUARANTEE_TURNOVER: e, + THIRD_GUARANTEE_TURNOVER: sum.toFixed(2) }) } } @@ -794,7 +936,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -802,13 +944,13 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -816,13 +958,13 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { @@ -831,7 +973,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { : selectedOperatingModel === '加盟项目' ? <> - 业态定位 + {/* 业态定位 = (props) => { label={'便利店'} name={''} /> + */} + 原合同末年租金 + + + { + // 拿到当前表单数据 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_TOTAL_INC_V2", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(e || 0), Number(sumObj.GROUP_COST_TOTAL_INC_V2 || 0), Number(sumObj.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(e || 0), Number(sumObj.GROUP_COST_TOTAL_INC_V2 || 0), Number(sumObj.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} + /> 业态面积 { + // 先改自己有关联的 + let sum: number = Number(((e || 0) * 303.91).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_COMPREHENSIVE: sum, GROUP_COST_COMPREHENSIVE_INC: (sum * 1.15).toFixed(2) }) + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + + } + }} /> { + let sum: number = Number(((e || 0) * 16.89).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_WATER: sum, GROUP_COST_WATER_INC: (sum * 1.15).toFixed(2) }) + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + + } + }} /> - - 原合同末年租金 - - - - - - - - { + let sum: number = Number(((e || 0) * 16.89).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_AUTOSHOP: sum, GROUP_COST_AUTOSHOP_INC: (sum * 1.15).toFixed(2) }) + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> 集团公司成本价格 - - - { + let sum: number = Number(((e || 0) * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_COMPREHENSIVE_INC: sum }) + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> - - - { + let sum: number = Number(((e || 0) * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_WATER_INC: sum }) + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> { + let sum: number = Number(((e || 0) * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_AUTOSHOP_INC: sum }) + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> { + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_WATER_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(e || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> { + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_AUTOSHOP_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(e || 0) + Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + + } + }} + /> + + + { + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_COMPREHENSIVE_INC", "GROUP_COST_WATER_INC"]) + let totalIncrementalSum: number = Number((Number(sumObj.GROUP_COST_COMPREHENSIVE_INC || 0) + Number(sumObj.GROUP_COST_WATER_INC || 0) + Number(e || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ GROUP_COST_TOTAL_INC_V2: totalIncrementalSum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(totalIncrementalSum || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} + /> + + + { + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "totalGuaranteedIncomeAdd"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(e || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(e || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> 第三方评估测算年保底收益(元) { + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["THIRD_GUARANTEE_WATER", "THIRD_GUARANTEE_AUTOSHOP"]) + let sum: number = Number((Number(e || 0) + Number(sumObj.THIRD_GUARANTEE_WATER || 0) + Number(sumObj.THIRD_GUARANTEE_AUTOSHOP || 0)).toFixed(2)) + + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + + + modalRef.current?.setFieldsValue({ GUARANTEE_TOTAL: sum, totalGuaranteedIncomeAdd: (sum * 1.15 * rate).toFixed(2) }) + } + }} /> { + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["THIRD_GUARANTEE_COMPREHENSIVE", "THIRD_GUARANTEE_AUTOSHOP"]) + let sum: number = Number((Number(sumObj.THIRD_GUARANTEE_COMPREHENSIVE || 0) + Number(e || 0) + Number(sumObj.THIRD_GUARANTEE_AUTOSHOP || 0)).toFixed(2)) + + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + + modalRef.current?.setFieldsValue({ GUARANTEE_TOTAL: sum, totalGuaranteedIncomeAdd: (sum * 1.15 * rate).toFixed(2) }) + } + }} /> - - 加盟项目 - - { + // 拿到合计 + let sumObj: any = modalRef.current?.getFieldsValue(["THIRD_GUARANTEE_COMPREHENSIVE", "THIRD_GUARANTEE_WATER"]) + let sum: number = Number((Number(sumObj.THIRD_GUARANTEE_COMPREHENSIVE || 0) + Number(sumObj.THIRD_GUARANTEE_WATER || 0) + Number(e || 0)).toFixed(2)) + + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + + modalRef.current?.setFieldsValue({ GUARANTEE_TOTAL: sum, totalGuaranteedIncomeAdd: (sum * 1.15 * rate).toFixed(2) }) + } + }} /> + 保底收益 { + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + let sum: number = Number(((e || 0) * 1.15 * rate).toFixed(2)) + modalRef.current?.setFieldsValue({ totalGuaranteedIncomeAdd: sum }) + + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GROUP_COST_TOTAL_INC_V2"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj2.GROUP_COST_TOTAL_INC_V2 || 0), Number(sum || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj2.GROUP_COST_TOTAL_INC_V2 || 0), Number(sum || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> { + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GROUP_COST_TOTAL_INC_V2"]) + // 先拿第一次的招商底价 这是第一次招商的底价 + let FIRST_OFFER: number = Math.max(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj2.GROUP_COST_TOTAL_INC_V2 || 0), Number(e || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj2.GROUP_COST_TOTAL_INC_V2 || 0), Number(e || 0), Number((FIRST_OFFER * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: FIRST_OFFER, SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> + 加盟项目 <> - 首次招商 { + // 拿到当前表单数据 + let sumObj2: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GROUP_COST_TOTAL_INC_V2", "totalGuaranteedIncomeAdd"]) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj2.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj2.GROUP_COST_TOTAL_INC_V2 || 0), Number(sumObj2.totalGuaranteedIncomeAdd || 0), Number(((e || 0) * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + SECOND_OFFER: res.secondResult, THIRD_OFFER: res.thirdResult + }) + } + }} /> - - - - + label={'二次招商底价(元)'} + name={'SECOND_OFFER'} - 测算结果 - - + + + + + + - - @@ -1051,187 +1487,368 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { + // 改变综合楼单平方价格 + let sumObj: any = modalRef.current?.getFieldsValue(["FIRST_OFFER_LY"]) + let COMPREHENSIVE_PRICE_PER: number = Number((Number(sumObj?.FIRST_OFFER_LY || 0) / Number(e || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ + COMPREHENSIVE_PRICE_PER: COMPREHENSIVE_PRICE_PER, + }) + + let sumObj2: any = modalRef.current?.getFieldsValue(["TOTAL_PROPERTY_FEE", "AREA_DINING", "AREA_SNACK", "AREA_CONVENIENCE", "AREA_AUTOSHOP"]) + modalRef.current?.setFieldsValue({ + PROPERTY_FEE_DINING: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(e || 0) * Number(sumObj2.AREA_DINING || 0)).toFixed(2)),//餐饮 + PROPERTY_FEE_SNACK: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(e || 0) * Number(sumObj2.AREA_SNACK || 0)).toFixed(2)),//小吃 + PROPERTY_FEE_CONVENIENCE: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(e || 0) * Number(sumObj2.AREA_CONVENIENCE || 0)).toFixed(2)),//便利店 + PROPERTY_FEE_AUTOSHOP: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(e || 0) * 0.1 * Number(sumObj2.AREA_AUTOSHOP || 0)).toFixed(2)),//汽修站 + }) + } + }} /> { + let sumObj: any = modalRef.current?.getFieldsValue(["COMPREHENSIVE_PRICE_PER"]) + modalRef.current?.setFieldsValue({ + AREA_OFFER_DINING: Number((Number(sumObj.COMPREHENSIVE_PRICE_PER || 0) * Number(e || 0)).toFixed(2)), + }) + + let sumObj2: any = modalRef.current?.getFieldsValue(["TOTAL_PROPERTY_FEE", "AREA_BUILDING_COMPREHENSIVE"]) + modalRef.current?.setFieldsValue({ + PROPERTY_FEE_DINING: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(sumObj2.AREA_BUILDING_COMPREHENSIVE || 0) * Number(e || 0)).toFixed(2)),//餐饮 + }) + } + }} + tooltip={"最小值为80"} /> { + let sumObj: any = modalRef.current?.getFieldsValue(["COMPREHENSIVE_PRICE_PER"]) + modalRef.current?.setFieldsValue({ + AREA_OFFER_SNACK: Number((Number(sumObj.COMPREHENSIVE_PRICE_PER || 0) * Number(e || 0)).toFixed(2)), + }) + + let sumObj2: any = modalRef.current?.getFieldsValue(["AREA_BUILDING_COMPREHENSIVE", "TOTAL_PROPERTY_FEE"]) + modalRef.current?.setFieldsValue({ + PROPERTY_FEE_SNACK: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(sumObj2.AREA_BUILDING_COMPREHENSIVE || 0) * Number(e || 0)).toFixed(2)),//小吃 + }) + } + }} + tooltip={"最小值为30"} /> { + let sumObj: any = modalRef.current?.getFieldsValue(["COMPREHENSIVE_PRICE_PER"]) + modalRef.current?.setFieldsValue({ + AREA_OFFER_CONVENIENCE: Number((Number(sumObj.COMPREHENSIVE_PRICE_PER || 0) * Number(e || 0)).toFixed(2)), + }) + + let sumObj2: any = modalRef.current?.getFieldsValue(["TOTAL_PROPERTY_FEE", "AREA_BUILDING_COMPREHENSIVE"]) + modalRef.current?.setFieldsValue({ + PROPERTY_FEE_CONVENIENCE: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(sumObj2.AREA_BUILDING_COMPREHENSIVE || 0) * Number(e || 0)).toFixed(2)),//便利店 + }) + } + }} + tooltip={"最小值为50"} /> { + let sumObj2: any = modalRef.current?.getFieldsValue(["TOTAL_PROPERTY_FEE", "AREA_BUILDING_COMPREHENSIVE"]) + modalRef.current?.setFieldsValue({ + PROPERTY_FEE_AUTOSHOP: Number((Number(sumObj2.TOTAL_PROPERTY_FEE || 0) / Number(sumObj2.AREA_BUILDING_COMPREHENSIVE || 0) * 0.1 * Number(e || 0)).toFixed(2)),//汽修站 + }) + } + }} /> 第三方评估测算年保底收益(元) { + let sumObj: any = modalRef.current?.getFieldsValue(["THIRD_GUARANTEE_WATER", "THIRD_GUARANTEE_AUTOSHOP"]) + let sum: number = Number((Number(e || 0) + Number(sumObj.THIRD_GUARANTEE_WATER || 0) + Number(sumObj.THIRD_GUARANTEE_AUTOSHOP || 0)).toFixed(2)) + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + let sumAdd: number = Number((sum * rate * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ + GUARANTEE_TOTAL: sum, + GUARANTEE_INCREASE: sumAdd + }) + } + }} /> { + let sumObj: any = modalRef.current?.getFieldsValue(["THIRD_GUARANTEE_COMPREHENSIVE", "THIRD_GUARANTEE_AUTOSHOP"]) + let sum: number = Number((Number(e || 0) + Number(sumObj.THIRD_GUARANTEE_COMPREHENSIVE || 0) + Number(sumObj.THIRD_GUARANTEE_AUTOSHOP || 0)).toFixed(2)) + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + let sumAdd: number = Number((sum * rate * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ + GUARANTEE_TOTAL: sum, + GUARANTEE_INCREASE: sumAdd + }) + } + }} /> { + let sumObj: any = modalRef.current?.getFieldsValue(["THIRD_GUARANTEE_COMPREHENSIVE", "THIRD_GUARANTEE_WATER"]) + let sum: number = Number((Number(e || 0) + Number(sumObj.THIRD_GUARANTEE_WATER || 0) + Number(sumObj.THIRD_GUARANTEE_COMPREHENSIVE || 0)).toFixed(2)) + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + let sumAdd: number = Number((sum * rate * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ + GUARANTEE_TOTAL: sum, + GUARANTEE_INCREASE: sumAdd + }) + + let repairSum: number = Number((Number(e || 0) * 1.15 * rate).toFixed(2)) + modalRef.current?.setFieldsValue({ AREA_OFFER_AUTOSHOP: repairSum }) + } + }} /> 保底收益一 - - - { + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + let sumAdd: number = Number(((e || 0) * rate * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ + GUARANTEE_INCREASE: sumAdd + }) + } + }} /> - <> - 测算结果 - - - - - - - - - - - - - - - - - - - - - - 面积拆分招商底价(元) - - - - - - - - - - - - - - - - 面积拆分物业费(元) - - - - - - - - - - - - - + + { + let sumObj: any = modalRef.current?.getFieldsValue(["AREA_DINING", "AREA_SNACK", "AREA_CONVENIENCE"]) + modalRef.current?.setFieldsValue({ + AREA_OFFER_DINING: Number((Number(sumObj.AREA_DINING || 0) * Number(e || 0)).toFixed(2)), + AREA_OFFER_SNACK: Number((Number(sumObj.AREA_SNACK || 0) * Number(e || 0)).toFixed(2)), + AREA_OFFER_CONVENIENCE: Number((Number(sumObj.AREA_CONVENIENCE || 0) * Number(e || 0)).toFixed(2)), + }) + } + }} + /> + + + { + let sumObj: any = modalRef.current?.getFieldsValue(["AREA_BUILDING_COMPREHENSIVE"]) + let COMPREHENSIVE_PRICE_PER: number = Number((Number(e || 0) / Number(sumObj.AREA_BUILDING_COMPREHENSIVE || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ + COMPREHENSIVE_PRICE_PER: COMPREHENSIVE_PRICE_PER + }) + let sumObj2: any = modalRef.current?.getFieldsValue(["AREA_DINING", "AREA_SNACK", "AREA_CONVENIENCE"]) + modalRef.current?.setFieldsValue({ + AREA_OFFER_DINING: Number((Number(sumObj2.AREA_DINING || 0) * Number(COMPREHENSIVE_PRICE_PER || 0)).toFixed(2)), + AREA_OFFER_SNACK: Number((Number(sumObj2.AREA_SNACK || 0) * Number(COMPREHENSIVE_PRICE_PER || 0)).toFixed(2)), + AREA_OFFER_CONVENIENCE: Number((Number(sumObj2.AREA_CONVENIENCE || 0) * Number(COMPREHENSIVE_PRICE_PER || 0)).toFixed(2)), + }) + } + }} + /> + + + { + let sumObj: any = modalRef.current?.getFieldsValue(["AREA_BUILDING_COMPREHENSIVE", "AREA_DINING", "AREA_SNACK", "AREA_CONVENIENCE", "AREA_AUTOSHOP"]) + modalRef.current?.setFieldsValue({ + PROPERTY_FEE_DINING: Number((Number(e || 0) / Number(sumObj.AREA_BUILDING_COMPREHENSIVE || 0) * Number(sumObj.AREA_DINING || 0)).toFixed(2)),//餐饮 + PROPERTY_FEE_SNACK: Number((Number(e || 0) / Number(sumObj.AREA_BUILDING_COMPREHENSIVE || 0) * Number(sumObj.AREA_SNACK || 0)).toFixed(2)),//小吃 + PROPERTY_FEE_CONVENIENCE: Number((Number(e || 0) / Number(sumObj.AREA_BUILDING_COMPREHENSIVE || 0) * Number(sumObj.AREA_CONVENIENCE || 0)).toFixed(2)),//便利店 + PROPERTY_FEE_AUTOSHOP: Number((Number(e || 0) / Number(sumObj.AREA_BUILDING_COMPREHENSIVE || 0) * 0.1 * Number(sumObj.AREA_AUTOSHOP || 0)).toFixed(2)),//汽修站 + }) + } + }} + /> + + + 面积拆分招商底价(元) + + + + + + + + + + + + + + + + 面积拆分物业费(元) + + + + + + + + + + + + + 测算结果 + + + + + + + + + + + + : selectedOperatingModel === '保底收益二' ? <> @@ -1239,11 +1856,63 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => { { + let sum: number = Number((Number(e || 0) * 16.89).toFixed(2)) + let sumAdd: number = Number((sum * 1.15).toFixed(2)) + + modalRef.current?.setFieldsValue({ + GROUP_COST_AUTOSHOP: sum, + GROUP_COST_AUTOSHOP_INC: sumAdd + }) + + + let sumObj: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GUARANTEE_INCREASE"]) + // 第一次招商底价 + let firstPrice: number = Math.max(Number(sumObj?.ORIG_RENT_COMPREHENSIVE || 0), Number(sumAdd || 0), Number(sumObj?.GUARANTEE_INCREASE || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj.ORIG_RENT_COMPREHENSIVE || 0), Number(sumAdd || 0), Number(sumObj.GUARANTEE_INCREASE || 0), Number((firstPrice * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: firstPrice, + SECOND_OFFER: res.secondResult, + THIRD_OFFER: res.thirdResult + }) + + let sumObj2: any = modalRef.current?.getFieldsValue(["AREA_BUILDING_COMPREHENSIVE", "TOTAL_PROPERTY_FEE"]) + + let repairPropertySum: number = Number((Number(sumObj2?.TOTAL_PROPERTY_FEE || 0) / Number(sumObj2?.AREA_BUILDING_COMPREHENSIVE || 0) * 0.1 * Number(e || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ + AUTOSHOP_PROPERTY_FEE: repairPropertySum, + }) + } + }} /> 原合同末年租金 + + { + let sumObj: any = modalRef.current?.getFieldsValue(["GROUP_COST_AUTOSHOP_INC", "GUARANTEE_INCREASE"]) + // 第一次招商底价 + let firstPrice: number = Math.max(Number(e || 0), Number(sumObj?.GROUP_COST_AUTOSHOP_INC || 0), Number(sumObj?.GUARANTEE_INCREASE || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(e || 0), Number(sumObj.GROUP_COST_AUTOSHOP_INC || 0), Number(sumObj.GUARANTEE_INCREASE || 0), Number((firstPrice * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: firstPrice, + SECOND_OFFER: res.secondResult, + THIRD_OFFER: res.thirdResult + }) + } + }} + /> + + {/* = (props) => { label={'汽修站'} name={''} /> - + */} 集团公司成本价格 { + let sum: number = Number((e * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ + GROUP_COST_AUTOSHOP_INC: sum + }) + + let sumObj: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GUARANTEE_INCREASE"]) + // 第一次招商底价 + let firstPrice: number = Math.max(Number(sumObj?.ORIG_RENT_COMPREHENSIVE || 0), Number(sum || 0), Number(sumObj?.GUARANTEE_INCREASE || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj.ORIG_RENT_COMPREHENSIVE || 0), Number(sum || 0), Number(sumObj.GUARANTEE_INCREASE || 0), Number((firstPrice * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: firstPrice, + SECOND_OFFER: res.secondResult, + THIRD_OFFER: res.thirdResult + }) + } + }} /> { + let sumObj: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GUARANTEE_INCREASE"]) + // 第一次招商底价 + let firstPrice: number = Math.max(Number(sumObj?.ORIG_RENT_COMPREHENSIVE || 0), Number(e || 0), Number(sumObj?.GUARANTEE_INCREASE || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj.ORIG_RENT_COMPREHENSIVE || 0), Number(e || 0), Number(sumObj.GUARANTEE_INCREASE || 0), Number((firstPrice * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: firstPrice, + SECOND_OFFER: res.secondResult, + THIRD_OFFER: res.thirdResult + }) + } + }} + /> 第三方评估测算年保底收益(元) - - 保底收益二 - - { + let fromRes: any = Number(selectFormData?.SERVERPART_TYPE) + let rate: number = 1.05 + if (fromRes === 1000 || fromRes === 2000) { + rate = 1.15 + } else if (fromRes === 3000) { + rate = 1.1 + } else if (fromRes === 4000) { + rate = 1.05 + } + let sumAdd: number = Number(((e || 0) * rate * 1.15).toFixed(2)) + modalRef.current?.setFieldsValue({ + GUARANTEE_INCREASE: sumAdd + }) + + let sumObj: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GROUP_COST_AUTOSHOP_INC"]) + // 第一次招商底价 + let firstPrice: number = Math.max(Number(sumObj?.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj?.GROUP_COST_AUTOSHOP_INC || 0), Number(sumAdd || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj?.GROUP_COST_AUTOSHOP_INC || 0), Number(sumAdd || 0), Number((firstPrice * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: firstPrice, + SECOND_OFFER: res.secondResult, + THIRD_OFFER: res.thirdResult + }) + } + }} + /> { + let sumObj: any = modalRef.current?.getFieldsValue(["ORIG_RENT_COMPREHENSIVE", "GROUP_COST_AUTOSHOP_INC"]) + // 第一次招商底价 + let firstPrice: number = Math.max(Number(sumObj?.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj?.GROUP_COST_AUTOSHOP_INC || 0), Number(e || 0)) + // 拿到第二次和第三次的招商底价方法 + let res: any = handleCalcSecondThirdLowPrice(Number(sumObj.ORIG_RENT_COMPREHENSIVE || 0), Number(sumObj?.GROUP_COST_AUTOSHOP_INC || 0), Number(e || 0), Number((firstPrice * 0.9).toFixed(2))) + modalRef.current?.setFieldsValue({ + FIRST_OFFER: firstPrice, + SECOND_OFFER: res.secondResult, + THIRD_OFFER: res.thirdResult + }) + } + }} /> - <> - 招商底价(元) - - - - - - - - - - 测算结果 - - - - - - - - - - - - - - - - - - - + 招商底价(元) + + + + + + + + + + 测算结果 + + { + let sumObj: any = modalRef.current?.getFieldsValue(["AREA_AUTOSHOP", "AREA_BUILDING_COMPREHENSIVE"]) + + let repairPropertySum: number = Number((Number(e || 0) / Number(sumObj?.AREA_BUILDING_COMPREHENSIVE || 0) * 0.1 * Number(sumObj?.AREA_AUTOSHOP || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ + AUTOSHOP_PROPERTY_FEE: repairPropertySum, + }) + + } + }} + /> + + + { + let sumObj: any = modalRef.current?.getFieldsValue(["AREA_AUTOSHOP", "TOTAL_PROPERTY_FEE"]) + + let repairPropertySum: number = Number((Number(sumObj?.TOTAL_PROPERTY_FEE || 0) / Number(e || 0) * 0.1 * Number(sumObj?.AREA_AUTOSHOP || 0)).toFixed(2)) + modalRef.current?.setFieldsValue({ + AUTOSHOP_PROPERTY_FEE: repairPropertySum, + }) + + } + }} + /> + + + + + + + + + + + + + : <> - } diff --git a/src/pages/operationReport/service.ts b/src/pages/operationReport/service.ts index b9ec379..e1088a9 100644 --- a/src/pages/operationReport/service.ts +++ b/src/pages/operationReport/service.ts @@ -126,4 +126,49 @@ export async function handlGetSPCONTRIBUTIONList(params: any) { } return data.Result_Data.List +} + + +// 租金测算的同步接口 +export async function handlSynchroRENTCALCULATION(params: any) { + const data = await requestOld(`/Analysis/SynchroRENTCALCULATION`, { + method: 'POST', + data: params + }) + + if (data.Result_Code !== 100) { + return data + } + + return data +} + + +// 租金测算的列表接口 +export async function handlGetRENTCALCULATIONList(params: any) { + const data = await requestOld(`/Analysis/GetRENTCALCULATIONList`, { + method: 'POST', + data: params + }) + + if (data.Result_Code !== 100) { + return data + } + + return data.Result_Data.List +} + + +// 租金测算的列表接口 +export async function handlGetDeleteRENTCALCULATION(params: any) { + const data = await requestOld(`/Analysis/DeleteRENTCALCULATION`, { + method: 'POST', + data: params + }) + + if (data.Result_Code !== 100) { + return data + } + + return data } \ No newline at end of file diff --git a/src/pages/redReversal/components/InvoiceDetial.tsx b/src/pages/redReversal/components/InvoiceDetial.tsx index 2a325c2..53ed170 100644 --- a/src/pages/redReversal/components/InvoiceDetial.tsx +++ b/src/pages/redReversal/components/InvoiceDetial.tsx @@ -1,11 +1,12 @@ import React, { useEffect, useRef, useState } from "react"; import ProForm, { ProFormSelect, ProFormText, ProFormTextArea } from "@ant-design/pro-form"; -import { Col, Drawer, FormInstance, Row, Table, Typography, Space, Button, Empty, Divider } from "antd"; +import { Col, Drawer, FormInstance, Row, Table, Typography, Space, Button, Empty, Divider, Input, message } from "antd"; import { connect } from "umi"; -import { ProTable } from "@ant-design/pro-components"; -import { handleGetAPPLYAPPROVEList, handleGetBILLDETAILList } from "@/pages/DigitalElectronics/service"; +import { ActionType, ProTable } from "@ant-design/pro-components"; +import { handleGetAPPLYAPPROVEList, handleGetBILLDETAILList, handleSynchroBILLDETAILList } from "@/pages/DigitalElectronics/service"; import moment from "moment"; import { encryptAES } from "@/utils/handleAes"; +import { exportXlsxFromProColumnsExcelJS } from "@/utils/exportExcelFun"; const { Text } = Typography; @@ -23,6 +24,9 @@ interface ParamsType { const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: ParamsType) => { const formRef = useRef>(); + const detailActionRef = useRef(); + // 保存的加载效果 + const [saveLoading, setSaveLoading] = useState(false) // 明细表格默认隐藏的内容 const [columnsStateMap, setColumnsStateMap] = useState({ INVOICE_PRICE: { show: false }, @@ -37,30 +41,49 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P } } }, [parentRow]); + const [reqDetailList, setReqDetailList] = useState(); // 合计项数据源 + // 判断是否进入了编辑状态 + const [isEdit, setIsEdit] = useState(false); + // 表格数据 + const [tableEditData, setTableEditData] = useState(); const detailColumns: any = [ { title:
款项名称
, - align: 'center', - width: 150, - dataIndex: "ITEM_NAME" + align: 'left', + width: 250, + dataIndex: "ITEM_NAME", + ellipsis: true }, { title:
税务代码
, - align: 'center', - width: 150, - dataIndex: "TABLE_NAME" + align: 'left', + width: 200, + dataIndex: "TABLE_NAME", + render: (_, record) => { + return isEdit ? { + console.log('eee', e); + let value: string = e.target.value || "" + let tableData: any = JSON.parse(JSON.stringify(tableEditData)) + tableData.forEach((item: any) => { + if (item.BILLDETAIL_ID === record.BILLDETAIL_ID) { + item.TABLE_NAME = value + } + }) + setTableEditData(tableData) + }} /> : record.TABLE_NAME + } }, { title:
商品条码
, align: 'center', - width: 150, + width: 120, dataIndex: "ITEM_ID" }, { title:
规格型号
, align: 'center', - width: 150, + width: 120, dataIndex: "ITEM_RULE" }, { @@ -79,21 +102,21 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P { title:
单价
, align: 'right', - width: 80, + width: 120, valueType: 'digit', dataIndex: "INVOICE_PRICE" }, { title:
金额
, align: 'right', - width: 80, + width: 120, valueType: 'digit', dataIndex: "INVOICE_AMOUNT" }, { title:
税率
, align: 'center', - width: 80, + width: 120, dataIndex: "DUTY_PARAGRAPH", render: (_, record) => { return record?.DUTY_PARAGRAPH ? `${record?.DUTY_PARAGRAPH}%` : "" @@ -102,14 +125,14 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P { title:
税额
, align: 'right', - width: 80, + width: 120, valueType: 'digit', dataIndex: "INVOICE_TAX" }, { title:
折扣
, align: 'center', - width: 80, + width: 120, dataIndex: "INVOICE_DISCOUNT" }, // { @@ -170,6 +193,26 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P } ]; + // 保存税务代码触发的事件 + const handleSaveTaxCode = async () => { + // 当前的表格数据 + console.log('tableEditDatatableEditDatatableEditData', tableEditData); + + let newreqResult: any = { + name: "", + value: encryptAES(JSON.stringify({ list: tableEditData })) + } + setSaveLoading(true) + const data = await handleSynchroBILLDETAILList(newreqResult) + setSaveLoading(false) + if (data.Result_Code === 100) { + message.success('同步成功!') + setIsEdit(false) + detailActionRef.current?.reload() + } else { + message.error(data.Result_Desc) + } + } return ( { setShowDetail(false); setParentRow(undefined); + setIsEdit(false) + setTableEditData(null) }} bodyStyle={{ padding: '0 24px 24px' }} destroyOnClose @@ -293,9 +338,11 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P 发票明细 { console.log('parentRowparentRowparentRow', parentRow); const billDetail = await handleGetBILLDETAILList({ @@ -309,6 +356,8 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P console.log('billDetailbillDetailbillDetail', billDetail); if (billDetail && billDetail.length > 0) { + setTableEditData(billDetail) + setReqDetailList(billDetail) return { data: billDetail, success: true } } return { data: [], success: true } @@ -317,6 +366,39 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P value: columnsStateMap, onChange: setColumnsStateMap, }} + toolbar={{ + actions: [ + <> + { + isEdit && parentRow?.BILL_STATE < 9000 ? + <> + + + : + + } + + , + + ] + }} /> diff --git a/src/utils/exportExcelFun.ts b/src/utils/exportExcelFun.ts new file mode 100644 index 0000000..df6ee58 --- /dev/null +++ b/src/utils/exportExcelFun.ts @@ -0,0 +1,377 @@ +// exportExcel.ts +import ExcelJS from 'exceljs'; + +/** ======== 列类型(按需裁剪) ======== */ +type AnyCol = { + title?: any; + dataIndex?: string | (string | number)[]; + children?: AnyCol[]; + valueEnum?: Record; + renderText?: (text: any, record: any, index: number) => any; + hideInTable?: boolean; + valueType?: 'index' | string; + align?: 'left' | 'center' | 'right'; +}; + +/** ========== 新增:拍平树形数据 ========== */ +function flattenTree>( + list: T[] = [], + childrenKey = 'children', + out: T[] = [] +): T[] { + for (const node of list) { + // 先推当前节点(浅拷贝去掉 children,避免把对象树写入单元格) + const { [childrenKey]: kids, ...rest } = node as any; + out.push(rest as T); + if (Array.isArray(kids) && kids.length) { + flattenTree(kids, childrenKey, out); + } + } + return out; +} + +/** 抽取 React 节点文本 */ +function extractText(node: any): string { + if (node == null || node === false) return ''; + if (typeof node === 'string' || typeof node === 'number') return String(node); + const children = node?.props?.children; + if (Array.isArray(children)) return children.map(extractText).join(''); + if (children != null) return extractText(children); + const html = node?.props?.dangerouslySetInnerHTML?.__html; + if (typeof html === 'string') return html.replace(/<[^>]+>/g, ''); + return String(node ?? ''); +} + +/** dataIndex 路径取值 */ +const toPath = (di?: AnyCol['dataIndex']): (string | number)[] => + Array.isArray(di) ? di : (typeof di === 'string' ? di.split('.') : []); +const getByPath = (obj: any, path: (string | number)[]) => + path.reduce((acc, k) => (acc == null ? acc : acc[k]), obj); + +/** 支持 A|B 或逻辑的取值 */ +const getValueWithOr = (obj: any, dataIndex?: AnyCol['dataIndex']): any => { + if (!dataIndex) return undefined; + + // 如果是数组,直接使用原逻辑 + if (Array.isArray(dataIndex)) { + return getByPath(obj, dataIndex); + } + + // 如果是字符串,检查是否包含 | 符号 + if (typeof dataIndex === 'string') { + if (dataIndex.includes('|')) { + // 分割并按优先级取值 + const keys = dataIndex.split('|').map(key => key.trim()); + for (const key of keys) { + const value = getByPath(obj, toPath(key)); + if (value != null && value !== '') { + return value; + } + } + return null; + } else { + // 普通路径,使用原逻辑 + return getByPath(obj, toPath(dataIndex)); + } + } + + return undefined; +}; + +/** 过滤 hideInTable(父级联动) */ +function pruneHiddenColumns(cols: AnyCol[]): AnyCol[] { + const walk = (arr: AnyCol[]): AnyCol[] => + (arr || []) + .filter(col => !col?.hideInTable) + .map(col => { + if (col.children?.length) { + const kids = walk(col.children); + if (!kids.length) return null as any; + return { ...col, children: kids }; + } + return col; + }) + .filter(Boolean); + return walk(cols); +} + +/** 叶子列(有 dataIndex 的) */ +const getLeaves = (cols: AnyCol[]): AnyCol[] => { + const out: AnyCol[] = []; + const walk = (arr: AnyCol[]) => { + arr.forEach(c => { + if (c?.children?.length) { + walk(c.children!); + } else if (c && (c.dataIndex || c.valueType === 'index')) { // << 修改 + out.push(c); + } + }); + }; + walk(cols); + return out; +}; + +/** 深度和列跨度 */ +const getDepth = (cols: AnyCol[]): number => { + const dfs = (c: AnyCol): number => + c.children?.length ? 1 + Math.max(...c.children.map(dfs)) : 1; + return Math.max(...cols.map(dfs)); +}; +const getColSpan = (c: AnyCol): number => + c.children?.length ? c.children.map(getColSpan).reduce((a, b) => a + b, 0) : 1; + +/** 构造多级表头矩阵 & 合并信息(不含顶部大标题/信息行) */ +function buildHeaderMatrix(cols: AnyCol[]) { + const depth = getDepth(cols); + const rows: string[][] = Array.from({ length: depth }, () => []); + let colCursor = 0; + const merges: Array<{ r1: number; c1: number; r2: number; c2: number }> = []; + + const place = (list: AnyCol[], level: number) => { + list.forEach(col => { + const span = getColSpan(col); + const rowSpan = col.children?.length ? 1 : depth - level; + const title = extractText(col.title ?? ''); + + rows[level][colCursor] = title; + for (let i = 1; i < span; i++) rows[level][colCursor + i] = ''; + + if (span > 1 || rowSpan > 1) { + merges.push({ r1: level + 1, c1: colCursor + 1, r2: level + rowSpan, c2: colCursor + span }); + } + + if (col.children?.length) { + place(col.children, level + 1); + } else { + colCursor += 1; + } + }); + }; + + place(cols, 0); + const maxLen = Math.max(...rows.map(r => r.length)); + rows.forEach(r => { for (let i = 0; i < maxLen; i++) if (typeof r[i] === 'undefined') r[i] = ''; }); + return { headerAOA: rows, merges, depth, columnCount: maxLen }; +} + +/** 单元格显示值(valueEnum / renderText / 原始值) */ +function getCellValue(col: AnyCol, record: any, rowIndex: number) { + // << 新增:序号列 + if (col.valueType === 'index') return rowIndex + 1; + + const raw = getValueWithOr(record, col.dataIndex); + if (col.valueEnum) { + const ve = col.valueEnum[raw as any]; + if (typeof ve === 'string') return ve; + if (ve?.text != null) return ve.text; + } + if (col.renderText) { + try { return col.renderText(raw, record, rowIndex); } catch { } + } + return raw; +} + +/** 估算列宽(简单) */ +const estimateWidth = (v: any) => { + const s = (v ?? '').toString(); + const len = Array.from(s).reduce((n, ch) => n + (/[^\x00-\xff]/.test(ch) ? 2 : 1), 0); + return Math.min(Math.max(len + 2, 8), 60); +}; + +export async function exportXlsxFromProColumnsExcelJS( + rawColumns: AnyCol[], + dataSource: any[], + filename?: string, + options?: { + sheetName?: string; + chunkSize?: number; + topTitle?: string; + infoRowLeft?: string; + infoRowRight?: string; + freezeHeader?: boolean; // 已保留但默认不再生效(不触发冻结) + childrenKey?: string; + + // 底部信息 + footerMaker?: any; + footerMakerTime?: any; + footerStatsTime?: any; + } +) { + const { + sheetName = '数据', + chunkSize = 100_000, + topTitle, + infoRowLeft, + infoRowRight, + // 为兼容外部调用保留字段,但默认不做冻结以满足你的要求 + freezeHeader = false, + childrenKey = 'children', + footerMaker, + footerMakerTime, + footerStatsTime, + } = options || {}; + + const flatData = flattenTree(Array.isArray(dataSource) ? dataSource : [], childrenKey); + + const columns = pruneHiddenColumns(rawColumns); + const leafCols = getLeaves(columns); + if (!leafCols.length) throw new Error('无可导出的列(可能被 hideInTable 全部隐藏)'); + + const { headerAOA, merges, columnCount } = buildHeaderMatrix(columns); + + const wb = new ExcelJS.Workbook(); + wb.created = new Date(); + wb.modified = new Date(); + + const total = flatData?.length ?? 0; + const totalSheets = Math.max(1, Math.ceil(total / chunkSize)); + + for (let si = 0; si < totalSheets; si++) { + // 注意:不再传 views 配置,避免任何默认冻结 + const ws = wb.addWorksheet(totalSheets === 1 ? sheetName : `${sheetName}_${si + 1}`); + + let currentRowIndex = 1; + + // 顶部标题 + if (topTitle) { + const row = ws.getRow(currentRowIndex); + row.getCell(1).value = topTitle; + ws.mergeCells(currentRowIndex, 1, currentRowIndex, columnCount); + const cell = ws.getCell(currentRowIndex, 1); + cell.alignment = { horizontal: 'center', vertical: 'middle' }; + cell.font = { bold: true, size: 14 }; + row.height = 22; + currentRowIndex += 1; + } + + // 信息行 + if (infoRowLeft != null || infoRowRight != null) { + const row = ws.getRow(currentRowIndex); + const split = Math.max(1, Math.floor(columnCount / 2)); + if (infoRowLeft != null) { + row.getCell(1).value = infoRowLeft; + ws.mergeCells(currentRowIndex, 1, currentRowIndex, split); + const leftCell = ws.getCell(currentRowIndex, 1); + leftCell.alignment = { horizontal: 'left', vertical: 'middle' }; + leftCell.font = { size: 11 }; + } + if (infoRowRight != null) { + row.getCell(split + 1).value = infoRowRight; + ws.mergeCells(currentRowIndex, split + 1, currentRowIndex, columnCount); + const rightCell = ws.getCell(currentRowIndex, split + 1); + rightCell.alignment = { horizontal: 'right', vertical: 'middle' }; + rightCell.font = { size: 11 }; + } + row.height = 18; + currentRowIndex += 1; + } + + // 表头(保持原有样式与合并) + const headerStartRow = currentRowIndex; + headerAOA.forEach((r, idx) => { + const row = ws.getRow(headerStartRow + idx); + r.forEach((v, cIdx) => { + const cell = row.getCell(cIdx + 1); + cell.value = v; + cell.alignment = { horizontal: 'center', vertical: 'middle' }; + cell.font = { bold: true }; + }); + row.height = 18; + }); + merges.forEach(m => { + ws.mergeCells(headerStartRow + (m.r1 - 1), m.c1, headerStartRow + (m.r2 - 1), m.c2); + }); + currentRowIndex += headerAOA.length; + + // 数据区 + const start = si * chunkSize; + const end = Math.min(start + chunkSize, total); + const batch = flatData.slice(start, end); + + for (let i = 0; i < batch.length; i++) { + const rec = batch[i]; + const row = ws.getRow(currentRowIndex + i); + leafCols.forEach((col, j) => { + const cell = row.getCell(j + 1); + const v = getCellValue(col, rec, start + i); + cell.value = v; + if (col.align) cell.alignment = { horizontal: col.align, vertical: 'middle' }; + }); + } + currentRowIndex += batch.length; + + // 列宽估算 + const sampleRows = Math.min(batch.length, 200); + for (let c = 1; c <= columnCount; c++) { + const headerMax = Math.max(...headerAOA.map(r => estimateWidth(r[c - 1]))); + let dataMax = 8; + for (let i = 0; i < sampleRows; i++) { + const v = leafCols[c - 1] ? getCellValue(leafCols[c - 1], batch[i], start + i) : ''; + dataMax = Math.max(dataMax, estimateWidth(v)); + } + ws.getColumn(c).width = Math.max(headerMax, dataMax); + } + + // 注意:不再对 ws.views 进行任何设置(避免冻结表头) + // if (freezeHeader) { ... } // 已移除 + + // 底部三项(同一行 + 平均分列 + 直接显示“标题:值”) + if (footerMaker != null || footerMakerTime != null || footerStatsTime != null) { + currentRowIndex += 1; + const footerRow = ws.getRow(currentRowIndex); + + const items = [ + `制单人员:${footerMaker ?? ''}`, + `制单时间:${footerMakerTime ?? ''}`, + `统计时间:${footerStatsTime ?? ''}`, + ]; + + const groups = 3; + const base = Math.floor(columnCount / groups); + let remainder = columnCount - base * groups; + const sizes: number[] = []; + for (let g = 0; g < groups; g++) { + sizes.push(base + (remainder > 0 ? 1 : 0)); + if (remainder > 0) remainder -= 1; + } + if (columnCount < groups) { + for (let g = 0; g < groups; g++) sizes[g] = 0; + for (let k = 0; k < columnCount; k++) sizes[k] = 1; + } + + let colCursor = 1; + for (let g = 0; g < groups; g++) { + const segSize = sizes[g]; + if (segSize <= 0) continue; + const startCol = colCursor; + const endCol = colCursor + segSize - 1; + + if (endCol > startCol) ws.mergeCells(currentRowIndex, startCol, currentRowIndex, endCol); + + const cell = footerRow.getCell(startCol); + cell.value = items[g]; + cell.alignment = { horizontal: 'left', vertical: 'middle' }; + cell.font = { size: 11 }; + + colCursor += segSize; + } + + footerRow.height = 18; + currentRowIndex += 1; + } + } + + // 生成并触发下载 + const buf = await wb.xlsx.writeBuffer(); + const blob = new Blob([buf], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `${filename || sheetName}.xlsx`; + a.click(); + setTimeout(() => URL.revokeObjectURL(url), 1000); +} + + diff --git a/yarn.lock b/yarn.lock index f6a1913..51edb6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1883,6 +1883,31 @@ "@eslint/core" "^0.12.0" levn "^0.4.1" +"@fast-csv/format@4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" + integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.isboolean "^3.0.3" + lodash.isequal "^4.5.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + +"@fast-csv/parse@4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" + integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.groupby "^4.6.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + lodash.isundefined "^3.0.1" + lodash.uniq "^4.5.0" + "@floating-ui/core@^0.6.2": version "0.6.2" resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-0.6.2.tgz#f2813f0e5f3d5ed7af5029e1a082203dadf02b7d" @@ -2691,6 +2716,11 @@ dependencies: undici-types "~6.20.0" +"@types/node@^14.0.1": + version "14.18.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== + "@types/normalize-package-data@^2.4.0": version "2.4.4" resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -3668,6 +3698,51 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver-utils@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7" + integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== + dependencies: + glob "^7.2.3" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +archiver@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.4" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.1.2" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3813,6 +3888,11 @@ async-function@^1.0.0: resolved "https://registry.npmmirror.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== +async@^3.2.4: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3994,12 +4074,12 @@ balanced-match@^2.0.0: resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big-integer@^1.6.44: +big-integer@^1.6.17, big-integer@^1.6.44: version "1.6.52" resolved "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== @@ -4014,6 +4094,28 @@ binary-extensions@^2.0.0: resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.1" resolved "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" @@ -4161,11 +4263,21 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + buffer-okam@^4.3.0: version "4.9.2" resolved "https://registry.npmmirror.com/buffer-okam/-/buffer-okam-4.9.2.tgz#63225572fbf6626dc1225736068b0720f4f360b0" @@ -4189,6 +4301,19 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== + builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" @@ -4288,6 +4413,13 @@ cfb@>=0.10.0, cfb@~1.2.1: adler-32 "~1.3.0" crc-32 "~1.2.0" +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== + dependencies: + traverse ">=0.3.0 <0.4" + chalk@4, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -4465,6 +4597,16 @@ common-path-prefix@^3.0.0: resolved "https://registry.npmmirror.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== +compress-commons@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df" + integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + compressible@~2.0.18: version "2.0.18" resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -4628,11 +4770,19 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -crc-32@, crc-32@~1.2.0, crc-32@~1.2.1: +crc-32@, crc-32@^1.2.0, crc-32@~1.2.0, crc-32@~1.2.1: version "1.2.2" resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== +crc32-stream@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33" + integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + create-ecdh@^4.0.4: version "4.0.4" resolved "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -4860,6 +5010,11 @@ dayjs@^1.11.10, dayjs@^1.11.11, dayjs@^1.11.7: resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== +dayjs@^1.8.34: + version "1.11.19" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" + integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== + debug@2.6.9: version "2.6.9" resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -5112,6 +5267,13 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + duplexify@^4.1.2: version "4.1.3" resolved "https://registry.npmmirror.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" @@ -5871,6 +6033,21 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exceljs@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.4.0.tgz#cfb1cb8dcc82c760a9fc9faa9e52dadab66b0156" + integrity sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg== + dependencies: + archiver "^5.0.0" + dayjs "^1.8.34" + fast-csv "^4.3.1" + jszip "^3.10.1" + readable-stream "^3.6.0" + saxes "^5.0.1" + tmp "^0.2.0" + unzipper "^0.10.11" + uuid "^8.3.0" + execa@^4.0.0: version "4.1.0" resolved "https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -5969,6 +6146,14 @@ ext@^1.7.0: dependencies: type "^2.7.2" +fast-csv@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" + integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== + dependencies: + "@fast-csv/format" "4.3.5" + "@fast-csv/parse" "4.3.6" + fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -6212,6 +6397,11 @@ fresh@0.5.2: resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -6236,6 +6426,16 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -6363,7 +6563,7 @@ glob@^10.2.5: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6457,7 +6657,7 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -6728,7 +6928,7 @@ identity-obj-proxy@3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6743,6 +6943,11 @@ image-size@~0.5.0: resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + immer@^8.0.4: version "8.0.4" resolved "https://registry.npmmirror.com/immer/-/immer-8.0.4.tgz#3a21605a4e2dded852fb2afd208ad50969737b7a" @@ -6796,7 +7001,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7439,6 +7644,16 @@ jszip@2.4.0: dependencies: pako "~0.2.5" +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + keyv@^4.5.3, keyv@^4.5.4: version "4.5.4" resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -7466,6 +7681,13 @@ kolorist@^1.6.0: resolved "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + lcid@^3.0.0: version "3.1.1" resolved "https://registry.npmmirror.com/lcid/-/lcid-3.1.1.tgz#9030ec479a058fc36b5e8243ebaac8b6ac582fd0" @@ -7522,6 +7744,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lightningcss-darwin-arm64@1.22.1: version "1.22.1" resolved "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz#c03c042335fd7e9e1f45c977b39ff6886b8b064f" @@ -7589,6 +7818,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== + loader-utils@^2.0.4: version "2.0.4" resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" @@ -7627,6 +7861,61 @@ lodash.debounce@^4.0.8: resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.groupby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" + integrity sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + +lodash.isnil@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" + integrity sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isundefined@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" + integrity sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -7642,6 +7931,16 @@ lodash.truncate@^4.4.2: resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -7895,6 +8194,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4: version "9.0.5" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -7911,11 +8217,23 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +"mkdirp@>=0.5 0": + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + moment@^2.29.4, moment@^2.30.1: version "2.30.1" resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" @@ -8354,7 +8672,7 @@ pako@~0.2.5: resolved "https://registry.npmmirror.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== -pako@~1.0.5: +pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -9720,7 +10038,7 @@ read-pkg@^6.0.0: parse-json "^5.2.0" type-fest "^1.0.1" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.8: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -9733,7 +10051,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.3.3, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -9742,6 +10060,13 @@ readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -9956,6 +10281,13 @@ reusify@^1.0.4: resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0" @@ -10069,6 +10401,13 @@ sax@^1.2.4: resolved "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.23.2: version "0.23.2" resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -10182,7 +10521,7 @@ set-proto@^1.0.0: es-errors "^1.3.0" es-object-atoms "^1.0.0" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== @@ -10870,6 +11209,17 @@ tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1: resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + terser@^5.10.0: version "5.39.0" resolved "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a" @@ -10933,6 +11283,11 @@ titleize@^3.0.0: resolved "https://registry.npmmirror.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== +tmp@^0.2.0: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -10960,6 +11315,11 @@ toidentifier@1.0.1: resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== + trim-newlines@^4.0.2: version "4.1.1" resolved "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-4.1.1.tgz#28c88deb50ed10c7ba6dc2474421904a00139125" @@ -11184,6 +11544,22 @@ untildify@^4.0.0: resolved "https://registry.npmmirror.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== +unzipper@^0.10.11: + version "0.10.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" + integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + update-browserslist-db@^1.1.1: version "1.1.2" resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" @@ -11273,6 +11649,11 @@ utils-merge@1.0.1: resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -11535,6 +11916,11 @@ xlsx@^0.18.5: wmf "~1.0.1" word "~0.3.0" +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@^4.0.0: version "4.0.2" resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -11618,6 +12004,15 @@ yocto-queue@^0.1.0: resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zip-stream@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135" + integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== + dependencies: + archiver-utils "^3.0.4" + compress-commons "^4.1.2" + readable-stream "^3.6.0" + zod-validation-error@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/zod-validation-error/-/zod-validation-error-2.1.0.tgz#208eac75237dfed47c0018d2fe8fd03501bfc9ac"