From bedd30704e88f4c2cbf3f886d7de71e4b6f5659a Mon Sep 17 00:00:00 2001 From: z9130 <984661593@qq.com> Date: Sun, 29 Sep 2024 17:31:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=90=8C=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-contract/src/utils/dict/index.ts | 37 +++-- .../views/contract/approval/edit/index.vue | 2 +- .../src/views/contract/business/edit/curd.tsx | 18 ++- .../views/contract/business/edit/index.vue | 137 +++++++++++++++++- .../contract/sign-authorization/list/crud.tsx | 37 +++-- .../src/views/contract/sign/edit/index.vue | 20 ++- .../src/views/contract/sign/list/crud.tsx | 2 +- .../src/views/contract/sign/list/index.vue | 7 +- .../src/views/meeting/start/index.vue | 6 +- 9 files changed, 210 insertions(+), 56 deletions(-) diff --git a/apps/web-contract/src/utils/dict/index.ts b/apps/web-contract/src/utils/dict/index.ts index 695e98a2..6a4b40c9 100644 --- a/apps/web-contract/src/utils/dict/index.ts +++ b/apps/web-contract/src/utils/dict/index.ts @@ -50,34 +50,39 @@ export function getDictOpts(dictType: string) { export async function getDictDatasAsync(dictTypes: string[]) { const dictDataMap: Record = {}; const foundTypes = new Set(); - + console.log(dictTypes); + // debugger; // Process static dictionary data for (const dictType of Object.keys(dataModule)) { if (dictTypes.includes(dictType)) { const dictEntries = dataModule[dictType]; - dictEntries.data.forEach((dictData) => { - dictData.type = dictType; - - if (!dictDataMap[dictType]) { - dictDataMap[dictType] = []; - } - dictDataMap[dictType].push({ - ...dictData, - value: dictData.value, - label: dictData.label, - colorType: dictData.colorType, - cssClass: dictData.cssClass, - } as DictDataType); - }); - foundTypes.add(dictType); + if (dictEntries && dictEntries.data && dictEntries.data.length > 0) { + dictEntries.data.forEach((dictData) => { + dictData.type = dictType; + if (!dictDataMap[dictType]) { + dictDataMap[dictType] = []; + } + dictDataMap[dictType].push({ + ...dictData, + value: dictData.value, + label: dictData.label, + colorType: dictData.colorType, + cssClass: dictData.cssClass, + } as DictDataType); + }); + foundTypes.add(dictType); + } // If all types are found, return early + console.log(foundTypes.size, dictTypes.length); if (foundTypes.size === dictTypes.length) { return dictDataMap; } } } + console.log(dictDataMap); + // Fetch remote dictionary data in parallel const promises = dictTypes.map(async (type) => { if (!foundTypes.has(type)) { diff --git a/apps/web-contract/src/views/contract/approval/edit/index.vue b/apps/web-contract/src/views/contract/approval/edit/index.vue index 0591684d..451c0c6a 100644 --- a/apps/web-contract/src/views/contract/approval/edit/index.vue +++ b/apps/web-contract/src/views/contract/approval/edit/index.vue @@ -311,7 +311,7 @@ async function handleSubmit() { async function handleAudit( type: 'accessConfirm' | 'reject' | 'rejectConfirm', - data: any, + data?: any, ) { console.log(type); diff --git a/apps/web-contract/src/views/contract/business/edit/curd.tsx b/apps/web-contract/src/views/contract/business/edit/curd.tsx index 7ed185ac..4fdf6954 100644 --- a/apps/web-contract/src/views/contract/business/edit/curd.tsx +++ b/apps/web-contract/src/views/contract/business/edit/curd.tsx @@ -5,7 +5,7 @@ import { useVbenModal } from '@vben/common-ui'; import { dict } from '@fast-crud/fast-crud'; import { VxeGrid } from 'vxe-table'; -import { DICT_TYPE, getDictOptions } from '#/utils/dict'; +import { DICT_TYPE } from '#/utils/dict'; import chooseCompanyModal from '../../company/list/choose-company-modal.vue'; import { getBidColumns, getProviderColumns } from './bid-columns'; @@ -14,7 +14,9 @@ const [ChooseCompanyModal, chooseCompanyModalApi] = useVbenModal({ connectedComponent: chooseCompanyModal, }); -export function getFormSchema(_params: any = {}) { +export function getFormSchema(params: any = {}) { + const { formRef, dictMap = {} } = params; + const xGridRef = ref(); /** Hooks - 表格 */ @@ -85,7 +87,7 @@ export function getFormSchema(_params: any = {}) { vModel: 'value', class: 'min-w-[200px]', dict: dict({ - data: getDictOptions(DICT_TYPE.contract_project_type), + data: dictMap[DICT_TYPE.contract_project_type], }), }, rules: [{ required: true, message: '请选择项目类别' }], @@ -99,7 +101,7 @@ export function getFormSchema(_params: any = {}) { vModel: 'value', class: 'min-w-[200px]', dict: dict({ - data: getDictOptions(DICT_TYPE.comprehensive_project_name), + data: dictMap[DICT_TYPE.comprehensive_project_name], }), }, rules: [{ required: true, message: '请输入项目名称' }], @@ -113,7 +115,7 @@ export function getFormSchema(_params: any = {}) { vModel: 'value', class: 'min-w-[200px]', dict: dict({ - data: getDictOptions(DICT_TYPE.contract_price_style), + data: dictMap[DICT_TYPE.contract_price_style], }), }, }, @@ -135,7 +137,7 @@ export function getFormSchema(_params: any = {}) { name: 'fs-dict-radio', vModel: 'value', dict: dict({ - data: getDictOptions(DICT_TYPE.contract_selection_method), + data: dictMap[DICT_TYPE.contract_selection_method], }), }, rules: [{ required: true, message: '请选择选商方式' }], @@ -174,8 +176,8 @@ export function getFormSchema(_params: any = {}) { // }, render({ form }) { // 注意此处的v-model写法 - const options1 = getDictOptions(DICT_TYPE.section_type, 'string'); - const options2 = getDictOptions(DICT_TYPE.section_num, 'string'); + const options1 = dictMap[DICT_TYPE.section_type]; + const options2 = dictMap[DICT_TYPE.section_num]; let id = ''; return (
diff --git a/apps/web-contract/src/views/contract/business/edit/index.vue b/apps/web-contract/src/views/contract/business/edit/index.vue index 9596f3b1..de8066f1 100644 --- a/apps/web-contract/src/views/contract/business/edit/index.vue +++ b/apps/web-contract/src/views/contract/business/edit/index.vue @@ -14,8 +14,9 @@ import { } from 'ant-design-vue'; import Apis from '#/api'; +import temporaryFormModal from '#/components/temporary-form-modal/temporary-form-modal.vue'; import { useVxeTable } from '#/hooks/vxeTable'; -import { DICT_TYPE, getDictObj } from '#/utils/dict'; +import { DICT_TYPE, getDictDatasAsync, getDictObj } from '#/utils/dict'; import { FileUploader } from '#/utils/file'; import { logger } from '#/utils/logger'; import chooseUserModal from '#/views/system/user/choose-user-modal.vue'; @@ -28,6 +29,10 @@ const [ChooseUserModal, chooseUserModalApi] = useVbenModal({ connectedComponent: chooseUserModal, }); +const [TemporaryFormModal, temporaryFormModalApi] = useVbenModal({ + connectedComponent: temporaryFormModal, +}); + const { xGridRef, gridProps } = useVxeTable({ ref: 'xGridRef' }); const fileUploader = new FileUploader({}); @@ -54,7 +59,7 @@ const formBindingByBaseInfo = ref({ columns: {}, }); -const formBinding = ref({ ...getFormSchema() }); +const formBinding = ref(null); /** Hooks - 表格 */ const gridOptions = reactive( @@ -138,6 +143,93 @@ async function handleChooseUserConfirm(e) { handleSubmit('submit'); } +async function handleAudit( + type: 'accessConfirm' | 'reject' | 'rejectConfirm', + data?: any, +) { + console.log(type); + + if (type === 'accessConfirm') { + Modal.confirm({ + title: '提示', + content: '是否确认审核通过?', + onOk: async () => { + try { + await Apis.selectMerchantsBasicInfo.post_submit({ + params: { + guid: selectMerchantsBasicInfoId.value, + }, + data: { + appId: id.value, + taskId: currData.value.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') { + const comment = data.comment; + try { + await Apis.selectMerchantsBasicInfo.post_rollback({ + params: { + guid: selectMerchantsBasicInfoId.value, + }, + data: { + appId: selectMerchantsBasicInfoId.value, + taskId: currData.value.taskId, + nodeId: '', + comment, + }, + }); + temporaryFormModalApi.close(); + message.success('退回成功'); + back(); + } catch (error) { + logger.error('合同立项退回失败', error); + message.error('退回失败,请稍候再试'); + } + } +} + async function handleSave() { isLoading.value = true; @@ -323,16 +415,31 @@ async function handleSubmit(type: 'openModal' | 'submit') { const contractData = ref({}); const businessData = ref({}); +const auditId = ref(); + onMounted(async () => { isLoading.value = true; try { if (id.value) { + const dictMap = await getDictDatasAsync([ + DICT_TYPE.contract_authorization_period, + DICT_TYPE.comprehensive_project_name, + DICT_TYPE.contract_price_style, + DICT_TYPE.contract_selection_method, + DICT_TYPE.section_type, + DICT_TYPE.contract_project_type, + DICT_TYPE.section_num, + DICT_TYPE.contract_price_style, + ]); + console.log(dictMap); const contractReferTypeData: any = await Apis.contractReferType.get_list({ params: {}, }); contractTypeData.value = contractReferTypeData.rows || []; + formBinding.value = getFormSchema({ formRef, dictMap }); + formBindingByBaseInfo.value.columns = getFormSchemaByBaseInfo({ contractTypeData: contractTypeData.value, }); @@ -358,6 +465,7 @@ onMounted(async () => { const business: any = await Apis.selectMerchantsBasicInfo.get_getOne({ params: { contractId: contract.contractId }, }); + selectMerchantsBasicInfoId.value = business.guid; if (business.fileUuid) { const files = await fileUploader.select(business.fileUuid); business.fileList = files; @@ -400,6 +508,11 @@ onMounted(async () => { @confirm="handleChooseUserConfirm" /> + + { 保存 - + 提交 废除 + + 通过 + + + 退回 + 返回 diff --git a/apps/web-contract/src/views/contract/sign-authorization/list/crud.tsx b/apps/web-contract/src/views/contract/sign-authorization/list/crud.tsx index 86be2b3e..fc7206f4 100644 --- a/apps/web-contract/src/views/contract/sign-authorization/list/crud.tsx +++ b/apps/web-contract/src/views/contract/sign-authorization/list/crud.tsx @@ -1,6 +1,8 @@ import type { VxeGridPropTypes } from 'vxe-table'; -export const PrimaryKey = 'guid'; +import { DICT_TYPE, getDictObj } from '#/utils/dict'; + +export const PrimaryKey = 'consignId'; export function getColumns(_params?: any): VxeGridPropTypes.Columns { return [ @@ -15,40 +17,43 @@ export function getColumns(_params?: any): VxeGridPropTypes.Columns { title: '签约授权编号', field: 'consignId', width: 200, - align: 'center', }, { title: '受托人', - field: 'trustee', + field: 'userPerson', width: 200, - align: 'center', }, { title: '授权类型', - field: 'authorizationType', + field: 'consignType', width: 120, - align: 'center', + slots: { + default: ({ row }) => { + return ( + getDictObj(DICT_TYPE.contract_authorization_type2, row.consignType) + ?.label || '' + ); + }, + }, }, { title: '授权期限(起)', field: 'authorizationStartDate', width: 150, - align: 'center', }, { title: '授权期限(止)', field: 'authorizationEndDate', width: 150, - align: 'center', - }, - { - field: 'operate', - title: '操作', - width: 60, - align: 'center', - fixed: 'right', - slots: { default: 'operate' }, }, + // { + // field: 'operate', + // title: '操作', + // width: 60, + // align: 'center', + // fixed: 'right', + // slots: { default: 'operate' }, + // }, ]; } diff --git a/apps/web-contract/src/views/contract/sign/edit/index.vue b/apps/web-contract/src/views/contract/sign/edit/index.vue index d54be4f6..b6f68b69 100644 --- a/apps/web-contract/src/views/contract/sign/edit/index.vue +++ b/apps/web-contract/src/views/contract/sign/edit/index.vue @@ -267,12 +267,18 @@ async function handleSave() { } } -async function handleSubmit() { +async function handleSubmit(type: 'openModal' | 'submit') { // isLoading.value = true - chooseUserModalApi.setData({ - title: '选择审批人', - }); - chooseUserModalApi.open(); + if (type === 'openModal') { + chooseUserModalApi.setData({ + title: '选择审批人', + }); + chooseUserModalApi.open(); + } + + if (type === 'submit') { + // handleSubmit(); + } } onMounted(async () => { @@ -286,7 +292,7 @@ onMounted(async () => { if (id.value) { const data: any = await Apis.contractBaseInfo.get_getOne({ - params: { guid: id.value }, + params: { contractId: id.value }, }); currData.value = data; @@ -369,7 +375,7 @@ onMounted(async () => { 提交 diff --git a/apps/web-contract/src/views/contract/sign/list/crud.tsx b/apps/web-contract/src/views/contract/sign/list/crud.tsx index 1dc099e0..fadf5a67 100644 --- a/apps/web-contract/src/views/contract/sign/list/crud.tsx +++ b/apps/web-contract/src/views/contract/sign/list/crud.tsx @@ -5,7 +5,7 @@ import { dict } from '@fast-crud/fast-crud'; import { useRender } from '#/hooks/useRender'; import { DICT_TYPE, getDictOptions } from '#/utils/dict'; -export const PrimaryKey = 'guid'; +export const PrimaryKey = 'contractId'; export function getColumns(_params?: any): VxeGridPropTypes.Columns { return [ diff --git a/apps/web-contract/src/views/contract/sign/list/index.vue b/apps/web-contract/src/views/contract/sign/list/index.vue index 5226339f..a61237c7 100644 --- a/apps/web-contract/src/views/contract/sign/list/index.vue +++ b/apps/web-contract/src/views/contract/sign/list/index.vue @@ -3,7 +3,12 @@ import { computed, onMounted, reactive, ref } from 'vue'; import { useRouter } from 'vue-router'; import { Page } from '@vben/common-ui'; -import { MdiExport, MdiRadioChecked, MdiRadioUnchecked } from '@vben/icons'; +import { + MdiExport, + MdiRadioChecked, + MdiRadioUnchecked, + MdiUpdate, +} from '@vben/icons'; import { message } from 'ant-design-vue'; diff --git a/apps/web-office/src/views/meeting/start/index.vue b/apps/web-office/src/views/meeting/start/index.vue index a63fc681..eb5ea0a9 100644 --- a/apps/web-office/src/views/meeting/start/index.vue +++ b/apps/web-office/src/views/meeting/start/index.vue @@ -371,13 +371,13 @@ function downloadFile(fileUrl) { :class="[bgColor]" class="content-area mb-4 flex h-[50vh] items-center overflow-y-auto rounded-lg p-4" > -

{{ currentSpeaker.abstracts }} -

+