1.0.48 项目信息提交优化

dev
yinq 1 week ago
parent 2f3ac6e311
commit deff4da8c2

@ -267,8 +267,7 @@ import { ProjectTypeVO } from '@/api/oa/erp/projectType/types';
import { listUser } from '@/api/system/user'; import { listUser } from '@/api/system/user';
import { UserQuery } from '@/api/system/user/types'; import { UserQuery } from '@/api/system/user/types';
import { CodeRuleEnum, FlowCodeEnum, ProjectCategoryEnum } from '@/enums/OAEnum'; import { CodeRuleEnum, FlowCodeEnum, ProjectCategoryEnum } from '@/enums/OAEnum';
import { listProjectContracts, addProjectContracts, delProjectContracts, getErpProjectContractsList } from '@/api/oa/erp/projectContracts'; import { getErpProjectContractsList } from '@/api/oa/erp/projectContracts';
import { ProjectContractsForm, ProjectContractsQuery } from '@/api/oa/erp/projectContracts/types';
import { listContractInfo } from '@/api/oa/erp/contractInfo'; import { listContractInfo } from '@/api/oa/erp/contractInfo';
import { ContractInfoVO, ContractInfoQuery } from '@/api/oa/erp/contractInfo/types'; import { ContractInfoVO, ContractInfoQuery } from '@/api/oa/erp/contractInfo/types';
import { getInfo } from '@/api/login'; import { getInfo } from '@/api/login';
@ -337,6 +336,7 @@ type ProjectInfoFormEx = ProjectInfoForm & {
flowCode?: string; flowCode?: string;
variables?: any; variables?: any;
bizExt?: any; bizExt?: any;
projectContractsList?: any[];
}; };
const initFormData: ProjectInfoFormEx = { const initFormData: ProjectInfoFormEx = {
@ -363,7 +363,8 @@ const initFormData: ProjectInfoFormEx = {
activeFlag: '1', activeFlag: '1',
flowCode: undefined, flowCode: undefined,
variables: undefined, variables: undefined,
bizExt: undefined bizExt: undefined,
projectContractsList: []
}; };
const data = reactive<{ form: ProjectInfoFormEx; rules: any }>({ const data = reactive<{ form: ProjectInfoFormEx; rules: any }>({
@ -373,6 +374,11 @@ const data = reactive<{ form: ProjectInfoFormEx; rules: any }>({
projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }], projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }], projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
businessDirection: [{ required: true, message: '业务方向不能为空', trigger: 'change' }], 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' }] projectCategory: [{ required: true, message: '项目类别不能为空', trigger: 'change' }]
} }
}); });
@ -534,6 +540,8 @@ onMounted(async () => {
// //
await getProjectContractsList(); await getProjectContractsList();
} else { } else {
//
(form.value as any).projectContractsList = [];
// //
try { try {
const userInfoRes = await getInfo(); const userInfoRes = await getInfo();
@ -581,7 +589,10 @@ const approvalVerifyOpen = async () => {
// ================== ================== // ================== ==================
const contractLoading = ref(false); const contractLoading = ref(false);
const projectContractsList = ref<any[]>([]); // 使 form
const projectContractsList = computed(() => {
return (form.value as any).projectContractsList || [];
});
const contractDialog = reactive({ visible: false }); const contractDialog = reactive({ visible: false });
const contractTableRef = ref(); const contractTableRef = ref();
const contractSelectLoading = ref(false); const contractSelectLoading = ref(false);
@ -605,8 +616,8 @@ const getProjectContractsList = async () => {
contractLoading.value = true; contractLoading.value = true;
const params = { projectId: form.value.projectId } as any; const params = { projectId: form.value.projectId } as any;
const res = await getErpProjectContractsList(params); const res = await getErpProjectContractsList(params);
// left join // left join form
projectContractsList.value = res.data || []; (form.value as any).projectContractsList = res.data || [];
} catch (error) { } catch (error) {
console.error('查询项目关联合同失败:', error); console.error('查询项目关联合同失败:', error);
} finally { } finally {
@ -651,47 +662,62 @@ const handleContractSelectionChange = (selection: ContractInfoVO[]) => {
}; };
/** 提交合同关联 */ /** 提交合同关联 */
const submitContractRelation = async () => { const submitContractRelation = () => {
if (selectedContracts.value.length === 0) { if (selectedContracts.value.length === 0) {
proxy?.$modal.msgWarning('请至少选择一个合同'); proxy?.$modal.msgWarning('请至少选择一个合同');
return; return;
} }
try { // projectContractsList
contractButtonLoading.value = true; if (!(form.value as any).projectContractsList) {
// (form.value as any).projectContractsList = [];
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;
} }
//
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) => { const handleDeleteContract = async (row: any) => {
try { try {
await proxy?.$modal.confirm(`是否确认删除与合同"${row.contractName}"的关联关系?`); 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('删除关联成功'); proxy?.$modal.msgSuccess('删除关联成功');
//
await getProjectContractsList();
} catch (error) { } catch (error) {
console.error('删除合同关联失败:', error); console.error('删除合同关联失败:', error);
} }

@ -60,13 +60,17 @@
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item <!-- <el-dropdown-item-->
v-for="dict in project_category" <!-- v-for="dict in project_category"-->
:key="dict.value" <!-- :key="dict.value"-->
:command="dict.value" <!-- :command="dict.value"-->
> <!-- >-->
{{ dict.label }} <!-- {{ dict.label }}-->
</el-dropdown-item> <!-- </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> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -96,14 +100,14 @@
<dict-tag :options="contract_flag" :value="scope.row.contractFlag" /> <dict-tag :options="contract_flag" :value="scope.row.contractFlag" />
</template> </template>
</el-table-column> </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"> <template #default="scope">
<el-link type="primary" underline @click="handleLedger(scope.row)"> <el-link type="primary" underline @click="handleLedger(scope.row)">
{{ scope.row.projectCode }} {{ scope.row.projectCode }}
</el-link> </el-link>
</template> </template>
</el-table-column> </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"> <el-table-column label="业务方向" align="center" prop="businessDirection" width="100" v-if="columns[5].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="business_direction" :value="scope.row.businessDirection" /> <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="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="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="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"> <el-table-column label="项目状态" align="center" prop="projectStatus" v-if="columns[16].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="project_status" :value="scope.row.projectStatus" /> <dict-tag :options="project_status" :value="scope.row.projectStatus" />

Loading…
Cancel
Save