|
|
|
|
@ -4,6 +4,17 @@
|
|
|
|
|
<template #header>
|
|
|
|
|
<div style="text-align: left; font-weight: bold; font-size: 24px">合同{{ form.contractId ? ' - 修改' : ' - 新增' }}</div>
|
|
|
|
|
</template>
|
|
|
|
|
<!-- 审批按钮组件 -->
|
|
|
|
|
<approvalButton
|
|
|
|
|
@submitForm="submitForm"
|
|
|
|
|
@approvalVerifyOpen="approvalVerifyOpen"
|
|
|
|
|
@handleApprovalRecord="handleApprovalRecord"
|
|
|
|
|
:buttonLoading="buttonLoading"
|
|
|
|
|
:id="form.contractId"
|
|
|
|
|
:status="form.contractStatus"
|
|
|
|
|
:pageType="routeParams.type"
|
|
|
|
|
:mode="false"
|
|
|
|
|
/>
|
|
|
|
|
<el-form ref="contractInfoFormRef" :model="form" :rules="rules" label-width="120px">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
@ -199,10 +210,10 @@
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
|
|
|
|
|
<el-card shadow="never" style="margin-top: 20px">
|
|
|
|
|
<el-card shadow="never" style="margin-top: 20px" v-if="routeParams.type !== 'approval'">
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">保 存</el-button>
|
|
|
|
|
<el-button :loading="buttonLoading" type="primary" @click="() => submitForm('draft', false)">保 存</el-button>
|
|
|
|
|
<el-button @click="goBack">返 回</el-button>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
@ -349,6 +360,11 @@
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<!-- 提交审批组件 -->
|
|
|
|
|
<submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" />
|
|
|
|
|
<!-- 审批记录 -->
|
|
|
|
|
<approvalRecord ref="approvalRecordRef" />
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
@ -360,6 +376,9 @@ import { ContractMaterialVO, ContractMaterialForm } from '@/api/oa/erp/contractM
|
|
|
|
|
import { getBaseUnitInfoList } from '@/api/oa/base/unitInfo';
|
|
|
|
|
import { getRuleGenerateCode } from '@/api/system/codeRule';
|
|
|
|
|
import SaleMaterialSelect from '@/components/SaleMaterialSelect/index.vue';
|
|
|
|
|
import SubmitVerify from '@/components/Process/submitVerify.vue';
|
|
|
|
|
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
|
|
|
|
|
import ApprovalButton from '@/components/Process/approvalButton.vue';
|
|
|
|
|
import { ref } from 'vue';
|
|
|
|
|
import { listDept } from '@/api/system/dept';
|
|
|
|
|
import { getCrmCustomerInfoList } from '@/api/oa/crm/customerInfo';
|
|
|
|
|
@ -367,6 +386,9 @@ import { getBasePrintTemplateList } from '@/api/oa/base/printTemplate';
|
|
|
|
|
|
|
|
|
|
const route = useRoute();
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
|
|
|
|
|
|
|
// 路由参数
|
|
|
|
|
const routeParams = ref<Record<string, any>>({});
|
|
|
|
|
const { contract_category, business_direction, active_flag, contract_flag, contract_type, contract_status, plan_flag } = toRefs<any>(
|
|
|
|
|
proxy?.useDict('contract_category', 'business_direction', 'active_flag', 'contract_flag', 'contract_type', 'contract_status', 'plan_flag')
|
|
|
|
|
);
|
|
|
|
|
@ -374,6 +396,13 @@ const { contract_category, business_direction, active_flag, contract_flag, contr
|
|
|
|
|
const buttonLoading = ref(false);
|
|
|
|
|
const contractInfoFormRef = ref<ElFormInstance>();
|
|
|
|
|
|
|
|
|
|
// 审批相关组件引用
|
|
|
|
|
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
|
|
|
|
|
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
|
|
|
|
|
|
|
|
|
|
// 任务变量
|
|
|
|
|
const taskVariables = ref<Record<string, any>>({});
|
|
|
|
|
|
|
|
|
|
const type = ref(0);
|
|
|
|
|
const dialog = reactive<DialogOption>({
|
|
|
|
|
visible: false,
|
|
|
|
|
@ -565,17 +594,28 @@ const handleFile = () => {
|
|
|
|
|
ossFileModel.value = form.value.ossId as any;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const submitForm = () => {
|
|
|
|
|
const submitForm = (status: string, mode: boolean) => {
|
|
|
|
|
contractInfoFormRef.value?.validate(async (valid: boolean) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
buttonLoading.value = true;
|
|
|
|
|
if (form.value.contractId) {
|
|
|
|
|
await updateContractInfo(form.value).finally(() => (buttonLoading.value = false));
|
|
|
|
|
} else {
|
|
|
|
|
await addContractInfo(form.value).finally(() => (buttonLoading.value = false));
|
|
|
|
|
try {
|
|
|
|
|
if (form.value.contractId) {
|
|
|
|
|
await updateContractInfo(form.value).finally(() => (buttonLoading.value = false));
|
|
|
|
|
} else {
|
|
|
|
|
await addContractInfo(form.value).finally(() => (buttonLoading.value = false));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (status === 'draft') {
|
|
|
|
|
proxy?.$modal.msgSuccess('暂存成功');
|
|
|
|
|
goBack();
|
|
|
|
|
} else {
|
|
|
|
|
// 提交审批流程
|
|
|
|
|
await handleStartWorkFlow();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('保存合同信息失败:', error);
|
|
|
|
|
buttonLoading.value = false;
|
|
|
|
|
}
|
|
|
|
|
proxy?.$modal.msgSuccess('操作成功');
|
|
|
|
|
goBack();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
@ -743,8 +783,12 @@ const loadSelectOptions = () => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onMounted(async () => {
|
|
|
|
|
// 获取路由参数
|
|
|
|
|
routeParams.value = route.query || {};
|
|
|
|
|
|
|
|
|
|
const id = (route.query.id || route.params.id) as string | number;
|
|
|
|
|
loadSelectOptions();
|
|
|
|
|
|
|
|
|
|
if (id) {
|
|
|
|
|
proxy?.$modal.loading('正在加载数据,请稍后...');
|
|
|
|
|
const res = await getContractInfo(id);
|
|
|
|
|
@ -772,6 +816,47 @@ onMounted(async () => {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 启动审批流程
|
|
|
|
|
const handleStartWorkFlow = async () => {
|
|
|
|
|
try {
|
|
|
|
|
// 设置流程变量
|
|
|
|
|
taskVariables.value = {
|
|
|
|
|
contractId: form.value.contractId,
|
|
|
|
|
contractName: form.value.contractName,
|
|
|
|
|
totalPrice: form.value.totalPrice,
|
|
|
|
|
contractCode: form.value.contractCode
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 这里可以根据需要调用启动流程的API
|
|
|
|
|
// 由于合同审批流程在index.vue中已经实现,这里主要是处理审批中的状态
|
|
|
|
|
proxy?.$modal.msgSuccess('提交审批成功');
|
|
|
|
|
goBack();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('启动审批流程失败:', error);
|
|
|
|
|
proxy?.$modal.msgError('启动审批流程失败');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 审批验证打开
|
|
|
|
|
const approvalVerifyOpen = async () => {
|
|
|
|
|
if (submitVerifyRef.value && routeParams.value.taskId) {
|
|
|
|
|
submitVerifyRef.value.openDialog(routeParams.value.taskId);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 查看审批记录
|
|
|
|
|
const handleApprovalRecord = () => {
|
|
|
|
|
if (approvalRecordRef.value && form.value.contractId) {
|
|
|
|
|
approvalRecordRef.value.init(form.value.contractId);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 提交回调
|
|
|
|
|
const submitCallback = async () => {
|
|
|
|
|
await proxy?.$tab.closePage(route);
|
|
|
|
|
window.history.go(-1);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 监听上传组件返回的文件(ossId 串)并同步到表单字段
|
|
|
|
|
// 同步表单初值到上传模型
|
|
|
|
|
watch(
|
|
|
|
|
|