申报审批功能
This commit is contained in:
parent
40e5205ccb
commit
9ca397a7c5
|
@ -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([]);
|
||||||
|
|
|
@ -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();
|
||||||
},
|
},
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue