|
|
|
|
@ -201,7 +201,7 @@
|
|
|
|
|
<el-tooltip content="合同模板" placement="top" v-if="scope.row.templateId != null">
|
|
|
|
|
<el-button link type="info" icon="Download" @click="contractView(scope.row)"></el-button>
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
<el-tooltip content="上传终版合同" placement="top" v-if="showUploadButton(scope.row)">
|
|
|
|
|
<el-tooltip content="合同激活" placement="top" v-if="showUploadButton(scope.row)">
|
|
|
|
|
<el-button
|
|
|
|
|
link
|
|
|
|
|
type="success"
|
|
|
|
|
@ -225,9 +225,15 @@
|
|
|
|
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
|
|
|
</el-card>
|
|
|
|
|
<!-- 上传终版合同对话框 -->
|
|
|
|
|
<el-dialog v-model="uploadDialog.visible" title="上传终版合同" width="520px" append-to-body>
|
|
|
|
|
<el-form :model="uploadDialog.form" label-width="100px">
|
|
|
|
|
<el-form-item label="签字合同附件">
|
|
|
|
|
<el-dialog v-model="uploadDialog.visible" title="合同激活" width="520px" append-to-body>
|
|
|
|
|
<el-form ref="uploadFormRef" :model="uploadDialog.form" :rules="uploadFormRules" label-width="120px">
|
|
|
|
|
<el-form-item label="部门" prop="contractDeptId" required>
|
|
|
|
|
<el-select v-model="uploadDialog.form.contractDeptId" placeholder="请选择部门" style="width: 100%">
|
|
|
|
|
<el-option v-for="item in deptInfoList" :key="item.deptId" :label="item.deptName"
|
|
|
|
|
:value="item.deptId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="签字合同附件" prop="oss" required>
|
|
|
|
|
<fileUpload v-model="uploadDialog.form.oss" :limit="1" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
@ -281,6 +287,7 @@ import { ContractInfoVO, ContractInfoQuery } from '@/api/oa/erp/contractInfo/typ
|
|
|
|
|
import { updateContractInfo } from '@/api/oa/erp/contractInfo';
|
|
|
|
|
import download from '@/plugins/download';
|
|
|
|
|
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
|
|
|
|
|
import { allListDept } from '@/api/system/dept';
|
|
|
|
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
|
|
const route = useRoute();
|
|
|
|
|
@ -389,6 +396,8 @@ const uploadDialog = reactive({
|
|
|
|
|
loading: false,
|
|
|
|
|
form: {
|
|
|
|
|
contractId: undefined as any,
|
|
|
|
|
contractDeptId: undefined as any,
|
|
|
|
|
contractStatus: undefined as any,
|
|
|
|
|
oss: undefined as any
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
@ -408,6 +417,33 @@ const maintainDialog = reactive({
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const maintainFormRef = ref<ElFormInstance>();
|
|
|
|
|
const uploadFormRef = ref<ElFormInstance>();
|
|
|
|
|
|
|
|
|
|
// 合同激活表单校验规则
|
|
|
|
|
const uploadFormRules = {
|
|
|
|
|
contractDeptId: [{ required: true, message: '请选择部门', trigger: 'change' }],
|
|
|
|
|
oss: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
validator: (_rule: any, value: any, callback: (err?: Error) => void) => {
|
|
|
|
|
if (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {
|
|
|
|
|
callback(new Error('请上传签字合同附件'));
|
|
|
|
|
} else {
|
|
|
|
|
callback();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
trigger: 'change'
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 查询部门信息下拉框结构 */
|
|
|
|
|
const deptInfoList = ref([]);
|
|
|
|
|
const getDeptInfoListSelect = async () => {
|
|
|
|
|
const params = { deptCategory: '03' } as any;
|
|
|
|
|
const res = await allListDept(params);
|
|
|
|
|
deptInfoList.value = res.data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 查询合同信息列表 */
|
|
|
|
|
const getList = async () => {
|
|
|
|
|
@ -497,6 +533,7 @@ const handleExport = () => {
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
getList();
|
|
|
|
|
getDeptInfoListSelect();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 打开上传终版合同对话框
|
|
|
|
|
@ -504,8 +541,11 @@ const openUploadFinalDialog = (row?: ContractInfoVO) => {
|
|
|
|
|
const contractId = row?.contractId || ids.value[0];
|
|
|
|
|
if (!contractId) return;
|
|
|
|
|
uploadDialog.form.contractId = contractId;
|
|
|
|
|
uploadDialog.form.contractDeptId = undefined as any;
|
|
|
|
|
uploadDialog.form.oss = undefined as any;
|
|
|
|
|
uploadDialog.form.contractStatus = '5';
|
|
|
|
|
uploadDialog.visible = true;
|
|
|
|
|
nextTick(() => uploadFormRef.value?.clearValidate());
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const openMaintainDialog = () => {
|
|
|
|
|
@ -549,13 +589,23 @@ const submitMaintain = async () => {
|
|
|
|
|
|
|
|
|
|
// 确认上传,保存签字合同附件
|
|
|
|
|
const confirmUploadFinal = async () => {
|
|
|
|
|
try {
|
|
|
|
|
await uploadFormRef.value?.validate();
|
|
|
|
|
} catch {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const { contractId, contractDeptId, oss, contractStatus } = uploadDialog.form;
|
|
|
|
|
const ossStr = oss as unknown as string | string[];
|
|
|
|
|
const finalOss = Array.isArray(ossStr) ? (ossStr[0] ?? '') : (ossStr ?? '');
|
|
|
|
|
uploadDialog.loading = true;
|
|
|
|
|
try {
|
|
|
|
|
// 仅取单个附件 id
|
|
|
|
|
const ossStr = uploadDialog.form.oss as unknown as string;
|
|
|
|
|
const firstOssId = ossStr ? Number(String(ossStr).split(',')[0]) : undefined;
|
|
|
|
|
await updateContractInfo({ contractId: uploadDialog.form.contractId, signatureAppendix: ossStr } as any);
|
|
|
|
|
proxy?.$modal.msgSuccess('终版合同已上传');
|
|
|
|
|
await updateContractInfo({
|
|
|
|
|
contractId,
|
|
|
|
|
contractDeptId,
|
|
|
|
|
contractStatus,
|
|
|
|
|
signatureAppendix: finalOss
|
|
|
|
|
} as any);
|
|
|
|
|
proxy?.$modal.msgSuccess('合同已激活!');
|
|
|
|
|
uploadDialog.visible = false;
|
|
|
|
|
await getList();
|
|
|
|
|
} finally {
|
|
|
|
|
|