diff --git a/src/router/index.ts b/src/router/index.ts
index 84cb70c..a512d98 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -115,7 +115,20 @@ export const constantRoutes: RouteRecordRaw[] = [
component: () => import('@/views/oa/erp/erpProjectPlan/edit.vue'),
name: 'ErpProjectPlanView',
meta: { title: '项目计划查看', activeMenu: '/oa/erp/erpProjectPlan' }
- }
+ },
+
+ {
+ path: 'erpProjectPlan/gantt/:projectPlanId',
+ component: () => import('@/views/oa/erp/erpProjectPlan/gantt.vue'),
+ name: 'ErpProjectPlanGantt',
+ meta: { title: '项目计划甘特图', activeMenu: '/oa/erp/erpProjectPlan' }
+ },
+ {
+ path: 'erpProjectChange/edit/:projectChangeId',
+ component: () => import('@/views/oa/erp/erpProjectChange/edit.vue'),
+ name: 'ErpProjectChangeEdit',
+ meta: { title: '项目变更编辑', activeMenu: '/oa/erp/erpProjectPlan' }
+ },
]
},
{
@@ -128,7 +141,13 @@ export const constantRoutes: RouteRecordRaw[] = [
component: () => import('@/views/oa/crm/crmQuoteInfo/edit.vue'),
name: 'crmQuoteInfoEdit',
meta: { title: '报价单编辑', activeMenu: '/oa/crm/crmQuoteInfo' }
- }
+ },
+ {
+ path: 'crmQuoteInfo/view/:quoteId',
+ component: () => import('@/views/oa/crm/crmQuoteInfo/edit.vue'),
+ name: 'crmQuoteInfoView',
+ meta: { title: '报价单查看', activeMenu: '/oa/crm/crmQuoteInfo' }
+ },
]
},
{
diff --git a/src/views/oa/erp/erpProjectPlan/edit.vue b/src/views/oa/erp/erpProjectPlan/edit.vue
index 6071315..16188d5 100644
--- a/src/views/oa/erp/erpProjectPlan/edit.vue
+++ b/src/views/oa/erp/erpProjectPlan/edit.vue
@@ -93,7 +93,7 @@
添加阶段
-
+
@@ -140,11 +140,33 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -174,6 +196,7 @@ import { getErpProjectPlan, addErpProjectPlan, updateErpProjectPlan, projectPlan
import { ErpProjectPlanForm } from '@/api/oa/erp/erpProjectPlan/types';
import { listUser } from '@/api/system/user';
import { getErpProjectInfoList } from '@/api/oa/erp/projectInfo';
+import type { ProjectInfoVO } from '@/api/oa/erp/projectInfo/types';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { useUserStore } from '@/store/modules/user';
@@ -284,7 +307,7 @@ const buttonLoading = ref(false);
const draftLoading = ref(false);
const submitLoading = ref(false);
const currentAction = ref<'draft' | 'submit' | null>(null);
-const projectInfoList = ref([]);
+const projectInfoList = ref[]>([]);
const userList = ref([]);
const selectedProjectCode = ref(''); // 展示选中项目的编号
const baseDataLoaded = ref(false);
@@ -321,7 +344,7 @@ const resetForm = () => {
/** 获取项目列表 */
const getProjectInfoList = async () => {
const res = await getErpProjectInfoList({});
- projectInfoList.value = res.data;
+ projectInfoList.value = (res.data || []) as Partial[];
};
/** 获取用户列表 */
@@ -370,20 +393,44 @@ const handleDeleteStage = (index: number) => {
form.value.planStageList?.splice(index, 1);
};
-/** 处理项目选择变化,自动填充项目经理、部门负责人和项目编号 */
-const handleProjectChange = (projectId: number) => {
- if (!projectId) {
- form.value.managerId = undefined;
- form.value.chargeId = undefined;
+interface ProjectSyncOptions {
+ syncManagerAndCharge?: boolean;
+ syncPaymentMethod?: boolean;
+}
+
+/** 处理项目选择变化,自动填充项目经理、部门负责人、付款方式和项目编号 */
+const handleProjectChange = (
+ projectId?: string | number,
+ { syncManagerAndCharge = true, syncPaymentMethod = true }: ProjectSyncOptions = {}
+) => {
+ const isEmptySelection = projectId === undefined || projectId === null || projectId === '';
+ if (isEmptySelection) {
+ if (syncManagerAndCharge) {
+ form.value.managerId = undefined;
+ form.value.chargeId = undefined;
+ }
+ if (syncPaymentMethod) {
+ form.value.paymentMethod = undefined;
+ }
selectedProjectCode.value = '';
return;
}
- const project = projectInfoList.value.find(p => p.projectId === projectId);
- if (project) {
- form.value.managerId = project.managerId;
- form.value.chargeId = project.chargeId;
- selectedProjectCode.value = project.projectCode || '';
+
+ const project = projectInfoList.value.find(item => String(item.projectId) === String(projectId));
+ if (!project) {
+ return;
}
+
+ if (syncManagerAndCharge) {
+ form.value.managerId = project.managerId ?? undefined;
+ form.value.chargeId = project.chargeId ?? undefined;
+ }
+
+ if (syncPaymentMethod) {
+ form.value.paymentMethod = (project.paymentMethod as string) ?? undefined;
+ }
+
+ selectedProjectCode.value = (project.projectCode as string) || '';
};
@@ -441,7 +488,7 @@ const submitForm = async (status = 'draft') => {
stage.projectId = form.value.projectId;
});
}
-
+
// 提交审批
if (status === 'submit') {
const project = projectInfoList.value.find(p => p.projectId === form.value.projectId);
@@ -562,6 +609,12 @@ const loadFormData = async () => {
if (!form.value.planStageList) {
form.value.planStageList = [];
}
+ if (form.value.projectId) {
+ handleProjectChange(form.value.projectId, {
+ syncManagerAndCharge: false,
+ syncPaymentMethod: false
+ });
+ }
} else {
resetForm();
form.value.flowStatus = 'draft';
diff --git a/src/views/oa/erp/erpProjectPlan/index.vue b/src/views/oa/erp/erpProjectPlan/index.vue
index 2234207..de10874 100644
--- a/src/views/oa/erp/erpProjectPlan/index.vue
+++ b/src/views/oa/erp/erpProjectPlan/index.vue
@@ -75,7 +75,7 @@
{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}
-
+
@@ -86,9 +86,15 @@
+
+
+
+
+
+
@@ -372,6 +378,21 @@
approvalRecordRef.value?.init(row.projectPlanId);
}
+ /** 项目计划变更按钮操作 */
+ const handlePlanChange = (row: ErpProjectPlanVO) => {
+ // 跳转到项目变更编辑页面,传递项目 ID
+ router.push(`/oa/erp/erpProjectChange/edit/0?projectId=${row.projectId}`);
+ }
+
+ /** 甘特图按钮 */
+ const handleGantt = (row: ErpProjectPlanVO) => {
+ if (!row.projectPlanId) {
+ proxy?.$modal.msgWarning('请先保存项目计划信息');
+ return;
+ }
+ router.push(`/oa/erp/erpProjectPlan/gantt/${row.projectPlanId}`);
+ }
+
/** 修改按钮操作(保留用于对话框形式) */
const handleUpdate = async (row?: ErpProjectPlanVO) => {
reset();