|
|
|
|
@ -1,5 +1,15 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div class="p-2">
|
|
|
|
|
<!-- 内容变更生成的新合同:提示激活后将继承原合同关联项目并作废原合同 -->
|
|
|
|
|
<el-alert
|
|
|
|
|
v-if="isFromContentChange"
|
|
|
|
|
type="info"
|
|
|
|
|
:closable="false"
|
|
|
|
|
show-icon
|
|
|
|
|
style="margin-bottom: 12px"
|
|
|
|
|
>
|
|
|
|
|
本合同由合同内容变更生成,激活后将继承原合同关联项目并作废原合同;下方关联项目已预填原合同项目。
|
|
|
|
|
</el-alert>
|
|
|
|
|
<el-card shadow="never" style="margin-top: 0">
|
|
|
|
|
<approvalButton
|
|
|
|
|
@submitForm="submitForm"
|
|
|
|
|
@ -41,8 +51,17 @@
|
|
|
|
|
<el-table-column label="部门" align="center" prop="deptName" min-width="140" />
|
|
|
|
|
<el-table-column label="项目经理" align="center" prop="managerName" min-width="120" />
|
|
|
|
|
<el-table-column label="金额" align="center" prop="amount" min-width="120" />
|
|
|
|
|
<el-table-column label="操作" width="80" align="center" fixed="right" v-if="!isFormDisabled">
|
|
|
|
|
<el-table-column label="操作" width="140" align="center" fixed="right" v-if="!isFormDisabled">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="scope.row.projectSource === PROJECT_SOURCE_NEW"
|
|
|
|
|
type="primary"
|
|
|
|
|
link
|
|
|
|
|
icon="Edit"
|
|
|
|
|
@click="handleEditProject(scope.row)"
|
|
|
|
|
>
|
|
|
|
|
编辑
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="danger" link icon="Delete" @click="handleRemoveProject(scope.row)">删除</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
@ -50,6 +69,13 @@
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<el-card shadow="never" style="margin-top: 0">
|
|
|
|
|
<template #header>
|
|
|
|
|
<el-row :gutter="10">
|
|
|
|
|
<el-col :span="1.5">
|
|
|
|
|
<span class="card-title">合同订单信息</span>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</template>
|
|
|
|
|
<el-form ref="projectInfoFormRef" :model="form" :rules="rules" label-width="120px">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
@ -107,27 +133,27 @@
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<!-- <el-col :span="12">
|
|
|
|
|
<el-form-item label="项目经理" prop="managerId">
|
|
|
|
|
<el-select v-model="form.managerId" placeholder="请选择项目经理" :disabled="isFormDisabled" clearable filterable>
|
|
|
|
|
<el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="部门负责人" prop="chargeId">
|
|
|
|
|
<el-select v-model="form.chargeId" placeholder="请选择部门负责人" :disabled="true">
|
|
|
|
|
<el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="分管副总" prop="deputyId">
|
|
|
|
|
<el-select v-model="form.deputyId" placeholder="请选择分管副总" :disabled="true">
|
|
|
|
|
<el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-col> -->
|
|
|
|
|
<!-- <el-col :span="12">-->
|
|
|
|
|
<!-- <el-form-item label="部门负责人" prop="chargeId">-->
|
|
|
|
|
<!-- <el-select v-model="form.chargeId" placeholder="请选择部门负责人" :disabled="true">-->
|
|
|
|
|
<!-- <el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />-->
|
|
|
|
|
<!-- </el-select>-->
|
|
|
|
|
<!-- </el-form-item>-->
|
|
|
|
|
<!-- </el-col>-->
|
|
|
|
|
<!-- <el-col :span="12">-->
|
|
|
|
|
<!-- <el-form-item label="分管副总" prop="deputyId">-->
|
|
|
|
|
<!-- <el-select v-model="form.deputyId" placeholder="请选择分管副总" :disabled="true">-->
|
|
|
|
|
<!-- <el-option v-for="user in userList" :key="user.userId" :label="user.nickName" :value="user.userId" />-->
|
|
|
|
|
<!-- </el-select>-->
|
|
|
|
|
<!-- </el-form-item>-->
|
|
|
|
|
<!-- </el-col>-->
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="合同编号" prop="contractCode">
|
|
|
|
|
<el-input v-model="form.contractCode" placeholder="请输入合同编号" :disabled="true" />
|
|
|
|
|
@ -138,6 +164,13 @@
|
|
|
|
|
<el-input v-model="form.contractName" placeholder="请输入合同名称" :disabled="true" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="合同总价" prop="amount">
|
|
|
|
|
<el-input v-model="form.amount" placeholder="请输入合同总价" :disabled="true">
|
|
|
|
|
<template #append>元</template>
|
|
|
|
|
</el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="抄送人员" prop="peopleId">
|
|
|
|
|
<el-select v-model="form.peopleId" placeholder="请选择抄送人员" :disabled="isFormDisabled" clearable filterable multiple>
|
|
|
|
|
@ -146,19 +179,13 @@
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="合同总价" prop="amount">
|
|
|
|
|
<el-input v-model="form.amount" placeholder="请输入合同总价" :disabled="true">
|
|
|
|
|
<template #append>元</template>
|
|
|
|
|
</el-input>
|
|
|
|
|
<el-form-item label="订单状态" prop="projectStatus">
|
|
|
|
|
<el-input
|
|
|
|
|
:value="(project_status || []).find((d: any) => d.value === form.projectStatus)?.label || ''"
|
|
|
|
|
disabled
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<!-- <el-col :span="12">-->
|
|
|
|
|
<!-- <el-form-item label="项目状态" prop="projectStatus">-->
|
|
|
|
|
<!-- <el-radio-group v-model="form.projectStatus" disabled>-->
|
|
|
|
|
<!-- <el-radio v-for="dict in project_status" :key="dict.value" :value="dict.value">{{ dict.label }} </el-radio>-->
|
|
|
|
|
<!-- </el-radio-group>-->
|
|
|
|
|
<!-- </el-form-item>-->
|
|
|
|
|
<!-- </el-col>-->
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="终版合同上传" prop="ossId">
|
|
|
|
|
<FileUpload
|
|
|
|
|
@ -182,50 +209,16 @@
|
|
|
|
|
|
|
|
|
|
<!-- 项目阶段计划 -->
|
|
|
|
|
<el-card shadow="never" style="margin-top: 0">
|
|
|
|
|
<!-- <template #header>-->
|
|
|
|
|
<!-- <el-row :gutter="10">-->
|
|
|
|
|
<!-- <el-col :span="1.5">-->
|
|
|
|
|
<!-- <span class="card-title">回款阶段</span>-->
|
|
|
|
|
<!-- </el-col>-->
|
|
|
|
|
<!-- <el-col :span="1.5" v-if="!isFormDisabled">-->
|
|
|
|
|
<!-- <el-button type="primary" icon="Plus" @click="handleAddPlanStage">添加阶段</el-button>-->
|
|
|
|
|
<!-- </el-col>-->
|
|
|
|
|
<!-- </el-row>-->
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
<template #header>
|
|
|
|
|
<el-row :gutter="10">
|
|
|
|
|
<el-col :span="1.5">
|
|
|
|
|
<span class="card-title">回款信息</span>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<el-table :data="planStageList" border stripe max-height="400">
|
|
|
|
|
<el-table-column label="序号" type="index" width="60" align="center" />
|
|
|
|
|
<!-- <el-table-column label="项目阶段" width="150" align="center">-->
|
|
|
|
|
<!-- <template #default="scope">-->
|
|
|
|
|
<!-- <el-select v-model="scope.row.projectPhases" placeholder="请选择项目阶段" style="width: 100%" :disabled="isFormDisabled">-->
|
|
|
|
|
<!-- <el-option v-for="dict in project_phases" :key="dict.value" :label="dict.label" :value="dict.value" />-->
|
|
|
|
|
<!-- </el-select>-->
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
<!-- </el-table-column>-->
|
|
|
|
|
<!-- <el-table-column label="计划开始时间" width="160" align="center">-->
|
|
|
|
|
<!-- <template #default="scope">-->
|
|
|
|
|
<!-- <el-date-picker-->
|
|
|
|
|
<!-- v-model="scope.row.planStartTime"-->
|
|
|
|
|
<!-- type="date"-->
|
|
|
|
|
<!-- value-format="YYYY-MM-DD"-->
|
|
|
|
|
<!-- placeholder="选择日期"-->
|
|
|
|
|
<!-- style="width: 100%"-->
|
|
|
|
|
<!-- :disabled="isFormDisabled"-->
|
|
|
|
|
<!-- />-->
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
<!-- </el-table-column>-->
|
|
|
|
|
<!-- <el-table-column label="计划结束时间" width="160" align="center">-->
|
|
|
|
|
<!-- <template #default="scope">-->
|
|
|
|
|
<!-- <el-date-picker-->
|
|
|
|
|
<!-- v-model="scope.row.planEndTime"-->
|
|
|
|
|
<!-- type="date"-->
|
|
|
|
|
<!-- value-format="YYYY-MM-DD"-->
|
|
|
|
|
<!-- placeholder="选择日期"-->
|
|
|
|
|
<!-- style="width: 100%"-->
|
|
|
|
|
<!-- :disabled="isFormDisabled"-->
|
|
|
|
|
<!-- />-->
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
<!-- </el-table-column>-->
|
|
|
|
|
<el-table-column label="回款阶段" width="220" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-select v-model="scope.row.collectionStage" placeholder="请选择回款阶段" clearable style="width: 100%" :disabled="isFormDisabled">
|
|
|
|
|
@ -246,18 +239,6 @@
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<!-- <el-table-column label="预计回款金额" width="150" align="center">-->
|
|
|
|
|
<!-- <template #default="scope">-->
|
|
|
|
|
<!-- <el-input-number-->
|
|
|
|
|
<!-- v-model="scope.row.repaymentAmount"-->
|
|
|
|
|
<!-- :min="0"-->
|
|
|
|
|
<!-- :precision="2"-->
|
|
|
|
|
<!-- controls-position="right"-->
|
|
|
|
|
<!-- style="width: 100%"-->
|
|
|
|
|
<!-- :disabled="isFormDisabled"-->
|
|
|
|
|
<!-- />-->
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
<!-- </el-table-column>-->
|
|
|
|
|
<el-table-column label="预计回款时间" width="220" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
@ -310,8 +291,15 @@
|
|
|
|
|
</el-table>
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<!-- 新增项目弹窗 -->
|
|
|
|
|
<el-dialog title="新增项目" v-model="addProjectDialog.visible" width="800px" append-to-body destroy-on-close @close="resetAddProjectForm">
|
|
|
|
|
<!-- 新增/编辑项目弹窗 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
:title="addProjectDialog.mode === 'edit' ? '编辑项目' : '新增项目'"
|
|
|
|
|
v-model="addProjectDialog.visible"
|
|
|
|
|
width="800px"
|
|
|
|
|
append-to-body
|
|
|
|
|
destroy-on-close
|
|
|
|
|
@close="resetAddProjectForm"
|
|
|
|
|
>
|
|
|
|
|
<el-form ref="addProjectFormRef" :model="addProjectForm" :rules="addProjectRules" label-width="120px">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
@ -411,6 +399,9 @@
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup name="ProjectInfoEdit" lang="ts">
|
|
|
|
|
import { ref, reactive, computed, toRefs, getCurrentInstance, onMounted, nextTick, watch } from 'vue';
|
|
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
|
|
import type { ComponentInternalInstance } from 'vue';
|
|
|
|
|
import { getErpProjectInfoList, getProjectInfo } from '@/api/oa/erp/projectInfo';
|
|
|
|
|
import { saveContractOrder, updateContractOrder, submitContractOrderAndFlowStart } from '@/api/oa/erp/contractOrder';
|
|
|
|
|
import { ProjectInfoForm, ProjectInfoVO } from '@/api/oa/erp/projectInfo/types';
|
|
|
|
|
@ -477,9 +468,19 @@ type ProjectRow = ProjectContractsVO & { _projectForm?: any };
|
|
|
|
|
|
|
|
|
|
const projectList = ref<ProjectRow[]>([]);
|
|
|
|
|
const projectListLoading = ref(false);
|
|
|
|
|
/** 本合同是否由内容变更生成(有原合同ID),用于展示提示并预填原合同关联项目 */
|
|
|
|
|
const isFromContentChange = ref(false);
|
|
|
|
|
|
|
|
|
|
// ----- 新增项目弹窗 -----
|
|
|
|
|
const addProjectDialog = reactive({ visible: false });
|
|
|
|
|
// ----- 新增/编辑项目弹窗 -----
|
|
|
|
|
const addProjectDialog = reactive<{
|
|
|
|
|
visible: boolean;
|
|
|
|
|
mode: 'add' | 'edit';
|
|
|
|
|
currentRow: ProjectRow | null;
|
|
|
|
|
}>({
|
|
|
|
|
visible: false,
|
|
|
|
|
mode: 'add',
|
|
|
|
|
currentRow: null
|
|
|
|
|
});
|
|
|
|
|
const addProjectFormRef = ref<FormInstance>();
|
|
|
|
|
const addProjectCodeGenerated = ref(false);
|
|
|
|
|
const addProjectSubmitLoading = ref(false);
|
|
|
|
|
@ -500,7 +501,9 @@ const addProjectRules = {
|
|
|
|
|
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
|
|
|
|
|
projectCategory: [{ required: true, message: '项目类别不能为空', trigger: 'change' }],
|
|
|
|
|
deptId: [{ required: true, message: '部门不能为空', trigger: 'change' }],
|
|
|
|
|
managerId: [{ required: true, message: '项目经理不能为空', trigger: 'change' }]
|
|
|
|
|
managerId: [{ required: true, message: '项目经理不能为空', trigger: 'change' }],
|
|
|
|
|
deputyId: [{ required: true, message: '分管副总不能为空', trigger: 'change' }],
|
|
|
|
|
chargeId: [{ required: true, message: '部门负责人不能为空', trigger: 'change' }]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const generateAddProjectCode = async () => {
|
|
|
|
|
@ -531,12 +534,26 @@ const resetAddProjectForm = () => {
|
|
|
|
|
addProjectCodeGenerated.value = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 新增项目确定:校验后加入 projectList(projectSource=新增),提交时由 submitForm 统一保存 */
|
|
|
|
|
/** 新增/编辑项目确定:校验后加入或更新 projectList,提交时由 submitForm 统一保存 */
|
|
|
|
|
const submitAddProject = () => {
|
|
|
|
|
addProjectFormRef.value?.validate((valid: boolean) => {
|
|
|
|
|
if (!valid) return;
|
|
|
|
|
const dept = deptInfoList.value.find((d: any) => d.deptId === addProjectForm.deptId);
|
|
|
|
|
const manager = userList.value.find((u: any) => u.userId === addProjectForm.managerId);
|
|
|
|
|
if (addProjectDialog.mode === 'edit' && addProjectDialog.currentRow) {
|
|
|
|
|
// 编辑已有“新增项目”行
|
|
|
|
|
const row = addProjectDialog.currentRow;
|
|
|
|
|
row._projectForm = { ...addProjectForm };
|
|
|
|
|
row.remark = addProjectForm.remark;
|
|
|
|
|
row.projectCode = addProjectForm.projectCode;
|
|
|
|
|
row.projectName = addProjectForm.projectName;
|
|
|
|
|
row.deptName = dept ? dept.deptName : undefined;
|
|
|
|
|
row.managerName = manager ? manager.nickName : undefined;
|
|
|
|
|
row.amount = addProjectForm.amount as any;
|
|
|
|
|
row.projectCategory = addProjectForm.projectCategory;
|
|
|
|
|
proxy?.$modal.msgSuccess('项目修改成功');
|
|
|
|
|
} else {
|
|
|
|
|
// 新增项目行
|
|
|
|
|
const row: ProjectRow = {
|
|
|
|
|
projectContractsId: undefined as any,
|
|
|
|
|
projectId: undefined as any,
|
|
|
|
|
@ -554,13 +571,49 @@ const submitAddProject = () => {
|
|
|
|
|
_projectForm: { ...addProjectForm }
|
|
|
|
|
};
|
|
|
|
|
projectList.value.push(row);
|
|
|
|
|
addProjectDialog.visible = false;
|
|
|
|
|
proxy?.$modal.msgSuccess('已添加到待保存列表,请在提交时一并保存');
|
|
|
|
|
}
|
|
|
|
|
addProjectDialog.visible = false;
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleAddProject = () => {
|
|
|
|
|
addProjectDialog.mode = 'add';
|
|
|
|
|
addProjectDialog.currentRow = null;
|
|
|
|
|
resetAddProjectForm();
|
|
|
|
|
// 新增项目时默认把合同总价带入金额
|
|
|
|
|
addProjectForm.amount = form.value.amount;
|
|
|
|
|
addProjectDialog.visible = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 编辑“新增项目”行:仅对 projectSource=新增 的行开放 */
|
|
|
|
|
const handleEditProject = (row: ProjectRow) => {
|
|
|
|
|
if (row.projectSource !== PROJECT_SOURCE_NEW) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
addProjectDialog.mode = 'edit';
|
|
|
|
|
addProjectDialog.currentRow = row;
|
|
|
|
|
const pf = row._projectForm || {};
|
|
|
|
|
addProjectForm.projectCode = pf.projectCode ?? row.projectCode;
|
|
|
|
|
addProjectForm.projectName = pf.projectName ?? row.projectName;
|
|
|
|
|
addProjectForm.projectCategory = pf.projectCategory ?? row.projectCategory;
|
|
|
|
|
addProjectForm.deptId = pf.deptId ?? undefined;
|
|
|
|
|
addProjectForm.managerId = pf.managerId ?? undefined;
|
|
|
|
|
addProjectForm.chargeId = pf.chargeId ?? undefined;
|
|
|
|
|
addProjectForm.deputyId = pf.deputyId ?? undefined;
|
|
|
|
|
if (pf.peopleId) {
|
|
|
|
|
addProjectForm.peopleId = Array.isArray(pf.peopleId)
|
|
|
|
|
? pf.peopleId
|
|
|
|
|
: String(pf.peopleId)
|
|
|
|
|
.split(',')
|
|
|
|
|
.map((id: string) => id.trim())
|
|
|
|
|
.filter((id: string) => id) as any;
|
|
|
|
|
} else {
|
|
|
|
|
addProjectForm.peopleId = undefined as any;
|
|
|
|
|
}
|
|
|
|
|
addProjectForm.amount = pf.amount ?? row.amount;
|
|
|
|
|
addProjectForm.remark = pf.remark ?? row.remark;
|
|
|
|
|
addProjectCodeGenerated.value = !!addProjectForm.projectCode;
|
|
|
|
|
addProjectDialog.visible = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@ -652,6 +705,23 @@ const getDeptInfoListSelect = async () => {
|
|
|
|
|
deptInfoList.value = res.data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 新增/编辑项目弹窗中:选择部门后,自动回填部门负责人和分管副总
|
|
|
|
|
watch(
|
|
|
|
|
() => addProjectForm.deptId,
|
|
|
|
|
(newDeptId) => {
|
|
|
|
|
if (!newDeptId) {
|
|
|
|
|
addProjectForm.chargeId = undefined;
|
|
|
|
|
addProjectForm.deputyId = undefined;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const deptInfo = deptInfoList.value.find((dept: any) => dept.deptId === newDeptId);
|
|
|
|
|
if (deptInfo) {
|
|
|
|
|
addProjectForm.chargeId = deptInfo.leader;
|
|
|
|
|
addProjectForm.deputyId = deptInfo.vicePresident;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const userList = ref([]);
|
|
|
|
|
const getUserList = async () => {
|
|
|
|
|
const params: UserQuery = { pageNum: 1, pageSize: 9999 };
|
|
|
|
|
@ -733,7 +803,6 @@ const data = reactive<{ form: ProjectInfoFormEx; rules: any }>({
|
|
|
|
|
projectCategory: [{ required: true, message: '订单类别不能为空', trigger: 'change' }],
|
|
|
|
|
projectTypeId: [{ required: true, message: '订单类型不能为空', trigger: 'change' }],
|
|
|
|
|
deptId: [{ required: true, message: '部门不能为空', trigger: 'change' }],
|
|
|
|
|
managerId: [{ required: true, message: '项目经理不能为空', trigger: 'change' }],
|
|
|
|
|
peopleId: [{ required: true, message: '抄送人员不能为空', trigger: 'change' }],
|
|
|
|
|
ossId: [{ required: true, message: '请上传终版合同', trigger: 'change' }]
|
|
|
|
|
}
|
|
|
|
|
@ -823,6 +892,7 @@ const submitForm = (status: string, mode: boolean) => {
|
|
|
|
|
projectId: submitData.projectId,
|
|
|
|
|
projectCode: submitData.projectCode,
|
|
|
|
|
projectName: submitData.projectName,
|
|
|
|
|
businessDirection: submitData.businessDirection,
|
|
|
|
|
contractManagerId: submitData.peopleId,
|
|
|
|
|
hasExistProject
|
|
|
|
|
};
|
|
|
|
|
@ -853,6 +923,7 @@ const loadSelectOptions = async () => {
|
|
|
|
|
|
|
|
|
|
/** 根据路由 contractId 加载合同信息并回填表单;有项目则加载主项目+阶段+关联项目,无则从合同带出 */
|
|
|
|
|
const loadContractInfo = async () => {
|
|
|
|
|
isFromContentChange.value = false;
|
|
|
|
|
const contractId = routeParams.value.contractId as string | number;
|
|
|
|
|
if (contractId) {
|
|
|
|
|
try {
|
|
|
|
|
@ -922,10 +993,24 @@ const loadContractInfo = async () => {
|
|
|
|
|
} as ErpProjectPlanStageForm;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
// 本合同由内容变更生成时:预填原合同关联项目,并展示提示
|
|
|
|
|
const originalId = (contractData as any).originalContractId;
|
|
|
|
|
if (originalId != null && originalId !== '') {
|
|
|
|
|
isFromContentChange.value = true;
|
|
|
|
|
projectListLoading.value = true;
|
|
|
|
|
try {
|
|
|
|
|
const projRes = await getErpProjectContractsList({ contractId: originalId } as any);
|
|
|
|
|
projectList.value = (projRes.data || []).map((item: any) => ({ ...(item as any) }));
|
|
|
|
|
} finally {
|
|
|
|
|
projectListLoading.value = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 关联项目列表从 erp_project_contracts 加载(form.contractId 已在上面分支中设置)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 关联项目列表从 erp_project_contracts 加载(若已从原合同预填则不再覆盖)
|
|
|
|
|
if (!isFromContentChange.value) {
|
|
|
|
|
await loadProjectContractsList();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('查询合同信息失败:', error);
|
|
|
|
|
}
|
|
|
|
|
|