1.0.48 项目信息提交优化

dev
yinq 7 days ago
parent 2f3ac6e311
commit deff4da8c2

@ -267,8 +267,7 @@ import { ProjectTypeVO } from '@/api/oa/erp/projectType/types';
import { listUser } from '@/api/system/user';
import { UserQuery } from '@/api/system/user/types';
import { CodeRuleEnum, FlowCodeEnum, ProjectCategoryEnum } from '@/enums/OAEnum';
import { listProjectContracts, addProjectContracts, delProjectContracts, getErpProjectContractsList } from '@/api/oa/erp/projectContracts';
import { ProjectContractsForm, ProjectContractsQuery } from '@/api/oa/erp/projectContracts/types';
import { getErpProjectContractsList } from '@/api/oa/erp/projectContracts';
import { listContractInfo } from '@/api/oa/erp/contractInfo';
import { ContractInfoVO, ContractInfoQuery } from '@/api/oa/erp/contractInfo/types';
import { getInfo } from '@/api/login';
@ -337,6 +336,7 @@ type ProjectInfoFormEx = ProjectInfoForm & {
flowCode?: string;
variables?: any;
bizExt?: any;
projectContractsList?: any[];
};
const initFormData: ProjectInfoFormEx = {
@ -363,7 +363,8 @@ const initFormData: ProjectInfoFormEx = {
activeFlag: '1',
flowCode: undefined,
variables: undefined,
bizExt: undefined
bizExt: undefined,
projectContractsList: []
};
const data = reactive<{ form: ProjectInfoFormEx; rules: any }>({
@ -373,6 +374,11 @@ const data = reactive<{ form: ProjectInfoFormEx; rules: any }>({
projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
businessDirection: [{ required: true, message: '业务方向不能为空', trigger: 'change' }],
projectTypeId: [{ required: true, message: '项目类型不能为空', trigger: 'change' }],
deptId: [{ required: true, message: '部门不能为空', trigger: 'change' }],
managerId: [{ required: true, message: '项目经理不能为空', trigger: 'change' }],
deputyId: [{ required: true, message: '分管副总不能为空', trigger: 'change' }],
chargeId: [{ required: true, message: '部门负责人不能为空', trigger: 'change' }],
projectCategory: [{ required: true, message: '项目类别不能为空', trigger: 'change' }]
}
});
@ -534,6 +540,8 @@ onMounted(async () => {
//
await getProjectContractsList();
} else {
//
(form.value as any).projectContractsList = [];
//
try {
const userInfoRes = await getInfo();
@ -581,7 +589,10 @@ const approvalVerifyOpen = async () => {
// ================== ==================
const contractLoading = ref(false);
const projectContractsList = ref<any[]>([]);
// 使 form
const projectContractsList = computed(() => {
return (form.value as any).projectContractsList || [];
});
const contractDialog = reactive({ visible: false });
const contractTableRef = ref();
const contractSelectLoading = ref(false);
@ -605,8 +616,8 @@ const getProjectContractsList = async () => {
contractLoading.value = true;
const params = { projectId: form.value.projectId } as any;
const res = await getErpProjectContractsList(params);
// left join
projectContractsList.value = res.data || [];
// left join form
(form.value as any).projectContractsList = res.data || [];
} catch (error) {
console.error('查询项目关联合同失败:', error);
} finally {
@ -651,47 +662,62 @@ const handleContractSelectionChange = (selection: ContractInfoVO[]) => {
};
/** 提交合同关联 */
const submitContractRelation = async () => {
const submitContractRelation = () => {
if (selectedContracts.value.length === 0) {
proxy?.$modal.msgWarning('请至少选择一个合同');
return;
}
try {
contractButtonLoading.value = true;
//
const promises = selectedContracts.value.map((contract, index) => {
const data: ProjectContractsForm = {
projectId: form.value.projectId,
contractId: contract.contractId,
sortOrder: projectContractsList.value.length + index + 1,
activeFlag: '1'
};
return addProjectContracts(data);
});
await Promise.all(promises);
proxy?.$modal.msgSuccess('添加关联成功');
contractDialog.visible = false;
selectedContracts.value = [];
//
await getProjectContractsList();
} catch (error) {
console.error('添加合同关联失败:', error);
proxy?.$modal.msgError('添加关联失败');
} finally {
contractButtonLoading.value = false;
// projectContractsList
if (!(form.value as any).projectContractsList) {
(form.value as any).projectContractsList = [];
}
//
selectedContracts.value.forEach((contract, index) => {
const newContract = {
projectContractsId: Date.now() + index, // ID
projectId: form.value.projectId,
contractId: contract.contractId,
contractCode: contract.contractCode,
contractName: contract.contractName,
totalPrice: contract.totalPrice,
businessDirection: contract.businessDirection,
contractStatus: contract.contractStatus,
sortOrder: projectContractsList.value.length + index + 1,
activeFlag: '1',
remark: undefined
};
(form.value as any).projectContractsList.push(newContract);
});
proxy?.$modal.msgSuccess('添加关联成功');
contractDialog.visible = false;
selectedContracts.value = [];
//
contractTableRef.value?.clearSelection();
};
/** 删除合同关联 */
/** 删除合同关联 - 仅从本地数组删除,不调用接口 */
const handleDeleteContract = async (row: any) => {
try {
await proxy?.$modal.confirm(`是否确认删除与合同"${row.contractName}"的关联关系?`);
await delProjectContracts(row.projectContractsId);
// projectContractsList
if (!(form.value as any).projectContractsList) {
(form.value as any).projectContractsList = [];
return;
}
//
const index = (form.value as any).projectContractsList.findIndex(
(item: any) => item.contractId === row.contractId
);
if (index !== -1) {
(form.value as any).projectContractsList.splice(index, 1);
}
proxy?.$modal.msgSuccess('删除关联成功');
//
await getProjectContractsList();
} catch (error) {
console.error('删除合同关联失败:', error);
}

@ -60,13 +60,17 @@
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
v-for="dict in project_category"
:key="dict.value"
:command="dict.value"
>
{{ dict.label }}
</el-dropdown-item>
<!-- <el-dropdown-item-->
<!-- v-for="dict in project_category"-->
<!-- :key="dict.value"-->
<!-- :command="dict.value"-->
<!-- >-->
<!-- {{ dict.label }}-->
<!-- </el-dropdown-item>-->
<el-dropdown-item command="1">销售项目实施物流</el-dropdown-item>
<el-dropdown-item command="2">销售项目备件</el-dropdown-item>
<el-dropdown-item command="3">研发项目</el-dropdown-item>
<el-dropdown-item command="4">预投项目</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
@ -96,14 +100,14 @@
<dict-tag :options="contract_flag" :value="scope.row.contractFlag" />
</template>
</el-table-column>
<el-table-column label="项目编号" align="center" prop="projectCode" width="130" v-if="columns[3].visible">
<el-table-column label="项目编号" align="center" prop="projectCode" width="140" v-if="columns[3].visible">
<template #default="scope">
<el-link type="primary" underline @click="handleLedger(scope.row)">
{{ scope.row.projectCode }}
</el-link>
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="projectName" width="140" v-if="columns[4].visible" />
<el-table-column label="项目名称" align="center" prop="projectName" width="200" v-if="columns[4].visible" />
<el-table-column label="业务方向" align="center" prop="businessDirection" width="100" v-if="columns[5].visible">
<template #default="scope">
<dict-tag :options="business_direction" :value="scope.row.businessDirection" />
@ -126,7 +130,7 @@
<el-table-column label="部门负责人" align="center" prop="chargeName" width="120" v-if="columns[12].visible" />
<el-table-column label="分管副总" align="center" prop="deputyName" width="100" v-if="columns[13].visible" />
<el-table-column label="抄送人员" align="center" prop="peopleId" v-if="columns[14].visible" />
<el-table-column label="金额" align="center" prop="amount" v-if="columns[15].visible" />
<el-table-column label="金额" align="center" prop="amount" width="110" v-if="columns[15].visible" />
<el-table-column label="项目状态" align="center" prop="projectStatus" v-if="columns[16].visible">
<template #default="scope">
<dict-tag :options="project_status" :value="scope.row.projectStatus" />

Loading…
Cancel
Save