1.0.29 市场项目审批流程

dev
yinq 1 month ago
parent cc7fcb20d8
commit 4d4ef160d4

@ -163,18 +163,15 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="查看" placement="top" v-if="scope.row.contractStatus !== '1'"> <el-tooltip content="查看详情" placement="top" v-if="scope.row.contractStatus !== '1'">
<el-button link type="info" icon="DocumentChecked" @click="handleView(scope.row)"></el-button> <el-button link type="info" icon="DocumentChecked" @click="handleView(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="查看合同" placement="top" v-if="scope.row.contractStatus !== '1'"> <el-tooltip content="导出合同" placement="top" v-if=" scope.row.templateId != null">
<el-button link type="info" icon="Reading" @click="contractView(scope.row)"></el-button> <el-button link type="info" icon="Reading" @click="contractView(scope.row)"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="修改" placement="top" v-if="scope.row.contractStatus === '1'"> <el-tooltip content="修改" placement="top" v-if="scope.row.contractStatus === '1'">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa/erp:contractInfo:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['oa/erp:contractInfo:edit']"></el-button>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip content="删除" placement="top">-->
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['oa/erp:contractInfo:remove']"></el-button>-->
<!-- </el-tooltip>-->
<el-tooltip content="审批记录" placement="top" v-if="scope.row.contractStatus === '2' || scope.row.contractStatus === '3'"> <el-tooltip content="审批记录" placement="top" v-if="scope.row.contractStatus === '2' || scope.row.contractStatus === '3'">
<el-button link type="info" icon="View" @click="handleApprovalRecord(scope.row)"></el-button> <el-button link type="info" icon="View" @click="handleApprovalRecord(scope.row)"></el-button>
</el-tooltip> </el-tooltip>

