diff --git a/src/api/oa/erp/budgetInfo/index.ts b/src/api/oa/erp/budgetInfo/index.ts index f603184..afb9e44 100644 --- a/src/api/oa/erp/budgetInfo/index.ts +++ b/src/api/oa/erp/budgetInfo/index.ts @@ -121,3 +121,15 @@ export const listMaterialInfo = (query?: MaterialInfoQuery): AxiosPromise -
+
- - - - - - - - - - - - - + + + + + + + + + + + @@ -55,7 +53,10 @@ - + + + + - - - - + - - - - + - - + + - + - + + + + @@ -190,7 +188,14 @@ + + diff --git a/src/views/oa/erp/budgetInfo/rd/BudgetTable.vue b/src/views/oa/erp/budgetInfo/rd/BudgetTable.vue index ca10cbe..914a85f 100644 --- a/src/views/oa/erp/budgetInfo/rd/BudgetTable.vue +++ b/src/views/oa/erp/budgetInfo/rd/BudgetTable.vue @@ -1,7 +1,5 @@ diff --git a/src/views/oa/erp/budgetInfo/rd/EquipmentCost.vue b/src/views/oa/erp/budgetInfo/rd/EquipmentCost.vue deleted file mode 100644 index ccade65..0000000 --- a/src/views/oa/erp/budgetInfo/rd/EquipmentCost.vue +++ /dev/null @@ -1,261 +0,0 @@ - - - - - diff --git a/src/views/oa/erp/budgetInfo/rd/LaborService.vue b/src/views/oa/erp/budgetInfo/rd/LaborService.vue index f8c9acd..ed6f57e 100644 --- a/src/views/oa/erp/budgetInfo/rd/LaborService.vue +++ b/src/views/oa/erp/budgetInfo/rd/LaborService.vue @@ -1,205 +1,5 @@ - + - - -
- 人工费合计: {{ formatNumber(laborTotal) }} 万元 -
-
- - - -
-

劳务费预算明细表

-
- 行数: - - - - - - 添加 - - - - - - 删除 - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 劳务费合计: {{ formatNumber(serviceTotal) }} 万元 +
+

注: 人工费的预算,人工标准,各项目组按照成员的大概平均工资水平进行估算。表格所给数据为建议参考数据。

+

        人员类别,按照各项目实际情况填写。如,产品不在本公司内加工和组装的,生产加工费已经核算在外协件里,不再有生产加工费。

@@ -374,16 +84,7 @@ - - diff --git a/src/views/oa/erp/budgetInfo/rd/MaterialCost.vue b/src/views/oa/erp/budgetInfo/rd/MaterialCost.vue index 4bead70..34dd3ed 100644 --- a/src/views/oa/erp/budgetInfo/rd/MaterialCost.vue +++ b/src/views/oa/erp/budgetInfo/rd/MaterialCost.vue @@ -22,12 +22,17 @@
- - + + + + + @@ -41,25 +46,12 @@ default-first-option style="width: 100%" clearable - v-if="scope.row.materialType === MATERIAL_TYPE.MAIN" > - - - + - - + + + + + + + + @@ -131,11 +120,8 @@
--> -
-
- 主要材料费小计: {{ format2TenThousandNumber(mainMaterialTotalAmount) }} 万元 - 合计: {{ formatNumber(totalAmount) }} 万元 -
+
+

填写说明:指研究开发活动过程中投入的各种半成品、原材料、辅助材料等费用。(半成品:包括自制半成品、外协加工件。原材料:外购件、带料外协的外购件。辅助材料:现场使用的耗材)

