1.0.29 市场项目审批流程

dev
yinq 1 month ago
parent cc7fcb20d8
commit 4d4ef160d4

@ -163,18 +163,15 @@
</el-table-column>
<el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
<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-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-tooltip>
<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-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-button link type="info" icon="View" @click="handleApprovalRecord(scope.row)"></el-button>
</el-tooltip>

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

@ -93,7 +93,7 @@
<dict-tag :options="contract_flag" :value="scope.row.contractFlag" />
</template>
</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="businessDirection" width="100" v-if="columns[5].visible">
<template #default="scope">
@ -111,8 +111,8 @@
</template>
</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="paymentMethod" 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="paymentMethod" width="120" v-if="columns[9].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="chargeName" width="120" v-if="columns[12].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: 16, 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: 20, label: `备注`, visible: true },
{ key: 21, label: `激活标识`, visible: false },

Loading…
Cancel
Save