@ -1,6 +1,6 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<el-card shadow="never"> <el-card shadow="never" style="margin-top: 0">
<!-- 审批按钮组件 --> <!-- 审批按钮组件 -->
<approvalButton <approvalButton
@submitForm="submitForm" @submitForm="submitForm"
@ -14,8 +14,8 @@
/> />
</el-card> </el-card>
<el-card shadow="never" style="margin-top: 20px"> <el-card shadow="never" style="margin-top: 0">
<el-form ref="projectInfoFormRef" :model="form" :disabled="routeParams.type === 'view'" :rules="rules" label-width="120px"> <el-form ref="projectInfoFormRef" :model="form" :disabled="routeParams.type === 'view' || routeParams.type === 'approval'" :rules="rules" label-width="120px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="有无合同" prop="contractFlag"> <el-form-item label="有无合同" prop="contractFlag">
@ -66,8 +66,6 @@
:options="projectTypeOptions" :options="projectTypeOptions"
:props="{ value: 'projectTypeId', label: 'typeName', children: 'children', emitPath: false }" :props="{ value: 'projectTypeId', label: 'typeName', children: 'children', emitPath: false }"
placeholder="请选择项目类型" placeholder="请选择项目类型"
clearable
filterable
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
@ -119,13 +117,13 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <!-- <el-col :span="12">-->
<el-form-item label="项目状态" prop="projectStatus"> <!-- <el-form-item label="项目状态" prop="projectStatus">-->
<el-radio-group v-model="form.projectStatus" disabled> <!-- <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 v-for="dict in project_status" :key="dict.value" :value="dict.value">{{ dict.label }} </el-radio>-->
</el-radio-group> <!-- </el-radio-group>-->
</el-form-item> <!-- </el-form-item>-->
</el-col> <!-- </el-col>-->
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
@ -136,14 +134,14 @@
</el-card> </el-card>
<!-- 项目关联合同 --> <!-- 项目关联合同 -->
<el-card shadow="never" style="margin-top: 20px" v-if="form.projectId && routeParams.type !== 'add'"> <el-card shadow="never" style="margin-top: 0">
<template #header> <template #header>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="1.5"> <el-col :span="1.5">
<span class="card-title">项目关联合同</span> <span class="card-title">项目关联合同</span>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAddContract" size="small" :disabled="routeParams.type === 'view'" <el-button type="primary" plain icon="Plus" @click="handleAddContract" size="small" :disabled="routeParams.type === 'view' || routeParams.type === 'approval'"
>新增关联 >新增关联
</el-button> </el-button>
</el-col> </el-col>
@ -268,11 +266,12 @@ import { listProjectType } from '@/api/oa/erp/projectType';
import { ProjectTypeVO } from '@/api/oa/erp/projectType/types'; 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, ProjectCategoryEnum } from '@/enums/OAEnum'; import { CodeRuleEnum, FlowCodeEnum, ProjectCategoryEnum } from '@/enums/OAEnum';
import { listProjectContracts, addProjectContracts, delProjectContracts, getErpProjectContractsList } from '@/api/oa/erp/projectContracts'; import { listProjectContracts, addProjectContracts, delProjectContracts, getErpProjectContractsList } from '@/api/oa/erp/projectContracts';
import { ProjectContractsForm, ProjectContractsQuery } from '@/api/oa/erp/projectContracts/types'; 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';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const route = useRoute(); const route = useRoute();
@ -294,7 +293,7 @@ const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
// //
const submitFormData = ref<StartProcessBo>({ const submitFormData = ref<StartProcessBo>({
businessId: '', businessId: '',
flowCode: 'OAP', // flowCode: '',
variables: {}, variables: {},
bizExt: {} bizExt: {}
}); });
@ -323,11 +322,14 @@ const getUserList = async () => {
}; };
const projectTypeOptions = ref<ProjectTypeVO[]>([]); const projectTypeOptions = ref<ProjectTypeVO[]>([]);
// parentId
const projectTypeList = ref<ProjectTypeVO[]>([]);
/** 查询项目类型列表 */ /** 查询项目类型列表 */
const getProjectTypeList = async () => { const getProjectTypeList = async () => {
const params = { spareFlag: form.value.spareFlag } as any; const params = { spareFlag: form.value.spareFlag } as any;
console.log(params);
const res = await listProjectType(params); const res = await listProjectType(params);
//
projectTypeList.value = res.data || [];
projectTypeOptions.value = proxy?.handleTree<ProjectTypeVO>(res.data, 'projectTypeId', 'parentId') || []; projectTypeOptions.value = proxy?.handleTree<ProjectTypeVO>(res.data, 'projectTypeId', 'parentId') || [];
}; };
@ -410,12 +412,26 @@ const submitForm = (status: string, mode: boolean) => {
// 稿 // 稿
if (status != 'draft') { if (status != 'draft') {
// //
submitData.flowCode = 'OAP'; submitData.flowCode = FlowCodeEnum.PROJECT_KEY;
// projectTypeId parentId
let projectTypeParentId = undefined;
if (submitData.projectTypeId) {
const projectType = projectTypeList.value.find(
(item) => item.projectTypeId === submitData.projectTypeId
);
if (projectType) {
projectTypeParentId = projectType.parentId;
}
}
// //
submitData.variables = { submitData.variables = {
projectId: submitData.projectId,
projectCode: submitData.projectCode,
projectName: submitData.projectName, projectName: submitData.projectName,
amount: submitData.amount, contractFlag: Number(submitData.contractFlag),
projectCode: submitData.projectCode projectTypeParentId: projectTypeParentId,
}; };
// //
submitData.bizExt = { submitData.bizExt = {
@ -453,39 +469,40 @@ const submitForm = (status: string, mode: boolean) => {
}; };
// //
const handleStartWorkFlow = async (data: ProjectInfoForm) => { // const handleStartWorkFlow = async (data: ProjectInfoForm) => {
try { // try {
submitFormData.value.flowCode = 'OAP'; // submitFormData.value.flowCode = 'OAP';
submitFormData.value.businessId = data.projectId; // submitFormData.value.businessId = data.projectId;
//
// // //
taskVariables.value = { // taskVariables.value = {
projectId: data.projectId, // projectId: data.projectId,
projectName: data.projectName, // projectCode: data.projectCode,
amount: data.amount, // projectName: data.projectName,
projectCode: data.projectCode // amount: data.amount,
}; // contractFlag: Number(data.contractFlag)
// };
// //
flowInstanceBizExtBo.value = { // //
businessTitle: '项目审批', // flowInstanceBizExtBo.value = {
businessCode: data.projectCode // businessTitle: '',
}; // businessCode: data.projectCode
// };
submitFormData.value.variables = taskVariables.value; //
submitFormData.value.bizExt = flowInstanceBizExtBo.value; // submitFormData.value.variables = taskVariables.value;
// submitFormData.value.bizExt = flowInstanceBizExtBo.value;
const resp = await startWorkFlow(submitFormData.value); //
// const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) { //
buttonLoading.value = false; // if (submitVerifyRef.value) {
await submitVerifyRef.value.openDialog(resp.data.taskId); // buttonLoading.value = false;
} // await submitVerifyRef.value.openDialog(resp.data.taskId);
} finally { // }
buttonLoading.value = false; // } finally {
router.go(-1); // buttonLoading.value = false;
} // router.go(-1);
}; // }
// };
// //
const loadSelectOptions = () => { const loadSelectOptions = () => {
@ -497,22 +514,18 @@ onMounted(async () => {
nextTick(async () => { nextTick(async () => {
// //
routeParams.value = route.query; routeParams.value = route.query;
proxy?.$modal.loading('正在加载数据,请稍后...');
loadSelectOptions(); loadSelectOptions();
const id = routeParams.value.id as string | number; const id = routeParams.value.id as string | number;
if (id && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) { if (id && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) {
proxy?.$modal.loading('正在加载数据,请稍后...');
const res = await getProjectInfo(id); const res = await getProjectInfo(id);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
// //
if (form.value.peopleId && typeof form.value.peopleId === 'string') { if (form.value.peopleId && typeof form.value.peopleId === 'string') {
form.value.peopleId = (form.value.peopleId as string).split(',').map((id) => { form.value.peopleId = (form.value.peopleId as string).split(',').map((id) => {
const numId = Number(id.trim()); return String(id.trim());
return isNaN(numId) ? id.trim() : numId;
}) as any; }) as any;
} }
proxy?.$modal.closeLoading();
// //
if (form.value.projectCode) { if (form.value.projectCode) {
isCodeGenerated.value = true; isCodeGenerated.value = true;
@ -521,6 +534,20 @@ onMounted(async () => {
// //
await getProjectContractsList(); await getProjectContractsList();
} else { } else {
//
try {
const userInfoRes = await getInfo();
const userVO = userInfoRes.data.user;
if (userInfoRes.data?.user) {
form.value.deptId = userVO.deptId;
form.value.managerId = userVO.userId;
form.value.chargeId = userVO.chargeId;
form.value.deputyId = userVO.deputyId;
}
} catch (error) {
console.error('获取用户信息失败:', error);
}
// //
if (form.value.projectCode) { if (form.value.projectCode) {
isCodeGenerated.value = true; isCodeGenerated.value = true;
@ -532,6 +559,7 @@ onMounted(async () => {
} }
form.value.spareFlag = form.value.projectCategory === ProjectCategoryEnum.SALE_SPARE ? '1' : '0'; form.value.spareFlag = form.value.projectCategory === ProjectCategoryEnum.SALE_SPARE ? '1' : '0';
await getProjectTypeList(); await getProjectTypeList();
proxy?.$modal.closeLoading();
}); });
}); });
@ -578,7 +606,7 @@ const getProjectContractsList = async () => {
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
projectContractsList.value = res.rows || []; projectContractsList.value = res.data || [];
} catch (error) { } catch (error) {
console.error('查询项目关联合同失败:', error); console.error('查询项目关联合同失败:', error);
} finally { } finally {

@ -93,7 +93,7 @@
<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="120" v-if="columns[3].visible" /> <el-table-column label="项目编号" align="center" prop="projectCode" width="130" v-if="columns[3].visible" />
<el-table-column label="项目名称" align="center" prop="projectName" width="140" v-if="columns[4].visible" /> <el-table-column label="项目名称" align="center" prop="projectName" width="140" 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">
@ -111,8 +111,8 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="项目类型" align="center" prop="typeName" width="130" v-if="columns[8].visible" /> <el-table-column label="项目类型" align="center" prop="typeName" width="130" v-if="columns[8].visible" />
<el-table-column label="付款方式" align="center" prop="paymentMethod" v-if="columns[9].visible" /> <el-table-column label="付款方式" align="center" prop="paymentMethod" width="120" v-if="columns[9].visible" />
<el-table-column label="部门" align="center" prop="deptName" v-if="columns[10].visible" /> <el-table-column label="部门" align="center" prop="deptName" width="120" v-if="columns[10].visible" />
<el-table-column label="项目经理" align="center" prop="managerName" width="100" v-if="columns[11].visible" /> <el-table-column label="项目经理" align="center" prop="managerName" width="100" v-if="columns[11].visible" />
<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" />
@ -208,7 +208,7 @@ const columns = ref<FieldOption[]>([
{ key: 15, label: `金额`, visible: true }, { key: 15, label: `金额`, visible: true },
{ key: 16, label: `项目状态`, visible: true }, { key: 16, label: `项目状态`, visible: true },
{ key: 17, label: `流程状态`, visible: true }, { key: 17, label: `流程状态`, visible: true },
{ key: 18, label: `排序号`, visible: true }, { key: 18, label: `排序号`, visible: false },
{ key: 19, label: `合同ID(预留)`, visible: false }, { key: 19, label: `合同ID(预留)`, visible: false },
{ key: 20, label: `备注`, visible: true }, { key: 20, label: `备注`, visible: true },
{ key: 21, label: `激活标识`, visible: false }, { key: 21, label: `激活标识`, visible: false },

Loading…
Cancel
Save