@@ -153,34 +139,11 @@ const props = defineProps<{ projectId: string; }>(); -const MATERIAL_TYPE = { - MAIN: '1', //主要材料费 - OTHER: '2' //其他材料费 -}; // 材料费数据 const materialData = ref([]); const toDeletedMaterialCostIdList = ref([]); -// 其他材料费 -const otherMaterialData = ref(); - -const defaultOtherMaterial = ref({ - sortOrder: 1, - materialName: '其他材料费', - materialType: MATERIAL_TYPE.OTHER, - unitId: undefined, - unitPrice: undefined, - amount: undefined, - price: 0 -}); -// 响应式数据 -const otherMaterial = ref(defaultOtherMaterial); - -// 合并所有材料数据(主要材料 + 其他材料) -const allMaterialData = computed(() => { - return [...materialData.value, otherMaterial.value]; -}); const unitOptions = ref([]); @@ -188,13 +151,12 @@ const unitOptions = ref([]); // const unitOptions = ref(['kg', 'g', 't', 'm', 'cm', 'mm', 'm²', 'm³', '个', '件', '套', '批', '箱', '袋', '瓶', '小时', '天', '月', '年', '次']); // 总金额和总数量 -const totalAmount = ref(0); const totalQuantity = ref(0); // 主要材料费合计(排除其他材料费) -const mainMaterialTotalAmount = computed(() => { - return materialData.value.reduce((sum, item) => sum + (Number(item.price) || 0), 0); -}); +// const totalAmount = computed(() => { +// return materialData.value.reduce((sum, item) => sum + (Number(item.price) || 0), 0); +// }); // 选中的行 const selectedRows = ref([]); @@ -214,31 +176,6 @@ const format2TenThousandNumber = (value: number) => { return (parseFloat(value) / 10000).toFixed(2); }; -const checkSelectable = (row: rdBudgetMaterialCostVO, index: number) => { - return row.materialType === MATERIAL_TYPE.MAIN; -}; - -// 监听 otherMaterialData 的变化 -watch( - otherMaterialData, - (newVal) => { - if (newVal) { - otherMaterial.value = newVal; - } else { - otherMaterial.value = defaultOtherMaterial.value; - } - }, - { immediate: true } -); // immediate: true 立即执行一次 - -// 监听材料数据变化,更新总合计 -watch( - () => [materialData, otherMaterial], - () => { - calculateTotal(); - }, - { deep: true } -); // 添加指定行数 const addSpecifiedRows = async () => { @@ -253,14 +190,13 @@ const addSpecifiedRows = async () => { materialData.value.push({ sortOrder: currentSortOrder + i + 1, materialName: '', - materialType: MATERIAL_TYPE.MAIN, + materialType: '', unitId: undefined, unitPrice: undefined, amount: undefined, price: 0 }); } - otherMaterial.value.sortOrder = currentSortOrder + 1 + addRowCount.value; // 等待DOM更新后滚动到底部 await nextTick(); scrollToBottom(); @@ -290,8 +226,6 @@ const handleDelete = (index: number, row: rdBudgetMaterialCostVO) => { if (row.materialCostId) { toDeletedMaterialCostIdList.value.push(row.materialCostId); } - otherMaterial.value.sortOrder = otherMaterial.value.sortOrder - 1; - calculateTotal(); }; // 批量删除 @@ -311,8 +245,6 @@ const handleBatchDelete = () => { materialData.value.forEach((item, index) => { item.sortOrder = index + 1; }); - otherMaterial.value.sortOrder = otherMaterial.value.sortOrder - selectedRows.value.length; - calculateTotal(); selectedRows.value = []; }; @@ -322,24 +254,44 @@ const calculateAmount = () => { materialData.value.forEach((item) => { item.price = (item.amount || 0) * (item.unitPrice || 0); }); - - // 计算其他材料金额 - // otherMaterial.value.price = (otherMaterial.value.amount || 0) * (otherMaterial.value.unitPrice || 0); - - // 计算总金额 - calculateTotal(); }; -// 计算总金额和总数量 -const calculateTotal = () => { - const mainAmount = parseFloat(((Number(mainMaterialTotalAmount.value) || 0) / 10000).toFixed(2)); - const otherAmount = parseFloat((Number(otherMaterial.value.price) || 0).toFixed(2)); - totalAmount.value = (mainAmount + otherAmount).toFixed(2); -}; +// 合计方法 +const getSummaries = (param: any) => { + const { columns, data } = param; + const sums: any[] = []; + columns.forEach((column: any, index: number) => { + if (index === 2) { + sums[index] = '合计(万元)'; + return; + } + if (column.property === 'price') { + const values = data.map((item: any) => Number(item[column.property])); + if (!values.every((value: number) => Number.isNaN(value))) { + sums[index] = values.reduce((prev: number, curr: number) => { + const value = Number(curr) + if (!Number.isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0); + sums[index] = formatNumber(sums[index]); + } else { + sums[index] = ''; + } + } else { + sums[index] = ''; + } + }); + return sums; +} + // 获取总金额(供父组件调用) const getTotalAmount = () => { - return (Number(totalAmount.value) || 0) * 10000; + const totalAmount = materialData.value.reduce((sum, item) => sum + Number(item.price), 0) + return totalAmount * 10000; }; // 获取单位列表 @@ -361,32 +313,13 @@ const refreshData = () => { // 重置数据 const resetData = () => { materialData.value.splice(0, materialData.value.length); - totalAmount.value = 0; totalQuantity.value = 0; - - // 重置其他材料费 - // otherMaterial.unit = ''; - // otherMaterial.quantity = 0; - // otherMaterial.unitPrice = 0; - // otherMaterial.amount = 0; }; -// 获取表单数据 -const getFormData = () => { - return { - materialData: [...materialData.value], - otherMaterial: { ...otherMaterial }, - totalAmount: totalAmount.value, - totalQuantity: totalQuantity.value - }; -}; // 暴露方法给父组件 defineExpose({ materialData, - otherMaterial, - otherMaterialData, - allMaterialData, toDeletedMaterialCostIdList, getTotalAmount }); diff --git a/src/views/oa/erp/budgetInfo/rd/OtherCost.vue b/src/views/oa/erp/budgetInfo/rd/OtherCost.vue index 9280276..46c9d76 100644 --- a/src/views/oa/erp/budgetInfo/rd/OtherCost.vue +++ b/src/views/oa/erp/budgetInfo/rd/OtherCost.vue @@ -21,12 +21,26 @@ - - + + - + @@ -34,20 +48,21 @@ + + + - - -
合计: {{ formatNumber(totalAmount) }} 万元
- @@ -63,11 +78,26 @@ const props = defineProps<{ // 响应式数据 const loading = ref(false); -const otherCostList = ref([]); +// const otherCostList = ref([]); const selectedRows = ref([]); const addRowCount = ref(1); const toDeletedOtherCostIdList = ref([]); +// 预算数据 +const otherCostList = ref([ + { sortOrder: 1, itemDesc: '安装费' }, + { sortOrder: 2, itemDesc: '资料/文献费' }, + { sortOrder: 3, itemDesc: '会议费' }, + { sortOrder: 4, itemDesc: '劳务费' }, + { sortOrder: 5, itemDesc: '运输装卸费' }, + { sortOrder: 6, itemDesc: '中介代理费' }, + { sortOrder: 7, itemDesc: '其他费用' } +]); + +const checkSelectable = (row: rdBudgetOtherCostVO, index: number) => { + return row.sortOrder > 7; +}; + // 格式化数字,元转换为万元 const formatNumber = (value: number) => { if (!value) return '0.00'; diff --git a/src/views/oa/erp/budgetInfo/rd/TechCost.vue b/src/views/oa/erp/budgetInfo/rd/TechCost.vue new file mode 100644 index 0000000..e18bcad --- /dev/null +++ b/src/views/oa/erp/budgetInfo/rd/TechCost.vue @@ -0,0 +1,653 @@ + + + + + diff --git a/src/views/oa/erp/budgetInfo/rd/TestingCost.vue b/src/views/oa/erp/budgetInfo/rd/TestingCost.vue index 8eb394b..06b3abc 100644 --- a/src/views/oa/erp/budgetInfo/rd/TestingCost.vue +++ b/src/views/oa/erp/budgetInfo/rd/TestingCost.vue @@ -23,17 +23,31 @@ - + - + - + @@ -64,10 +78,8 @@ -
-
- 测试化验加工费总计(万元):{{ formatNumber(totalAmount) }} -
+
+

注:是指支付给外单位(包括公司内部经济核算单位)的检验、测试、化验及加工等费用。

@@ -215,7 +227,6 @@ const refreshData = () => { const resetData = () => { testData.value.splice(0, testData.value.length); totalAmount.value = 0; - idCounter = 1; }; // 获取表单数据 diff --git a/src/views/oa/erp/budgetInfo/rd/TravelMeetingExchange.vue b/src/views/oa/erp/budgetInfo/rd/TravelMeetingExchange.vue index eab7c8d..4964f3e 100644 --- a/src/views/oa/erp/budgetInfo/rd/TravelMeetingExchange.vue +++ b/src/views/oa/erp/budgetInfo/rd/TravelMeetingExchange.vue @@ -39,10 +39,10 @@ '', '', '', - '合计(万元)', - format2TenThousandNumber(travelTransportTotal), - format2TenThousandNumber(travelAccommodationTotal), - format2TenThousandNumber(travelSubsidyTotal), + '合计', + formatNumber(travelTransportTotal), + formatNumber(travelAccommodationTotal), + formatNumber(travelSubsidyTotal), formatNumber(travelSubtotalTotal), '' ]; @@ -111,118 +111,21 @@
- - -
-

会议费预算明细表

-
- 行数: - - - - - - 添加 - - - - - - 删除 - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - +
-

国际交流费预算明细表

+

交通费明细表

行数: - - + + 添加 - + @@ -233,97 +136,61 @@ - + - + - - - - + + - - - - - - - - - + + +
+

注:开展实验(试验)、考察、业务调研、学术交流等发生的外埠差旅费、市内交通费用等。开支标准按照公司有关规定执行。

+
@@ -331,14 +198,17 @@ import { ref, computed, watch } from 'vue'; import { ElMessage } from 'element-plus'; import { rdBudgetTravelCostVO } from '@/api/oa/erp/budgetInfo/rd/rdBudgetTravelCost/types'; -import { rdBudgetMeetingCostVO } from '@/api/oa/erp/budgetInfo/rd/rdBudgetMeetingCost/types'; -import { rdBudgetExchangeCostVO } from '@/api/oa/erp/budgetInfo/rd/rdBudgetExchangeCost/types'; // Props const props = defineProps<{ projectId?: string; }>(); +const TRIP_TYPE = { + TRAVEL: '1', //差旅费 + TRANSPORTATION: '2' //交通费 +}; + // 响应式数据 const loading = ref(false); @@ -348,17 +218,11 @@ const selectedTravelRows = ref([]); const travelAddRowCount = ref(1); const toDeletedTravelCostIdList = ref([]); -// 会议费相关 -const meetingList = ref([]); -const selectedMeetingRows = ref([]); -const meetingAddRowCount = ref(1); -const toDeletedMeetingCostIdList = ref([]); - -// 国际交流费相关 -const exchangeList = ref([]); -const selectedInternationalRows = ref([]); -const internationalAddRowCount = ref(1); -const toDeletedExchangeCostIdList = ref([]); +// 交通费相关 +const transportationList = ref([]); +const selectedTransportationRows = ref([]); +const transportationAddRowCount = ref(1); +const toDeletedTransportationCostIdList = ref([]); // 计算差旅费合计 //往返路费 @@ -385,19 +249,10 @@ const travelSubtotalTotal = computed(() => { }, 0); }); -// 计算会议费合计(需要转成万元,2位小数再相加) -const meetingFeeTotal = computed(() => { - return meetingList.value.reduce((sum, item) => { - const amountInTenThousand = (Number(item.meetingPrice) || 0) / 10000; - const formattedAmount = parseFloat(amountInTenThousand.toFixed(2)); - return sum + formattedAmount; - }, 0); -}); - -// 计算国际交流费合计(需要转成万元,2位小数再相加) -const internationalSubtotalTotal = computed(() => { - return exchangeList.value.reduce((sum, item) => { - const amountInTenThousand = (Number(item.price) || 0) / 10000; +// 计算交通费合计(需要转成万元,2位小数再相加) +const transportationSubtotalTotal = computed(() => { + return transportationList.value.reduce((sum, item) => { + const amountInTenThousand = (Number(item.subtotalCosts) || 0) / 10000; const formattedAmount = parseFloat(amountInTenThousand.toFixed(2)); return sum + formattedAmount; }, 0); @@ -419,47 +274,19 @@ const format2TenThousandNumber = (value: number) => { const calculateTravelSubtotal = () => { travelList.value.forEach((item) => { // 住宿费 = 人数 * 天数 * 住宿标准 - item.stayCosts = (item.peopleNumber || 0) * (item.days || 0) * (item.stayStandard || 0); + item.stayCosts = (item.peopleNumber || 0) * (item.frequency || 0) * (item.days || 0) * (item.stayStandard || 0); // 补贴 = 90 * 人数 * 天数 - item.subsidyCosts = 90 * (item.peopleNumber || 0) * (item.days || 0); + item.subsidyCosts = 90 * (item.peopleNumber || 0) * (item.frequency || 0) * (item.days || 0); // 小计 = (往返路费 + 住宿费 + 补贴) / 10000 item.subtotalCosts = (item.travelExpenses || 0) + item.stayCosts + item.subsidyCosts; }); }; -// 计算会议费 -const calculateMeetingFee = () => { - meetingList.value.forEach((item) => { - // 公司组织会议:((场地日租金 + 日均杂费) * 天数 + 专家交通住宿费) / 10000 - // 外出参加会议:(人数 * 人均交费) / 10000 - //会议费=公司组织会议费用+外出参加会议费用 - item.meetingPrice = - ((item.rentalFee || 0) + (item.dailyExpense || 0)) * (item.days || 0) + - (item.expertExpense || 0) + - (item.peopleNumber || 0) * (item.perPersonExpense || 0); - }); -}; -// 计算国际交流费小计 -const calculateInternationalSubtotal = () => { - exchangeList.value.forEach((item) => { - // 如果合作交流类型是出国考察,则补贴=40*人数*时间 - if (item.communicationType === '出国考察') { - item.subsidy = 40 * (item.peopleNumber || 0) * (item.days || 0); - } else if (!item.subsidy) { - // 其他类型如果没有设置补贴,默认设为0 - item.subsidy = 0; - } - // 小计 = (往返路费及住宿费 + 补贴) / 10000 - item.price = (item.travelAccommodationExpense || 0) + (item.subsidy || 0); - }); -}; - -const getTravelMeetingExchangeAmount = () => { +const getTravelAmount = () => { return { travelSubtotalTotal: (Number(travelSubtotalTotal.value) || 0) * 10000, - meetingFeeTotal: (Number(meetingFeeTotal.value) || 0) * 10000, - internationalSubtotalTotal: (Number(internationalSubtotalTotal.value) || 0) * 10000 + transportationSubtotalTotal: (Number(transportationSubtotalTotal.value) || 0) * 10000 }; }; @@ -469,12 +296,13 @@ const confirmTravelAdd = () => { for (let i = 0; i < travelAddRowCount.value; i++) { const newItem: rdBudgetTravelCostVO = { sortOrder: currentSortOrder + i + 1, + tripType: TRIP_TYPE.TRAVEL, tripLocation: '', reason: '', frequency: undefined, peopleNumber: undefined, days: undefined, - stayStandard: undefined, + stayStandard: 180, travelExpenses: undefined, stayCosts: 0, subsidyCosts: 0, @@ -540,23 +368,19 @@ const handleTravelBatchDelete = () => { selectedTravelRows.value = []; }; -// 会议费相关方法 -const confirmMeetingAdd = () => { - const currentSortOrder = meetingList.value && meetingList.value.length > 0 ? Math.max(...meetingList.value.map((item) => item.sortOrder)) : 0; - for (let i = 0; i < meetingAddRowCount.value; i++) { - const newItem: rdBudgetMeetingCostVO = { +// 交通费相关方法 +const confirmTransportationAdd = () => { + const currentSortOrder = transportationList.value && transportationList.value.length > 0 ? Math.max(...transportationList.value.map((item) => item.sortOrder)) : 0; + + for (let i = 0; i < transportationAddRowCount.value; i++) { + const newItem: rdBudgetTravelCostVO = { sortOrder: currentSortOrder + i + 1, - meetingContent: '', - rentalFee: undefined, - dailyExpense: undefined, - days: undefined, - expertExpense: undefined, - peopleNumber: undefined, - perPersonExpense: undefined, - meetingPrice: 0 + tripType: TRIP_TYPE.TRANSPORTATION, + tripLocation: '', + reason: '', }; - meetingList.value.push(newItem); + transportationList.value.push(newItem); } // 滚动到最下方并聚焦到新添加的行 @@ -568,83 +392,7 @@ const confirmMeetingAdd = () => { // 尝试聚焦到新添加的第一行的第一个输入框 const rows = document.querySelectorAll('.el-table__body tr'); - const newRow = rows[rows.length - meetingAddRowCount.value]; - if (newRow) { - const firstInput = newRow.querySelector('input, select'); - if (firstInput) { - firstInput.focus(); - } - } - }, 0); -}; - -const handleMeetingSelectionChange = (selection: rdBudgetMeetingCostVO[]) => { - selectedMeetingRows.value = selection; -}; - -// 删除单行 -const handleMeetingDelete = (index: number, row: rdBudgetMeetingCostVO) => { - meetingList.value.splice(index, 1); - // 重新编号 - meetingList.value.forEach((item, index) => { - item.sortOrder = index + 1; - }); - if (row.meetingCostId) { - toDeletedMeetingCostIdList.value.push(row.meetingCostId); - } - calculateMeetingFee(); -}; - -// 批量删除 -const handleMeetingBatchDelete = () => { - if (selectedMeetingRows.value.length === 0) { - ElMessage.warning('请选择要删除的行'); - return; - } - selectedMeetingRows.value.forEach((selectedRow) => { - if (selectedRow.meetingCostId) { - toDeletedMeetingCostIdList.value.push(selectedRow.meetingCostId); - } - }); - - meetingList.value = meetingList.value.filter((item) => !selectedMeetingRows.value.includes(item)); - // 重新编号 - meetingList.value.forEach((item, index) => { - item.sortOrder = index + 1; - }); - calculateMeetingFee(); - selectedMeetingRows.value = []; -}; - -// 国际交流费相关方法 -const confirmInternationalAdd = () => { - const currentSortOrder = exchangeList.value && exchangeList.value.length > 0 ? Math.max(...exchangeList.value.map((item) => item.sortOrder)) : 0; - - for (let i = 0; i < internationalAddRowCount.value; i++) { - const newItem: rdBudgetExchangeCostVO = { - sortOrder: currentSortOrder + i + 1, - communicationType: '', - countryRegion: '', - institution: '', - peopleNumber: undefined, - days: undefined, - travelAccommodationExpense: undefined, - subsidy: undefined, - price: 0 - }; - exchangeList.value.push(newItem); - } - - // 滚动到最下方并聚焦到新添加的行 - setTimeout(() => { - const table = document.querySelector('.el-table__body-wrapper'); - if (table) { - table.scrollTop = table.scrollHeight; - } - - // 尝试聚焦到新添加的第一行的第一个输入框 - const rows = document.querySelectorAll('.el-table__body tr'); - const newRow = rows[rows.length - internationalAddRowCount.value]; + const newRow = rows[rows.length - transportationAddRowCount.value]; if (newRow) { const firstInput = newRow.querySelector('input, select'); if (firstInput) { @@ -655,42 +403,40 @@ const confirmInternationalAdd = () => { }; -const handleInternationalSelectionChange = (selection: rdBudgetExchangeCostVO[]) => { - selectedInternationalRows.value = selection; +const handleTransportationSelectionChange = (selection: rdBudgetTravelCostVO[]) => { + selectedTransportationRows.value = selection; }; // 删除单行 -const handleExchangeDelete = (index: number, row: rdBudgetExchangeCostVO) => { - exchangeList.value.splice(index, 1); +const handleTransportationDelete = (index: number, row: rdBudgetTravelCostVO) => { + transportationList.value.splice(index, 1); // 重新编号 - exchangeList.value.forEach((item, index) => { + transportationList.value.forEach((item, index) => { item.sortOrder = index + 1; }); - if (row.exchangeCostId) { - toDeletedExchangeCostIdList.value.push(row.exchangeCostId); + if (row.travelCostId) { + toDeletedTravelCostIdList.value.push(row.travelCostId); } - calculateInternationalSubtotal(); }; // 批量删除 -const handleExchangeBatchDelete = () => { - if (selectedInternationalRows.value.length === 0) { +const handleTransportationBatchDelete = () => { + if (selectedTransportationRows.value.length === 0) { ElMessage.warning('请选择要删除的行'); return; } - selectedInternationalRows.value.forEach((selectedRow) => { - if (selectedRow.exchangeCostId) { - toDeletedExchangeCostIdList.value.push(selectedRow.exchangeCostId); + selectedTransportationRows.value.forEach((selectedRow) => { + if (selectedRow.travelCostId) { + toDeletedTravelCostIdList.value.push(selectedRow.travelCostId); } }); - exchangeList.value = exchangeList.value.filter((item) => !selectedInternationalRows.value.includes(item)); + transportationList.value = transportationList.value.filter((item) => !selectedTransportationRows.value.includes(item)); // 重新编号 - exchangeList.value.forEach((item, index) => { + transportationList.value.forEach((item, index) => { item.sortOrder = index + 1; }); - calculateInternationalSubtotal(); - selectedInternationalRows.value = []; + selectedTransportationRows.value = []; }; // 监听projectId变化,重新加载数据 @@ -707,11 +453,8 @@ watch( defineExpose({ travelList, toDeletedTravelCostIdList, - meetingList, - toDeletedMeetingCostIdList, - exchangeList, - toDeletedExchangeCostIdList, - getTravelMeetingExchangeAmount + transportationList, + getTravelAmount });