申报审批功能

This commit is contained in:
z9130 2024-10-23 09:09:45 +08:00
parent 40e5205ccb
commit 9ca397a7c5
3 changed files with 199 additions and 52 deletions

View File

@ -51,6 +51,7 @@ function isRequired(field: string): string {
}
const biddingExpertRef = ref();
const bidList = ref<any[]>([]);
const biddingExpertList = ref([]);

View File

@ -116,7 +116,9 @@ export function getFormSchema(params: any = {}) {
console.log(formRef.value.form);
chooseCompanyModalApi.setData({
title: '选择合同相对人',
guids: [formRef.value.form.providerId],
guids: formRef.value.form.providerId
? [formRef.value.form.providerId]
: [],
});
chooseCompanyModalApi.open();
},

View File

@ -1,5 +1,5 @@
<script setup lang="ts">
import { computed, nextTick, onMounted, reactive, ref } from 'vue';
import { computed, nextTick, onMounted, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { Page, useVbenModal } from '@vben/common-ui';
@ -14,9 +14,11 @@ import {
import { logger } from 'common-utils';
import Apis from '#/api';
import temporaryFormModal from '#/components/temporary-form-modal/temporary-form-modal.vue';
import { useVxeTable } from '#/hooks/vxeTable';
import { DICT_TYPE, getDictDatasAsync } from '#/utils/dict';
import { FileUploader } from '#/utils/file';
import AuditNodeTable from '#/views/contract/components/audit-node-table/audit-node-table.vue';
import BasisTable from '#/views/contract/components/basis-table/basis-table.vue';
import ApprovalCard from '#/views/contract/iframe-info/components/info-approval/approval-card.vue';
import chooseUserModal from '#/views/system/user/choose-user-modal.vue';
@ -35,15 +37,22 @@ const [ChooseCompanyModal, chooseCompanyModalApi] = useVbenModal({
connectedComponent: chooseCompanyModal,
});
const [TemporaryFormModal, temporaryFormModalApi] = useVbenModal({
connectedComponent: temporaryFormModal,
});
const fileUploader = new FileUploader({});
const router = useRouter();
const route = useRoute();
const id = ref(route.params.id);
const taskId = route.query.taskId;
const auditId = ref();
const pageRef = ref();
const formRef = ref();
const formRefByBaseInfo = ref();
const sbCtrBasePt = ref<any>({});
const isLoading = ref(false);
@ -72,25 +81,6 @@ function getColumns(): any {
];
}
/** Hooks - 表格 */
const gridOptions = reactive(
gridProps({
height: '120px',
columns: getColumns(),
data: [],
toolbarConfig: {
enabled: false,
},
pagerConfig: {
enabled: false,
},
rowConfig: {
useKey: true,
isCurrent: false,
},
}),
);
const fileList = ref<UploadFile[]>([]);
const fileListByProfile = ref<UploadFile[]>([]);
@ -109,7 +99,7 @@ function handleBack() {
* 页面返回并关闭tab
*/
function back() {
router.replace('/contract/declaration/list');
router.replace('/contract/declaration/todo');
}
const handleChange = (info: UploadChangeParam) => {
@ -135,7 +125,7 @@ function handleDelete() {
});
}
const collapses = ['1', '2', '3', '4', '5'];
const collapses = ['1', '2', '3', '4', '5', '6'];
const collapseActiveKey = ref(collapses);
function areArraysEqualUnordered(arr1, arr2) {
if (arr1.length !== arr2.length) return false;
@ -160,8 +150,15 @@ async function handleChooseCompanyConfirm(e) {
});
}
const selectUsers = ref([]);
const chooseUserModalOpenType = ref<'audit' | 'reject' | 'submit'>('audit');
async function handleChooseUserConfirm(e) {
chooseUserModalApi.close();
if (chooseUserModalOpenType.value === 'submit') {
selectUsers.value = e;
handleSubmit('submit');
chooseUserModalApi.close();
return;
}
formRef.value.setFormData({
assigneeList: e.map((item) => item.ACCOUNT_ID),
@ -169,7 +166,6 @@ async function handleChooseUserConfirm(e) {
// isLoading.value = true;
}
function handleDownloadTemplate() {}
async function handleSave() {
isLoading.value = true;
@ -235,10 +231,10 @@ async function handleSave() {
title: '提示',
content: '保存成功!是否进行提交?',
onOk: () => {
handleSubmit();
handleSubmit('openModal');
},
onCancel: () => {
back();
// back();
},
});
} catch (error) {
@ -249,21 +245,127 @@ async function handleSave() {
}
}
async function handleSubmit() {
try {
await Apis.sbCtrBasePt.post_submit({ params: { guid: id.value } });
message.success('提交成功');
back();
} catch (error) {
message.error('提交失败,请稍候再试');
logger.error('申报结果报错失败', error);
} finally {
isLoading.value = false;
async function handleSubmit(type: 'openModal' | 'submit') {
if (type === 'openModal') {
chooseUserModalOpenType.value = 'submit';
chooseUserModalApi.setData({
title: '选择审批人',
});
chooseUserModalApi.open();
}
if (type === 'submit') {
try {
await Apis.sbCtrBasePt.post_start({
data: {
guid: sbCtrBasePt.value.guid,
assigneeList: selectUsers.value.map((item) => item.ACCOUNT_ID),
},
});
message.success('提交成功');
back();
} catch (error) {
message.error('提交失败,请稍候再试');
logger.error('申报结果报错失败', error);
} finally {
isLoading.value = false;
}
}
}
const isTemporaryFormModalLoading = ref(false);
async function handleAudit(
type: 'accessConfirm' | 'reject' | 'rejectConfirm',
data?: any,
) {
console.log(type);
console.log(route);
if (type === 'accessConfirm') {
Modal.confirm({
title: '提示',
content: '是否确认审核通过?',
onOk: async () => {
try {
await Apis.selectMerchantsBasicInfo.post_submit({
params: {
guid: sbCtrBasePt.value.guid,
},
data: {
appId: id.value,
taskId: route.query.taskId,
nodeId: '',
comment: '通过',
},
});
message.success('审核通过');
back();
} catch (error) {
logger.error('审核通过失败', error);
message.error('审核通过失败,请稍候再试');
}
},
});
}
if (type === 'reject') {
Modal.confirm({
title: '提示',
content: '是否确认退回?',
onOk: () => {
temporaryFormModalApi.setData({
title: '退回原因',
schema: {
columns: {
comment: {
title: '',
key: 'comment',
col: { span: 24 },
colon: false,
component: {
name: 'a-textarea',
vModel: 'value',
autoSize: { minRows: 4, maxRows: 6 },
placeholder: '请输入',
},
rules: [{ required: true, message: '请输入退回原因' }],
},
},
},
});
temporaryFormModalApi.open();
},
});
}
if (type === 'rejectConfirm') {
isTemporaryFormModalLoading.value = true;
const comment = data.comment;
try {
await Apis.selectMerchantsBasicInfo.post_rollback({
params: {
guid: sbCtrBasePt.value.guid,
},
data: {
appId: sbCtrBasePt.value.guid,
taskId: route.query.taskId,
nodeId: '',
comment,
},
});
temporaryFormModalApi.close();
message.success('退回成功');
back();
} catch (error) {
logger.error('合同立项退回失败', error);
message.error('退回失败,请稍候再试');
} finally {
isTemporaryFormModalLoading.value = false;
}
}
}
const contractData = ref<any>({});
const businessData = ref<any>({});
const currData = ref({});
@ -307,25 +409,30 @@ onMounted(async () => {
});
//
const contract: any = await Apis.contractBaseInfo.get_getOne({
let contract: any = await Apis.contractBaseInfo.get_page({
params: { contractId: id.value },
});
contract = contract.rows[0];
if (contract && contract.contractId) {
contractData.value = contract;
const business: any = await Apis.selectMerchantsBasicInfo.get_getOne({
params: { contractId: contract.contractId },
//
let sbCtrBasePtData: any = await Apis.sbCtrBasePt.post_page({
// params: { ctrBaseId: contract.contractId },
params: { ctrBaseId: '123456' },
});
console.log(business);
if (business.fileUuid) {
const files = await fileUploader.select(business.fileUuid);
business.fileList = files;
sbCtrBasePtData = sbCtrBasePtData.rows[0];
console.log(sbCtrBasePtData);
if (sbCtrBasePtData.fileUuid) {
const files = await fileUploader.select(sbCtrBasePtData.fileUuid);
sbCtrBasePtData.fileList = files;
}
businessData.value = business;
sbCtrBasePt.value = sbCtrBasePtData;
nextTick(() => {
formRefByBaseInfo.value.setFormData(contract);
formRef.value.setFormData(business);
formRef.value.setFormData(sbCtrBasePtData);
});
} else {
throw new Error('当前合同信息不存在');
@ -364,6 +471,12 @@ onMounted(async () => {
@confirm="handleChooseUserConfirm"
/>
<TemporaryFormModal
v-model:loading="isTemporaryFormModalLoading"
class="w-[950px]"
@confirm="handleAudit('rejectConfirm', $event)"
/>
<a-affix
:offset-top="0"
:style="{ zIndex: 50 }"
@ -371,13 +484,35 @@ onMounted(async () => {
>
<div class="flex w-full flex-row bg-white pl-1 pt-1">
<a-space class="flex-1">
<vben-button variant="primary" @click="handleSave()">
<vben-button v-if="!taskId" variant="primary" @click="handleSave()">
保存
</vben-button>
<vben-button variant="primary" @click="handleSubmit()">
<vben-button
v-if="!taskId"
variant="primary"
@click="handleSubmit('openModal')"
>
送审
</vben-button>
<vben-button variant="destructive" @click="handleDelete()">
<vben-button
v-if="taskId"
variant="primary"
@click="handleAudit('accessConfirm')"
>
通过
</vben-button>
<vben-button
v-if="taskId"
variant="destructive"
@click="handleAudit('reject')"
>
退回
</vben-button>
<vben-button
v-if="sbCtrBasePt.flowInstanceId"
variant="destructive"
@click="handleDelete()"
>
废除
</vben-button>
<vben-button variant="secondary" @click="handleBack()">
@ -449,6 +584,15 @@ onMounted(async () => {
</a-form-item>
</a-form>
</a-collapse-panel>
<a-collapse-panel
v-if="sbCtrBasePt.flowInstanceId"
key="6"
class="w-full"
header="审批信息"
>
<AuditNodeTable :flow-instance-id="sbCtrBasePt.flowInstanceId" />
</a-collapse-panel>
</a-collapse>
</div>
</a-spin>