From ef99ff1a33e75924bc73692eedd7e2b0936ea9c0 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Wed, 5 Nov 2025 16:59:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(erp):=20=E5=AE=9E=E7=8E=B0=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=AE=A1=E5=88=92=E7=BC=96=E8=BE=91=E4=B8=8E=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增项目计划编辑页面,支持基础信息与阶段计划的增删改查 - 集成审批流程,支持暂存、提交、审批与流程进度查看 - 实现项目经理与部门负责人自动填充逻辑 - 添加回款金额自动计算与应收款日期动态生成 - 支持合同关联与付款方式配置 - 提供只读模式与 limited 编辑模式以适配不同审批状态 -优化表单校验与权限控制,确保数据安全与一致性 --- src/api/oa/erp/erpProjectPlan/index.ts | 88 +++ src/api/oa/erp/erpProjectPlan/types.ts | 214 +++++++ src/api/oa/erp/erpProjectPlanStage/index.ts | 76 +++ src/api/oa/erp/erpProjectPlanStage/types.ts | 291 +++++++++ src/views/oa/erp/erpProjectPlan/edit.vue | 602 ++++++++++++++++++ src/views/oa/erp/erpProjectPlan/edit.vue.back | 484 ++++++++++++++ src/views/oa/erp/erpProjectPlan/index.vue | 411 ++++++++++++ .../oa/erp/erpProjectPlan/index.vue.backup | 402 ++++++++++++ .../oa/erp/erpProjectPlanStage/index.vue | 511 +++++++++++++++ 9 files changed, 3079 insertions(+) create mode 100644 src/api/oa/erp/erpProjectPlan/index.ts create mode 100644 src/api/oa/erp/erpProjectPlan/types.ts create mode 100644 src/api/oa/erp/erpProjectPlanStage/index.ts create mode 100644 src/api/oa/erp/erpProjectPlanStage/types.ts create mode 100644 src/views/oa/erp/erpProjectPlan/edit.vue create mode 100644 src/views/oa/erp/erpProjectPlan/edit.vue.back create mode 100644 src/views/oa/erp/erpProjectPlan/index.vue create mode 100644 src/views/oa/erp/erpProjectPlan/index.vue.backup create mode 100644 src/views/oa/erp/erpProjectPlanStage/index.vue diff --git a/src/api/oa/erp/erpProjectPlan/index.ts b/src/api/oa/erp/erpProjectPlan/index.ts new file mode 100644 index 0000000..f89e263 --- /dev/null +++ b/src/api/oa/erp/erpProjectPlan/index.ts @@ -0,0 +1,88 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ErpProjectPlanVO, ErpProjectPlanForm, ErpProjectPlanQuery } from '@/api/oa/erp/erpProjectPlan/types'; + +/** + * 查询项目计划列表 + * @param query + * @returns {*} + */ + +export const listErpProjectPlan = (query?: ErpProjectPlanQuery): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectPlan/list', + method: 'get', + params: query + }); +}; + +/** + * 查询项目计划详细 + * @param projectPlanId + */ +export const getErpProjectPlan = (projectPlanId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectPlan/' + projectPlanId, + method: 'get' + }); +}; + +/** + * 新增项目计划 + * @param data + */ +export const addErpProjectPlan = (data: ErpProjectPlanForm) => { + return request({ + url: '/oa/erp/erpProjectPlan', + method: 'post', + data: data + }); +}; + +/** + * 修改项目计划 + * @param data + */ +export const updateErpProjectPlan = (data: ErpProjectPlanForm) => { + return request({ + url: '/oa/erp/erpProjectPlan', + method: 'put', + data: data + }); +}; + +/** + * 删除项目计划 + * @param projectPlanId + */ +export const delErpProjectPlan = (projectPlanId: string | number | Array) => { + return request({ + url: '/oa/erp/erpProjectPlan/' + projectPlanId, + method: 'delete' + }); +}; + +/** + * 下拉框查询项目计划列表 + * @param query + * @returns {*} + */ +export function getErpProjectPlanList (query) { + return request({ + url: '/oa/erp/erpProjectPlan/getErpProjectPlanList', + method: 'get', + params: query + }); +}; + +/** + * 提交项目计划并发起流程 + * @param data + */ +export const projectPlanSubmitAndFlowStart = (data: ErpProjectPlanForm): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectPlan/projectPlanSubmitAndFlowStart', + method: 'post', + data: data + }); +}; diff --git a/src/api/oa/erp/erpProjectPlan/types.ts b/src/api/oa/erp/erpProjectPlan/types.ts new file mode 100644 index 0000000..6096405 --- /dev/null +++ b/src/api/oa/erp/erpProjectPlan/types.ts @@ -0,0 +1,214 @@ +export interface ErpProjectPlanVO { + /** + * 项目计划ID + */ + projectPlanId: string | number; + + /** + * 项目ID + */ + projectId: string | number; + + /** + * 项目经理 + */ + managerId: string | number; + + /** + * 部门负责人 + */ + chargeId: string | number; + + /** + * 付款方式 + */ + paymentMethod: string; + + /** + * 项目计划状态(1暂存 2审批中 3可用) + */ + projectPlanStatus: string; + + /** + * 流程状态 + */ + flowStatus: string; + + /** + * 排序号 + */ + sortOrder: number; + + /** + * 合同ID(预留) + */ + contractId: string | number; + + /** + * 备注 + */ + remark: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag: string; + + /** + * 项目计划阶段列表 + */ + planStageList?: any[]; + + /** + * 项目名称 + */ + projectName?: string; + + /** + * 项目经理名称 + */ + managerName?: string; + + /** + * 部门负责人名称 + */ + chargeName?: string; + + /** + * 合同名称 + */ + contractName?: string; +} + +export interface ErpProjectPlanForm extends BaseEntity { + /** + * 项目计划ID + */ + projectPlanId?: string | number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目经理 + */ + managerId?: string | number; + + /** + * 部门负责人 + */ + chargeId?: string | number; + + /** + * 付款方式 + */ + paymentMethod?: string; + + /** + * 项目计划状态(1暂存 2审批中 3可用) + */ + projectPlanStatus?: string; + + /** + * 流程状态 + */ + flowStatus?: string; + + /** + * 排序号 + */ + sortOrder?: number; + + /** + * 合同ID(预留) + */ + contractId?: string | number; + + /** + * 备注 + */ + remark?: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 项目计划阶段列表 + */ + planStageList?: any[]; + + /** + * 流程定义编码 + */ + flowCode?: any; + + /** + * 流程变量 + */ + variables?: any; + + /** + * 流程业务扩展信息 + */ + bizExt?: any; +} + +export interface ErpProjectPlanQuery extends PageQuery { + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目经理 + */ + managerId?: string | number; + + /** + * 部门负责人 + */ + chargeId?: string | number; + + /** + * 付款方式 + */ + paymentMethod?: string; + + /** + * 项目计划状态(1暂存 2审批中 3可用) + */ + projectPlanStatus?: string; + + /** + * 流程状态 + */ + flowStatus?: string; + + /** + * 排序号 + */ + sortOrder?: number; + + /** + * 合同ID(预留) + */ + contractId?: string | number; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/oa/erp/erpProjectPlanStage/index.ts b/src/api/oa/erp/erpProjectPlanStage/index.ts new file mode 100644 index 0000000..2b04a95 --- /dev/null +++ b/src/api/oa/erp/erpProjectPlanStage/index.ts @@ -0,0 +1,76 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ErpProjectPlanStageVO, ErpProjectPlanStageForm, ErpProjectPlanStageQuery } from '@/api/oa/erp/erpProjectPlanStage/types'; + +/** + * 查询项目计划阶段列表 + * @param query + * @returns {*} + */ + +export const listErpProjectPlanStage = (query?: ErpProjectPlanStageQuery): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectPlanStage/list', + method: 'get', + params: query + }); +}; + +/** + * 查询项目计划阶段详细 + * @param planStageId + */ +export const getErpProjectPlanStage = (planStageId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectPlanStage/' + planStageId, + method: 'get' + }); +}; + +/** + * 新增项目计划阶段 + * @param data + */ +export const addErpProjectPlanStage = (data: ErpProjectPlanStageForm) => { + return request({ + url: '/oa/erp/erpProjectPlanStage', + method: 'post', + data: data + }); +}; + +/** + * 修改项目计划阶段 + * @param data + */ +export const updateErpProjectPlanStage = (data: ErpProjectPlanStageForm) => { + return request({ + url: '/oa/erp/erpProjectPlanStage', + method: 'put', + data: data + }); +}; + +/** + * 删除项目计划阶段 + * @param planStageId + */ +export const delErpProjectPlanStage = (planStageId: string | number | Array) => { + return request({ + url: '/oa/erp/erpProjectPlanStage/' + planStageId, + method: 'delete' + }); +}; + +/** + * 下拉框查询项目计划阶段列表 + * @param query + * @returns {*} + */ +export function getErpProjectPlanStageList (query) { + return request({ + url: '/oa/erp/erpProjectPlanStage/getErpProjectPlanStageList', + method: 'get', + params: query + }); +}; diff --git a/src/api/oa/erp/erpProjectPlanStage/types.ts b/src/api/oa/erp/erpProjectPlanStage/types.ts new file mode 100644 index 0000000..417526a --- /dev/null +++ b/src/api/oa/erp/erpProjectPlanStage/types.ts @@ -0,0 +1,291 @@ +export interface ErpProjectPlanStageVO { + /** + * 计划阶段ID + */ + planStageId: string | number; + + /** + * 项目ID + */ + projectId: string | number; + + /** + * 项目计划ID + */ + projectPlanId: string | number; + + /** + * 项目阶段 + */ + projectPhases: string; + + /** + * 计划开始时间 + */ + planStartTime: string; + + /** + * 计划结束时间 + */ + planEndTime: string; + + /** + * 回款阶段 + */ + collectionStage: string; + + /** + * 预计回款比例(%) + */ + repaymentRate: number; + + /** + * 预计回款金额 + */ + repaymentAmount: number; + + /** + * 预计回款时间 + */ + repaymentTime: string; + + /** + * 回款延期天数 + */ + delayDay: number; + + /** + * 应收款日期 + */ + receivableDate: string; + + /** + * 原因说明 + */ + reasonsExplanation: string; + + /** + * 进度备注 + */ + scheduleRemark: string; + + /** + * 实际开始时间 + */ + realStartTime: string; + + /** + * 实际结束时间 + */ + realEndTime: string; + + /** + * 排序号 + */ + sortOrder: number; + + /** + * 备注 + */ + remark: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag: string; + +} + +export interface ErpProjectPlanStageForm extends BaseEntity { + /** + * 计划阶段ID + */ + planStageId?: string | number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目计划ID + */ + projectPlanId?: string | number; + + /** + * 项目阶段 + */ + projectPhases?: string; + + /** + * 计划开始时间 + */ + planStartTime?: string; + + /** + * 计划结束时间 + */ + planEndTime?: string; + + /** + * 回款阶段 + */ + collectionStage?: string; + + /** + * 预计回款比例(%) + */ + repaymentRate?: number; + + /** + * 预计回款金额 + */ + repaymentAmount?: number; + + /** + * 预计回款时间 + */ + repaymentTime?: string; + + /** + * 回款延期天数 + */ + delayDay?: number; + + /** + * 应收款日期 + */ + receivableDate?: string; + + /** + * 原因说明 + */ + reasonsExplanation?: string; + + /** + * 进度备注 + */ + scheduleRemark?: string; + + /** + * 实际开始时间 + */ + realStartTime?: string; + + /** + * 实际结束时间 + */ + realEndTime?: string; + + /** + * 排序号 + */ + sortOrder?: number; + + /** + * 备注 + */ + remark?: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + +} + +export interface ErpProjectPlanStageQuery extends PageQuery { + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目计划ID + */ + projectPlanId?: string | number; + + /** + * 项目阶段 + */ + projectPhases?: string; + + /** + * 计划开始时间 + */ + planStartTime?: string; + + /** + * 计划结束时间 + */ + planEndTime?: string; + + /** + * 回款阶段 + */ + collectionStage?: string; + + /** + * 预计回款比例(%) + */ + repaymentRate?: number; + + /** + * 预计回款金额 + */ + repaymentAmount?: number; + + /** + * 预计回款时间 + */ + repaymentTime?: string; + + /** + * 回款延期天数 + */ + delayDay?: number; + + /** + * 应收款日期 + */ + receivableDate?: string; + + /** + * 原因说明 + */ + reasonsExplanation?: string; + + /** + * 进度备注 + */ + scheduleRemark?: string; + + /** + * 实际开始时间 + */ + realStartTime?: string; + + /** + * 实际结束时间 + */ + realEndTime?: string; + + /** + * 排序号 + */ + sortOrder?: number; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/views/oa/erp/erpProjectPlan/edit.vue b/src/views/oa/erp/erpProjectPlan/edit.vue new file mode 100644 index 0000000..1c47f79 --- /dev/null +++ b/src/views/oa/erp/erpProjectPlan/edit.vue @@ -0,0 +1,602 @@ + + + + + diff --git a/src/views/oa/erp/erpProjectPlan/edit.vue.back b/src/views/oa/erp/erpProjectPlan/edit.vue.back new file mode 100644 index 0000000..5f248ad --- /dev/null +++ b/src/views/oa/erp/erpProjectPlan/edit.vue.back @@ -0,0 +1,484 @@ + + + + + diff --git a/src/views/oa/erp/erpProjectPlan/index.vue b/src/views/oa/erp/erpProjectPlan/index.vue new file mode 100644 index 0000000..d66efb2 --- /dev/null +++ b/src/views/oa/erp/erpProjectPlan/index.vue @@ -0,0 +1,411 @@ + + + diff --git a/src/views/oa/erp/erpProjectPlan/index.vue.backup b/src/views/oa/erp/erpProjectPlan/index.vue.backup new file mode 100644 index 0000000..7416f93 --- /dev/null +++ b/src/views/oa/erp/erpProjectPlan/index.vue.backup @@ -0,0 +1,402 @@ + + + diff --git a/src/views/oa/erp/erpProjectPlanStage/index.vue b/src/views/oa/erp/erpProjectPlanStage/index.vue new file mode 100644 index 0000000..7ead168 --- /dev/null +++ b/src/views/oa/erp/erpProjectPlanStage/index.vue @@ -0,0 +1,511 @@ + + +