From fa0156726861565f5095bb60b5bd304790703f4b Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Tue, 11 Nov 2025 15:42:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(erp):=20=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=A1=B9=E7=9B=AE=E5=8F=98=E6=9B=B4=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 项目计划变更(erp_project_change、erp_project_change_budget、erp_project_change_progress) - 实现项目变更表单的与初始化、数据加载保存功能 - 添加预算行的增删改操作及表格展示 - 集成项目里程碑变更的时间调整与完成度设置 - 支持暂存与提交两种操作模式,并校验用户权限 - 实现根据项目ID自动加载项目计划信息功能 - 添加返回按钮与表单重置逻辑,优化用户体验 --- src/api/oa/erp/erpProjectChange/index.ts | 99 +++ src/api/oa/erp/erpProjectChange/types.ts | 521 +++++++++++ .../oa/erp/erpProjectChangeBudget/index.ts | 76 ++ .../oa/erp/erpProjectChangeBudget/types.ts | 156 ++++ .../oa/erp/erpProjectChangeProgress/index.ts | 76 ++ .../oa/erp/erpProjectChangeProgress/types.ts | 171 ++++ src/views/oa/crm/crmQuoteInfo/edit.vue.backup | 839 ++++++++++++++++++ src/views/oa/erp/erpProjectChange/edit.vue | 423 +++++++++ src/views/oa/erp/erpProjectChange/index.vue | 492 ++++++++++ .../oa/erp/erpProjectChangeBudget/index.vue | 305 +++++++ .../oa/erp/erpProjectChangeProgress/index.vue | 374 ++++++++ src/views/oa/erp/erpProjectPlan/gantt.vue | 411 +++++++++ 12 files changed, 3943 insertions(+) create mode 100644 src/api/oa/erp/erpProjectChange/index.ts create mode 100644 src/api/oa/erp/erpProjectChange/types.ts create mode 100644 src/api/oa/erp/erpProjectChangeBudget/index.ts create mode 100644 src/api/oa/erp/erpProjectChangeBudget/types.ts create mode 100644 src/api/oa/erp/erpProjectChangeProgress/index.ts create mode 100644 src/api/oa/erp/erpProjectChangeProgress/types.ts create mode 100644 src/views/oa/crm/crmQuoteInfo/edit.vue.backup create mode 100644 src/views/oa/erp/erpProjectChange/edit.vue create mode 100644 src/views/oa/erp/erpProjectChange/index.vue create mode 100644 src/views/oa/erp/erpProjectChangeBudget/index.vue create mode 100644 src/views/oa/erp/erpProjectChangeProgress/index.vue create mode 100644 src/views/oa/erp/erpProjectPlan/gantt.vue diff --git a/src/api/oa/erp/erpProjectChange/index.ts b/src/api/oa/erp/erpProjectChange/index.ts new file mode 100644 index 0000000..ea51c0f --- /dev/null +++ b/src/api/oa/erp/erpProjectChange/index.ts @@ -0,0 +1,99 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ErpProjectChangeVO, ErpProjectChangeForm, ErpProjectChangeQuery } from '@/api/oa/erp/erpProjectChange/types'; + +/** + * 查询项目变更申请列表 + * @param query + * @returns {*} + */ + +export const listErpProjectChange = (query?: ErpProjectChangeQuery): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChange/list', + method: 'get', + params: query + }); +}; + +/** + * 查询项目变更申请详细 + * @param projectChangeId + */ +export const getErpProjectChange = (projectChangeId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChange/' + projectChangeId, + method: 'get' + }); +}; + +/** + * 新增项目变更申请 + * @param data + */ +export const addErpProjectChange = (data: ErpProjectChangeForm) => { + return request({ + url: '/oa/erp/erpProjectChange', + method: 'post', + data: data + }); +}; + +/** + * 修改项目变更申请 + * @param data + */ +export const updateErpProjectChange = (data: ErpProjectChangeForm) => { + return request({ + url: '/oa/erp/erpProjectChange', + method: 'put', + data: data + }); +}; + +/** + * 删除项目变更申请 + * @param projectChangeId + */ +export const delErpProjectChange = (projectChangeId: string | number | Array) => { + return request({ + url: '/oa/erp/erpProjectChange/' + projectChangeId, + method: 'delete' + }); +}; + +/** + * 下拉框查询项目变更申请列表 + * @param query + * @returns {*} + */ +export function getErpProjectChangeList (query) { + return request({ + url: '/oa/erp/erpProjectChange/getErpProjectChangeList', + method: 'get', + params: query + }); +}; + +/** + * 根据项目ID准备项目变更信息(带出项目信息和项目计划阶段) + * @param projectId + */ +export const prepareProjectChangeWithInfo = (projectId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChange/prepareWithInfo/' + projectId, + method: 'get' + }); +}; + +/** + * 提交项目变更并发起审批流 + * @param data + */ +export const submitProjectChangeAndFlowStart = (data: ErpProjectChangeForm) => { + return request({ + url: '/oa/erp/erpProjectChange/submitAndFlowStart', + method: 'post', + data: data + }); +}; diff --git a/src/api/oa/erp/erpProjectChange/types.ts b/src/api/oa/erp/erpProjectChange/types.ts new file mode 100644 index 0000000..b7426eb --- /dev/null +++ b/src/api/oa/erp/erpProjectChange/types.ts @@ -0,0 +1,521 @@ +/** + * 预算变更明细接口 + */ +export interface ErpProjectChangeBudget { + /** + * 预算变更ID + */ + changeBudgetId?: string | number; + + /** + * 变更申请ID + */ + projectChangeId?: string | number; + + /** + * 预算详情ID + */ + budgetDetailId?: string | number; + + /** + * 科目名称 + */ + subjectName?: string; + + /** + * 变更前预算 + */ + budgetBefore?: number; + + /** + * 变更后预算 + */ + budgetAfter?: number; + + /** + * 已使用金额 + */ + amountUsed?: number; + + /** + * 费用调整原因 + */ + adjustmentReason?: string; + + /** + * 排序顺序 + */ + sortOrder?: number; + + /** + * 备注 + */ + remark?: string; +} + +/** + * 进度变更明细接口 + */ +export interface ErpProjectChangeProgress { + /** + * 进度变更ID + */ + changeProgressId?: string | number; + + /** + * 变更申请ID + */ + projectChangeId?: string | number; + + /** + * 计划阶段ID + */ + planStageId?: string | number; + + /** + * 项目阶段(字典project_phases) + */ + projectPhases?: string; + + /** + * 项目里程碑 + */ + milestoneName?: string; + + /** + * 原计划时间起 + */ + originalStart?: string; + + /** + * 原计划时间止 + */ + originalEnd?: string; + + /** + * 变更后时间起 + */ + changedStart?: string; + + /** + * 变更后时间止 + */ + changedEnd?: string; + + /** + * 里程碑完成程度 + */ + completionDegree?: number; + + /** + * 排序顺序 + */ + sortOrder?: number; + + /** + * 备注 + */ + remark?: string; +} + +export interface ErpProjectChangeVO { + /** + * 项目变更ID + */ + projectChangeId: string | number; + + /** + * 项目ID + */ + projectId: string | number; + + /** + * 项目编号 + */ + projectCode: string; + + /** + * 项目名称 + */ + projectName: string; + + /** + * 项目类别(1销售(实施、物流) 2销售(备件) 3研发 4预投) + */ + projectCategory: string; + + /** + * 变更类型(多选)(1预算变更 2计划变更 3范围变更 4需求变更 5合同变更) + */ + changeType: string; + + /** + * 变更次数 + */ + changeNumber: number; + + /** + * 项目经理ID + */ + projectManagerId: string | number; + + /** + * 项目经理姓名 + */ + projectManagerName: string; + + /** + * 部门负责人ID + */ + deptHeadId: string | number; + + /** + * 部门负责人姓名 + */ + deptHeadName: string; + + /** + * 分管副总ID + */ + responsibleVpId: string | number; + + /** + * 分管副总姓名 + */ + responsibleVpName: string; + + /** + * 申请变更时间 + */ + applyChangeDate: string; + + /** + * 项目合同额 + */ + contractAmount: number; + + /** + * 项目合同净额 + */ + contractNetAmount: number; + + /** + * 项目当前情况 + */ + currentStatus: string; + + /** + * 变更原因 + */ + changeReason: string; + + /** + * 后续工作 + */ + followUpWork: string; + + /** + * 项目变更状态(1暂存 2审批中 3可用) + */ + projectChangeStatus: string; + + /** + * 流程状态 + */ + flowStatus: string; + + /** + * 备注 + */ + remark: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag: string; + + /** + * 创建人 + */ + createBy: number; + + /** + * 创建时间 + */ + createTime: string; + + /** + * 预算变更明细列表 + */ + budgetList?: ErpProjectChangeBudget[]; + + /** + * 进度变更明细列表 + */ + progressList?: ErpProjectChangeProgress[]; + +} + +export interface ErpProjectChangeForm extends BaseEntity { + /** + * 项目变更ID + */ + projectChangeId?: string | number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目编号 + */ + projectCode?: string; + + /** + * 项目名称 + */ + projectName?: string; + + /** + * 项目类别(1销售(实施、物流) 2销售(备件) 3研发 4预投) + */ + projectCategory?: string; + + /** + * 变更类型(多选)(1预算变更 2计划变更 3范围变更 4需求变更 5合同变更) + */ + changeType?: string; + + /** + * 变更次数 + */ + changeNumber?: number; + + /** + * 项目经理ID + */ + projectManagerId?: string | number; + + /** + * 项目经理姓名 + */ + projectManagerName?: string; + + /** + * 部门负责人ID + */ + deptHeadId?: string | number; + + /** + * 部门负责人姓名 + */ + deptHeadName?: string; + + /** + * 分管副总ID + */ + responsibleVpId?: string | number; + + /** + * 分管副总姓名 + */ + responsibleVpName?: string; + + /** + * 申请变更时间 + */ + applyChangeDate?: string; + + /** + * 项目合同额 + */ + contractAmount?: number; + + /** + * 项目合同净额 + */ + contractNetAmount?: number; + + /** + * 项目当前情况 + */ + currentStatus?: string; + + /** + * 变更原因 + */ + changeReason?: string; + + /** + * 后续工作 + */ + followUpWork?: string; + + /** + * 项目变更状态(1暂存 2审批中 3可用) + */ + projectChangeStatus?: string; + + /** + * 流程状态 + */ + flowStatus?: string; + + /** + * 备注 + */ + remark?: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 预算变更明细列表 + */ + budgetList?: ErpProjectChangeBudget[]; + + /** + * 进度变更明细列表 + */ + progressList?: ErpProjectChangeProgress[]; + + /** + * 流程编码 + */ + flowCode?: string; + + /** + * 流程处理人 + */ + handler?: string; + + /** + * 流程变量 + */ + variables?: any; + + /** + * 业务扩展数据 + */ + bizExt?: any; + +} + +export interface ErpProjectChangeQuery extends PageQuery { + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 项目编号 + */ + projectCode?: string; + + /** + * 项目名称 + */ + projectName?: string; + + /** + * 项目类别(1销售(实施、物流) 2销售(备件) 3研发 4预投) + */ + projectCategory?: string; + + /** + * 变更类型(多选)(1预算变更 2计划变更 3范围变更 4需求变更 5合同变更) + */ + changeType?: string; + + /** + * 变更次数 + */ + changeNumber?: number; + + /** + * 项目经理ID + */ + projectManagerId?: string | number; + + /** + * 项目经理姓名 + */ + projectManagerName?: string; + + /** + * 部门负责人ID + */ + deptHeadId?: string | number; + + /** + * 部门负责人姓名 + */ + deptHeadName?: string; + + /** + * 分管副总ID + */ + responsibleVpId?: string | number; + + /** + * 分管副总姓名 + */ + responsibleVpName?: string; + + /** + * 申请变更时间 + */ + applyChangeDate?: string; + + /** + * 项目合同额 + */ + contractAmount?: number; + + /** + * 项目合同净额 + */ + contractNetAmount?: number; + + /** + * 项目当前情况 + */ + currentStatus?: string; + + /** + * 变更原因 + */ + changeReason?: string; + + /** + * 后续工作 + */ + followUpWork?: string; + + /** + * 项目变更状态(1暂存 2审批中 3可用) + */ + projectChangeStatus?: string; + + /** + * 流程状态 + */ + flowStatus?: string; + + /** + * 激活标识(1是 0否) + */ + activeFlag?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/oa/erp/erpProjectChangeBudget/index.ts b/src/api/oa/erp/erpProjectChangeBudget/index.ts new file mode 100644 index 0000000..f3bfbf2 --- /dev/null +++ b/src/api/oa/erp/erpProjectChangeBudget/index.ts @@ -0,0 +1,76 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ErpProjectChangeBudgetVO, ErpProjectChangeBudgetForm, ErpProjectChangeBudgetQuery } from '@/api/oa/erp/erpProjectChangeBudget/types'; + +/** + * 查询项目预算变更明细列表 + * @param query + * @returns {*} + */ + +export const listErpProjectChangeBudget = (query?: ErpProjectChangeBudgetQuery): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChangeBudget/list', + method: 'get', + params: query + }); +}; + +/** + * 查询项目预算变更明细详细 + * @param changeBudgetId + */ +export const getErpProjectChangeBudget = (changeBudgetId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChangeBudget/' + changeBudgetId, + method: 'get' + }); +}; + +/** + * 新增项目预算变更明细 + * @param data + */ +export const addErpProjectChangeBudget = (data: ErpProjectChangeBudgetForm) => { + return request({ + url: '/oa/erp/erpProjectChangeBudget', + method: 'post', + data: data + }); +}; + +/** + * 修改项目预算变更明细 + * @param data + */ +export const updateErpProjectChangeBudget = (data: ErpProjectChangeBudgetForm) => { + return request({ + url: '/oa/erp/erpProjectChangeBudget', + method: 'put', + data: data + }); +}; + +/** + * 删除项目预算变更明细 + * @param changeBudgetId + */ +export const delErpProjectChangeBudget = (changeBudgetId: string | number | Array) => { + return request({ + url: '/oa/erp/erpProjectChangeBudget/' + changeBudgetId, + method: 'delete' + }); +}; + +/** + * 下拉框查询项目预算变更明细列表 + * @param query + * @returns {*} + */ +export function getErpProjectChangeBudgetList (query) { + return request({ + url: '/oa/erp/erpProjectChangeBudget/getErpProjectChangeBudgetList', + method: 'get', + params: query + }); +}; diff --git a/src/api/oa/erp/erpProjectChangeBudget/types.ts b/src/api/oa/erp/erpProjectChangeBudget/types.ts new file mode 100644 index 0000000..21cbfa2 --- /dev/null +++ b/src/api/oa/erp/erpProjectChangeBudget/types.ts @@ -0,0 +1,156 @@ +export interface ErpProjectChangeBudgetVO { + /** + * 预算变更ID + */ + changeBudgetId: string | number; + + /** + * 变更申请ID + */ + projectChangeId: string | number; + + /** + * 预算详情ID + */ + budgetDetailId: string | number; + + /** + * 科目名称(材料费、人工费、安装费、差旅费、其他费用) + */ + subjectName: string; + + /** + * 变更前预算 + */ + budgetBefore: number; + + /** + * 变更后预算 + */ + budgetAfter: number; + + /** + * 已使用金额 + */ + amountUsed: number; + + /** + * 费用调整原因 + */ + adjustmentReason: string; + + /** + * 排序顺序 + */ + sortOrder: number; + + /** + * 备注 + */ + remark: string; + +} + +export interface ErpProjectChangeBudgetForm extends BaseEntity { + /** + * 预算变更ID + */ + changeBudgetId?: string | number; + + /** + * 变更申请ID + */ + projectChangeId?: string | number; + + /** + * 预算详情ID + */ + budgetDetailId?: string | number; + + /** + * 科目名称(材料费、人工费、安装费、差旅费、其他费用) + */ + subjectName?: string; + + /** + * 变更前预算 + */ + budgetBefore?: number; + + /** + * 变更后预算 + */ + budgetAfter?: number; + + /** + * 已使用金额 + */ + amountUsed?: number; + + /** + * 费用调整原因 + */ + adjustmentReason?: string; + + /** + * 排序顺序 + */ + sortOrder?: number; + + /** + * 备注 + */ + remark?: string; + +} + +export interface ErpProjectChangeBudgetQuery extends PageQuery { + + /** + * 变更申请ID + */ + projectChangeId?: string | number; + + /** + * 预算详情ID + */ + budgetDetailId?: string | number; + + /** + * 科目名称(材料费、人工费、安装费、差旅费、其他费用) + */ + subjectName?: string; + + /** + * 变更前预算 + */ + budgetBefore?: number; + + /** + * 变更后预算 + */ + budgetAfter?: number; + + /** + * 已使用金额 + */ + amountUsed?: number; + + /** + * 费用调整原因 + */ + adjustmentReason?: string; + + /** + * 排序顺序 + */ + sortOrder?: number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/oa/erp/erpProjectChangeProgress/index.ts b/src/api/oa/erp/erpProjectChangeProgress/index.ts new file mode 100644 index 0000000..ff88b8b --- /dev/null +++ b/src/api/oa/erp/erpProjectChangeProgress/index.ts @@ -0,0 +1,76 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ErpProjectChangeProgressVO, ErpProjectChangeProgressForm, ErpProjectChangeProgressQuery } from '@/api/oa/erp/erpProjectChangeProgress/types'; + +/** + * 查询项目进度变更明细列表 + * @param query + * @returns {*} + */ + +export const listErpProjectChangeProgress = (query?: ErpProjectChangeProgressQuery): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChangeProgress/list', + method: 'get', + params: query + }); +}; + +/** + * 查询项目进度变更明细详细 + * @param changeProgressId + */ +export const getErpProjectChangeProgress = (changeProgressId: string | number): AxiosPromise => { + return request({ + url: '/oa/erp/erpProjectChangeProgress/' + changeProgressId, + method: 'get' + }); +}; + +/** + * 新增项目进度变更明细 + * @param data + */ +export const addErpProjectChangeProgress = (data: ErpProjectChangeProgressForm) => { + return request({ + url: '/oa/erp/erpProjectChangeProgress', + method: 'post', + data: data + }); +}; + +/** + * 修改项目进度变更明细 + * @param data + */ +export const updateErpProjectChangeProgress = (data: ErpProjectChangeProgressForm) => { + return request({ + url: '/oa/erp/erpProjectChangeProgress', + method: 'put', + data: data + }); +}; + +/** + * 删除项目进度变更明细 + * @param changeProgressId + */ +export const delErpProjectChangeProgress = (changeProgressId: string | number | Array) => { + return request({ + url: '/oa/erp/erpProjectChangeProgress/' + changeProgressId, + method: 'delete' + }); +}; + +/** + * 下拉框查询项目进度变更明细列表 + * @param query + * @returns {*} + */ +export function getErpProjectChangeProgressList (query) { + return request({ + url: '/oa/erp/erpProjectChangeProgress/getErpProjectChangeProgressList', + method: 'get', + params: query + }); +}; diff --git a/src/api/oa/erp/erpProjectChangeProgress/types.ts b/src/api/oa/erp/erpProjectChangeProgress/types.ts new file mode 100644 index 0000000..d098f37 --- /dev/null +++ b/src/api/oa/erp/erpProjectChangeProgress/types.ts @@ -0,0 +1,171 @@ +export interface ErpProjectChangeProgressVO { + /** + * 进度变更ID + */ + changeProgressId: string | number; + + /** + * 变更申请ID + */ + projectChangeId: string | number; + + /** + * 计划阶段ID + */ + planStageId: string | number; + + /** + * 项目里程碑 + */ + milestoneName: string; + + /** + * 原计划时间起 + */ + originalStart: string; + + /** + * 原计划时间止 + */ + originalEnd: string; + + /** + * 变更后时间起 + */ + changedStart: string; + + /** + * 变更后时间止 + */ + changedEnd: string; + + /** + * 里程碑完成程度(百分比) + */ + completionDegree: number; + + /** + * 排序顺序 + */ + sortOrder: number; + + /** + * 备注 + */ + remark: string; + +} + +export interface ErpProjectChangeProgressForm extends BaseEntity { + /** + * 进度变更ID + */ + changeProgressId?: string | number; + + /** + * 变更申请ID + */ + projectChangeId?: string | number; + + /** + * 计划阶段ID + */ + planStageId?: string | number; + + /** + * 项目里程碑 + */ + milestoneName?: string; + + /** + * 原计划时间起 + */ + originalStart?: string; + + /** + * 原计划时间止 + */ + originalEnd?: string; + + /** + * 变更后时间起 + */ + changedStart?: string; + + /** + * 变更后时间止 + */ + changedEnd?: string; + + /** + * 里程碑完成程度(百分比) + */ + completionDegree?: number; + + /** + * 排序顺序 + */ + sortOrder?: number; + + /** + * 备注 + */ + remark?: string; + +} + +export interface ErpProjectChangeProgressQuery extends PageQuery { + + /** + * 变更申请ID + */ + projectChangeId?: string | number; + + /** + * 计划阶段ID + */ + planStageId?: string | number; + + /** + * 项目里程碑 + */ + milestoneName?: string; + + /** + * 原计划时间起 + */ + originalStart?: string; + + /** + * 原计划时间止 + */ + originalEnd?: string; + + /** + * 变更后时间起 + */ + changedStart?: string; + + /** + * 变更后时间止 + */ + changedEnd?: string; + + /** + * 里程碑完成程度(百分比) + */ + completionDegree?: number; + + /** + * 排序顺序 + */ + sortOrder?: number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/views/oa/crm/crmQuoteInfo/edit.vue.backup b/src/views/oa/crm/crmQuoteInfo/edit.vue.backup new file mode 100644 index 0000000..24e7817 --- /dev/null +++ b/src/views/oa/crm/crmQuoteInfo/edit.vue.backup @@ -0,0 +1,839 @@ + + + + + diff --git a/src/views/oa/erp/erpProjectChange/edit.vue b/src/views/oa/erp/erpProjectChange/edit.vue new file mode 100644 index 0000000..385eeb7 --- /dev/null +++ b/src/views/oa/erp/erpProjectChange/edit.vue @@ -0,0 +1,423 @@ + + + diff --git a/src/views/oa/erp/erpProjectChange/index.vue b/src/views/oa/erp/erpProjectChange/index.vue new file mode 100644 index 0000000..2ca74d7 --- /dev/null +++ b/src/views/oa/erp/erpProjectChange/index.vue @@ -0,0 +1,492 @@ + + + diff --git a/src/views/oa/erp/erpProjectChangeBudget/index.vue b/src/views/oa/erp/erpProjectChangeBudget/index.vue new file mode 100644 index 0000000..c09ccaf --- /dev/null +++ b/src/views/oa/erp/erpProjectChangeBudget/index.vue @@ -0,0 +1,305 @@ + + + diff --git a/src/views/oa/erp/erpProjectChangeProgress/index.vue b/src/views/oa/erp/erpProjectChangeProgress/index.vue new file mode 100644 index 0000000..1ac72f9 --- /dev/null +++ b/src/views/oa/erp/erpProjectChangeProgress/index.vue @@ -0,0 +1,374 @@ + + + diff --git a/src/views/oa/erp/erpProjectPlan/gantt.vue b/src/views/oa/erp/erpProjectPlan/gantt.vue new file mode 100644 index 0000000..d7341f7 --- /dev/null +++ b/src/views/oa/erp/erpProjectPlan/gantt.vue @@ -0,0 +1,411 @@ + + + + +