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 @@ - +