From e4e009717c54c63d2ebd207e764f68840893fd2c Mon Sep 17 00:00:00 2001 From: xs Date: Fri, 28 Nov 2025 16:28:17 +0800 Subject: [PATCH] =?UTF-8?q?1.0.42.1=EF=BC=9A=20=E5=89=8D=E7=AB=AF=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=E5=B8=82=E5=9C=BA=E9=A1=B9=E7=9B=AE=E9=A2=84?= =?UTF-8?q?=E7=AE=97=E4=BF=9D=E5=AD=98=E5=92=8C=E6=9B=B4=E6=96=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=8C=E6=88=90=EF=BC=9B=20=20=20=20=E7=A0=94?= =?UTF-8?q?=E5=8F=91=E9=A1=B9=E7=9B=AE=E9=A2=84=E7=AE=97=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rd/rdBudgetMaterialCost/types.ts | 5 + src/api/oa/erp/budgetInfo/types.ts | 96 +- src/api/system/user/index.ts | 16 +- src/router/index.ts | 7 + src/utils/objHandle.ts | 47 + src/views/oa/erp/budgetInfo/edit.vue | 497 +++++-- src/views/oa/erp/budgetInfo/index.vue | 235 +--- .../oa/erp/budgetInfo/market/BudgetTable.vue | 268 ++-- .../budgetInfo/market/InstallationCost.vue | 230 ++-- .../oa/erp/budgetInfo/market/LaborCost.vue | 366 +++-- .../oa/erp/budgetInfo/market/MaterialCost.vue | 186 +-- .../oa/erp/budgetInfo/market/OtherCost.vue | 244 ++-- .../oa/erp/budgetInfo/market/TravelCost.vue | 406 +++--- .../oa/erp/budgetInfo/rd/BudgetTable.vue | 294 ++-- .../oa/erp/budgetInfo/rd/EquipmentCost.vue | 326 ++--- .../oa/erp/budgetInfo/rd/LaborService.vue | 1222 +++++++---------- .../oa/erp/budgetInfo/rd/LiteratureCost.vue | 501 +++---- .../oa/erp/budgetInfo/rd/MaterialCost.vue | 478 +++---- src/views/oa/erp/budgetInfo/rd/OtherCost.vue | 276 ++-- .../oa/erp/budgetInfo/rd/TestingCost.vue | 295 ++-- .../budgetInfo/rd/TravelMeetingExchange.vue | 1074 ++++++--------- 21 files changed, 3458 insertions(+), 3611 deletions(-) create mode 100644 src/utils/objHandle.ts diff --git a/src/api/oa/erp/budgetInfo/rd/rdBudgetMaterialCost/types.ts b/src/api/oa/erp/budgetInfo/rd/rdBudgetMaterialCost/types.ts index 70e1ead..8d0585b 100644 --- a/src/api/oa/erp/budgetInfo/rd/rdBudgetMaterialCost/types.ts +++ b/src/api/oa/erp/budgetInfo/rd/rdBudgetMaterialCost/types.ts @@ -19,6 +19,11 @@ export interface rdBudgetMaterialCostVO { */ materialName: string; + /** + * 材料类型 + */ + materialType: string; + /** * 单位,关联base_unit_info */ diff --git a/src/api/oa/erp/budgetInfo/types.ts b/src/api/oa/erp/budgetInfo/types.ts index 880dc72..3ad9cb3 100644 --- a/src/api/oa/erp/budgetInfo/types.ts +++ b/src/api/oa/erp/budgetInfo/types.ts @@ -134,6 +134,37 @@ export interface budgetInfoVO { */ remark: string; + erpBudgetDetailList?: []; + + erpBudgetMaterialCostList?: []; + + erpBudgetLaborCostList?: []; + + erpBudgetInstallCostList?: []; + + erpBudgetTravelCostList?: []; + + erpBudgetOtherCostList?: []; + + erpRdBudgetEquipmentCostList?: []; + + erpRdBudgetMaterialCostList?: []; + + erpRdBudgetTravelCostList?: []; + + erpRdBudgetMeetingCostList?: []; + + erpRdBudgetExchangeCostList?: []; + + erpRdBudgetTechCostList?: []; + + erpRdBudgetLaborCostList?: []; + + erpRdBudgetLiteratureCostList?: []; + + erpRdBudgetTestingCostList?: []; + + erpRdBudgetOtherCostList?: []; } export interface budgetInfoForm extends BaseEntity { @@ -272,10 +303,70 @@ export interface budgetInfoForm extends BaseEntity { */ remark?: string; + erpBudgetDetailList?: []; + + erpBudgetMaterialCostList?: []; + + erpBudgetLaborCostList?: []; + + erpBudgetInstallCostList?: []; + + erpBudgetTravelCostList?: []; + + erpBudgetOtherCostList?: []; + + toDeletedMaterialCostIdList?: []; + + toDeletedLaborCostIdList?: []; + + toDeletedInstallCostIdList?: []; + + toDeletedTravelCostIdList?: []; + + toDeletedOtherCostIdList?: []; + + erpRdBudgetEquipmentCostList?: []; + + erpRdBudgetMaterialCostList?: []; + + erpRdBudgetTravelCostList?: []; + + erpRdBudgetMeetingCostList?: []; + + erpRdBudgetExchangeCostList?: []; + + erpRdBudgetTechCostList?: []; + + erpRdBudgetLaborCostList?: []; + + erpRdBudgetLiteratureCostList?: []; + + erpRdBudgetTestingCostList?: []; + + erpRdBudgetOtherCostList?: []; + + toDeletedRdEquipmentCostIdList?: []; + + toDeletedRdMaterialCostIdList?: []; + + toDeletedRdTravelCostIdList?: []; + + toDeletedRdMeetingCostIdList?: []; + + toDeletedRdExchangeCostIdList?: []; + + toDeletedRdTechCostIdList?: []; + + toDeletedRdLaborCostIdList?: []; + + toDeletedRdLiteratureCostIdList?: []; + + toDeletedRdTestingCostIdList?: []; + + toDeletedRdOtherCostIdList?: []; } export interface budgetInfoQuery extends PageQuery { - /** * 项目ID */ @@ -406,6 +497,3 @@ export interface budgetInfoQuery extends PageQuery { */ params?: any; } - - - diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index caffecc..7c26320 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -209,6 +209,19 @@ export const deptTreeSelect = (): AxiosPromise => { }); }; +/** + * 查询用户列表 + * @param query + */ +export const getUserList = (query: UserQuery): AxiosPromise => { + return request({ + url: '/system/user/getUserList', + method: 'get', + params: query + }); +}; + + export default { listUser, getUser, @@ -225,5 +238,6 @@ export default { getAuthRole, updateAuthRole, deptTreeSelect, - listUserByDeptId + listUserByDeptId, + getUserList }; diff --git a/src/router/index.ts b/src/router/index.ts index 967a39b..4e66eed 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -116,6 +116,12 @@ export const constantRoutes: RouteRecordRaw[] = [ name: 'ErpProjectPlanView', meta: { title: '项目计划查看', activeMenu: '/oa/erp/erpProjectPlan' } }, + { + path: 'budgetInfo/edit', + component: () => import('@/views/oa/erp/budgetInfo/edit.vue'), + name: 'BudgetEdit', + meta: { title: '项目预算申请', activeMenu: '/oa/erp/budgetInfo' } + }, { path: 'erpProjectPlan/gantt/:projectPlanId', @@ -156,6 +162,7 @@ export const constantRoutes: RouteRecordRaw[] = [ } ] }, + { path: '/oa/erp', component: Layout, diff --git a/src/utils/objHandle.ts b/src/utils/objHandle.ts new file mode 100644 index 0000000..0861790 --- /dev/null +++ b/src/utils/objHandle.ts @@ -0,0 +1,47 @@ +/** + * 深度比较两个对象或数组是否相同 + * @param {any} obj1 + * @param {any} obj2 + * @returns {Boolean} + */ +export function isDeepEqual(obj1: any, obj2: any) { + // 检查类型是否相同 + if (typeof obj1 !== typeof obj2) return false; + + // 如果不是对象或为空,直接比较值 + if (obj1 === null || obj2 === null || typeof obj1 !== 'object') { + return obj1 === obj2; + } + + // 处理数组 + if (Array.isArray(obj1) && Array.isArray(obj2)) { + if (obj1.length !== obj2.length) return false; + + // 先对数组进行排序比较(如果需要基于特定字段比较) + const sortedObj1 = [...obj1].sort((a, b) => a.sortNumber - b.sortNumber); + const sortedObj2 = [...obj2].sort((a, b) => a.sortNumber - b.sortNumber); + + // 递归比较每个元素 + for (let i = 0; i < sortedObj1.length; i++) { + if (!isDeepEqual(sortedObj1[i], sortedObj2[i])) { + return false; + } + } + return true; + } + + // 处理普通对象 + const keys1 = Object.keys(obj1); + const keys2 = Object.keys(obj2); + + if (keys1.length !== keys2.length) return false; + + // 检查所有键值对是否相同 + for (const key of keys1) { + if (!keys2.includes(key) || !isDeepEqual(obj1[key], obj2[key])) { + return false; + } + } + + return true; +} diff --git a/src/views/oa/erp/budgetInfo/edit.vue b/src/views/oa/erp/budgetInfo/edit.vue index ce9b1f7..d948e24 100644 --- a/src/views/oa/erp/budgetInfo/edit.vue +++ b/src/views/oa/erp/budgetInfo/edit.vue @@ -45,43 +45,47 @@ - + - + - + - + - + - + - + - + - + - + @@ -147,17 +151,20 @@ - + - diff --git a/src/views/oa/erp/budgetInfo/market/InstallationCost.vue b/src/views/oa/erp/budgetInfo/market/InstallationCost.vue index 5e106c7..8946c01 100644 --- a/src/views/oa/erp/budgetInfo/market/InstallationCost.vue +++ b/src/views/oa/erp/budgetInfo/market/InstallationCost.vue @@ -1,17 +1,28 @@ - + @@ -299,6 +317,12 @@ defineExpose({ padding: 20px; } +.card-header { + display: flex; + justify-content: space-between; + align-items: center; +} + .title { text-align: center; font-size: 16px; diff --git a/src/views/oa/erp/budgetInfo/market/LaborCost.vue b/src/views/oa/erp/budgetInfo/market/LaborCost.vue index a28c9d5..012f791 100644 --- a/src/views/oa/erp/budgetInfo/market/LaborCost.vue +++ b/src/views/oa/erp/budgetInfo/market/LaborCost.vue @@ -1,17 +1,28 @@ - + - - - - - diff --git a/src/views/oa/erp/budgetInfo/market/TravelCost.vue b/src/views/oa/erp/budgetInfo/market/TravelCost.vue index 29ca3a9..99143c4 100644 --- a/src/views/oa/erp/budgetInfo/market/TravelCost.vue +++ b/src/views/oa/erp/budgetInfo/market/TravelCost.vue @@ -1,154 +1,154 @@ - +