申报审批功能

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 biddingExpertRef = ref();
const bidList = ref<any[]>([]); const bidList = ref<any[]>([]);
const biddingExpertList = ref([]); const biddingExpertList = ref([]);

View File

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

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <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 { useRoute, useRouter } from 'vue-router';
import { Page, useVbenModal } from '@vben/common-ui'; import { Page, useVbenModal } from '@vben/common-ui';
@ -14,9 +14,11 @@ import {
import { logger } from 'common-utils'; import { logger } from 'common-utils';
import Apis from '#/api'; import Apis from '#/api';
import temporaryFormModal from '#/components/temporary-form-modal/temporary-form-modal.vue';
import { useVxeTable } from '#/hooks/vxeTable'; import { useVxeTable } from '#/hooks/vxeTable';
import { DICT_TYPE, getDictDatasAsync } from '#/utils/dict'; import { DICT_TYPE, getDictDatasAsync } from '#/utils/dict';
import { FileUploader } from '#/utils/file'; 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 BasisTable from '#/views/contract/components/basis-table/basis-table.vue';
import ApprovalCard from '#/views/contract/iframe-info/components/info-approval/approval-card.vue'; import ApprovalCard from '#/views/contract/iframe-info/components/info-approval/approval-card.vue';
import chooseUserModal from '#/views/system/user/choose-user-modal.vue'; import chooseUserModal from '#/views/system/user/choose-user-modal.vue';
@ -35,15 +37,22 @@ const [ChooseCompanyModal, chooseCompanyModalApi] = useVbenModal({
connectedComponent: chooseCompanyModal, connectedComponent: chooseCompanyModal,
}); });
const [TemporaryFormModal, temporaryFormModalApi] = useVbenModal({
connectedComponent: temporaryFormModal,
});
const fileUploader = new FileUploader({}); const fileUploader = new FileUploader({});
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const id = ref(route.params.id); const id = ref(route.params.id);
const taskId = route.query.taskId;
const auditId = ref();
const pageRef = ref(); const pageRef = ref();
const formRef = ref(); const formRef = ref();
const formRefByBaseInfo = ref(); const sbCtrBasePt = ref<any>({});
const isLoading = ref(false); 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 fileList = ref<UploadFile[]>([]);
const fileListByProfile = ref<UploadFile[]>([]); const fileListByProfile = ref<UploadFile[]>([]);
@ -109,7 +99,7 @@ function handleBack() {
* 页面返回并关闭tab * 页面返回并关闭tab
*/ */
function back() { function back() {
router.replace('/contract/declaration/list'); router.replace('/contract/declaration/todo');
} }
const handleChange = (info: UploadChangeParam) => { 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); const collapseActiveKey = ref(collapses);
function areArraysEqualUnordered(arr1, arr2) { function areArraysEqualUnordered(arr1, arr2) {
if (arr1.length !== arr2.length) return false; 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) { async function handleChooseUserConfirm(e) {
chooseUserModalApi.close(); if (chooseUserModalOpenType.value === 'submit') {
selectUsers.value = e;
handleSubmit('submit');
chooseUserModalApi.close();
return;
}
formRef.value.setFormData({ formRef.value.setFormData({
assigneeList: e.map((item) => item.ACCOUNT_ID), assigneeList: e.map((item) => item.ACCOUNT_ID),
@ -169,7 +166,6 @@ async function handleChooseUserConfirm(e) {
// isLoading.value = true; // isLoading.value = true;
} }
function handleDownloadTemplate() {}
async function handleSave() { async function handleSave() {
isLoading.value = true; isLoading.value = true;
@ -235,10 +231,10 @@ async function handleSave() {
title: '提示', title: '提示',
content: '保存成功!是否进行提交?', content: '保存成功!是否进行提交?',
onOk: () => { onOk: () => {
handleSubmit(); handleSubmit('openModal');
}, },
onCancel: () => { onCancel: () => {
back(); // back();
}, },
}); });
} catch (error) { } catch (error) {
@ -249,21 +245,127 @@ async function handleSave() {
} }
} }
async function handleSubmit() { async function handleSubmit(type: 'openModal' | 'submit') {
try { if (type === 'openModal') {
await Apis.sbCtrBasePt.post_submit({ params: { guid: id.value } }); chooseUserModalOpenType.value = 'submit';
message.success('提交成功'); chooseUserModalApi.setData({
back(); title: '选择审批人',
} catch (error) { });
message.error('提交失败,请稍候再试'); chooseUserModalApi.open();
logger.error('申报结果报错失败', error); }
} finally {
isLoading.value = false; 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 contractData = ref<any>({});
const businessData = ref<any>({});
const currData = ref({}); 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 }, params: { contractId: id.value },
}); });
contract = contract.rows[0];
if (contract && contract.contractId) { if (contract && contract.contractId) {
contractData.value = contract; 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); sbCtrBasePtData = sbCtrBasePtData.rows[0];
if (business.fileUuid) {
const files = await fileUploader.select(business.fileUuid); console.log(sbCtrBasePtData);
business.fileList = files; if (sbCtrBasePtData.fileUuid) {
const files = await fileUploader.select(sbCtrBasePtData.fileUuid);
sbCtrBasePtData.fileList = files;
} }
businessData.value = business; sbCtrBasePt.value = sbCtrBasePtData;
nextTick(() => { nextTick(() => {
formRefByBaseInfo.value.setFormData(contract); formRef.value.setFormData(sbCtrBasePtData);
formRef.value.setFormData(business);
}); });
} else { } else {
throw new Error('当前合同信息不存在'); throw new Error('当前合同信息不存在');
@ -364,6 +471,12 @@ onMounted(async () => {
@confirm="handleChooseUserConfirm" @confirm="handleChooseUserConfirm"
/> />
<TemporaryFormModal
v-model:loading="isTemporaryFormModalLoading"
class="w-[950px]"
@confirm="handleAudit('rejectConfirm', $event)"
/>
<a-affix <a-affix
:offset-top="0" :offset-top="0"
:style="{ zIndex: 50 }" :style="{ zIndex: 50 }"
@ -371,13 +484,35 @@ onMounted(async () => {
> >
<div class="flex w-full flex-row bg-white pl-1 pt-1"> <div class="flex w-full flex-row bg-white pl-1 pt-1">
<a-space class="flex-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>
<vben-button variant="primary" @click="handleSubmit()"> <vben-button
v-if="!taskId"
variant="primary"
@click="handleSubmit('openModal')"
>
送审 送审
</vben-button> </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>
<vben-button variant="secondary" @click="handleBack()"> <vben-button variant="secondary" @click="handleBack()">
@ -449,6 +584,15 @@ onMounted(async () => {
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-collapse-panel> </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> </a-collapse>
</div> </div>
</a-spin> </a-spin>