From 2174f758e8a963964198e092f0d528ef1ae9b81e Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期二, 22 七月 2025 09:59:05 +0800 Subject: [PATCH] feat: 页面 --- src/views/Reward/FinancialApproval.vue | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 257 insertions(+), 0 deletions(-) diff --git a/src/views/Reward/FinancialApproval.vue b/src/views/Reward/FinancialApproval.vue new file mode 100644 index 0000000..465ca53 --- /dev/null +++ b/src/views/Reward/FinancialApproval.vue @@ -0,0 +1,257 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem> + <FieldSelect + v-model="extraParamState.enterpriseId" + placeholder="璇烽�夋嫨鍥尯" + :value-enum="fourStreamsIndustrialParkList" + enumLabelKey="parkName" + enum-value-key="id" + clearable + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem tip-content="瀹℃牳鐘舵��"> + <FieldRadio + v-model="extraParamState.auditStatus" + :value-enum="EnumParkBountyTradeDetailAuditStatusText" + buttonStyle + showAllBtn + @change="getList()" + ></FieldRadio> + </QueryFilterItem> + <QueryFilterItem tip-content="鐢宠鍑鸿处鏃ユ湡"> + <FieldDatePicker + v-model="extraParamState.creationTime" + type="daterange" + range-separator="~" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + clearable + @change="getList()" + ></FieldDatePicker> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.searchKeyWord" + style="width: 200px" + placeholder="浼佷笟鍚嶇О/淇$敤浠g爜" + @on-click-search="getList" + > + </SearchInput> + </QueryFilterItem> + </template> + </ProTableQueryFilterBar> + <ProTableV2 + v-bind="proTableProps" + :columns="FinancialApprovalColumns" + :operationBtns="operationBtns" + > + </ProTableV2> + <RewardApplyTradeCheckDialog v-bind="dialogProps"></RewardApplyTradeCheckDialog> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + FieldSelect, + ProTableV2, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + FieldDatePicker, + useFormDialog, + UploadUserFile, + defineOperationBtns, + FieldRadio, +} from '@bole-core/components'; +import { Message, OrderInputType } from '@bole-core/core'; +import * as parkBountyApplyServices from '@/services/api/ParkBountyApply'; +import { + EnterpriseType, + EnterpriseTypeText, + EnumParkBountyTradeDetailAuditStatus, + EnumParkBountyTradeDetailAuditStatusTag, + EnumParkBountyTradeDetailAuditStatusText, +} from '@/constants'; +import { ModelValueType } from 'element-plus'; +import RewardApplyTradeCheckDialog from './components/RewardApplyTradeCheckDialog.vue'; +import { convertApi2FormUrlOnlyOne, format } from '@/utils'; +import { FinancialApprovalColumns } from './constants'; +import { useIndustrialParkDropDownList } from '@/hooks/industrialPark'; + +defineOptions({ + name: 'FinancialApproval', +}); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'detailBtn', + name: '璇︽儏', + }, + emits: { + onClick: (role) => openDialog(role, true), + }, + extraProps: { + hide: (row: API.GetParkBountyTradeDetailOutput) => + row.auditStatus === EnumParkBountyTradeDetailAuditStatus.Wait, + }, + }, + { + data: { + enCode: 'checkBtn', + name: '瀹℃壒', + }, + emits: { + onClick: (row) => openDialog(row), + }, + extraProps: { + hide: (row: API.GetParkBountyTradeDetailOutput) => + row.auditStatus !== EnumParkBountyTradeDetailAuditStatus.Wait, + }, + }, +]); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); +const { industrialParkList } = useIndustrialParkDropDownList(); + +const fourStreamsIndustrialParkList = computed(() => { + return industrialParkList.value.filter((x) => !!x.rewardEnable); +}); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetParkBountyTradeDetailByIdInput = { + pageModel: { + rows: pageSize, + page: pageIndex, + orderInput: extraParamState.orderInput, + }, + searchKeyWord: extraParamState.searchKeyWord, + // transferTimeBegin: format(extraParamState.transferTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + // transferTimeEnd: format(extraParamState.transferTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + creationTimeBegin: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), + creationTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), + // "enterpriseId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + // "auditStatus": 10 + }; + let res = await parkBountyApplyServices.getParkBountyTradeDetailList(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) {} + }, + { + defaultExtraParams: { + searchKeyWord: '', + enterpriseId: '', + auditStatus: '' as any as EnumParkBountyTradeDetailAuditStatus, + creationTime: [] as unknown as ModelValueType, + orderInput: [{ property: 'tradeTime', order: OrderInputType.Desc }], + }, + columnsRenderProps: { + authType: { type: 'enum', valueEnum: EnterpriseTypeText }, + tradeTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + tradeAmount: { type: 'money' }, + remianAmount: { type: 'money' }, + auditStatus: { + type: 'tag', + valueEnum: EnumParkBountyTradeDetailAuditStatusText, + tagTypeEnum: EnumParkBountyTradeDetailAuditStatusTag, + }, + }, + } +); + +function openDialog(row: API.GetParkBountyTradeDetailOutput, isCheck = false) { + handleAdd({ + id: row.id, + isCheck, + auditStatus: + row.auditStatus === EnumParkBountyTradeDetailAuditStatus.Reject + ? EnumParkBountyTradeDetailAuditStatus.Reject + : EnumParkBountyTradeDetailAuditStatus.Pass, + auditRemark: row.auditRemark, + payAuditFileUrl: convertApi2FormUrlOnlyOne(row.payAuditFileUrl), + userName: row.userName, + enterpriseName: row.enterpriseName, + societyCreditCode: row.societyCreditCode, + contactPhone: row.contactPhone, + authType: row.authType, + parkName: row.parkName, + parkTypeName: row.parkTypeName, + tradeAmount: row.tradeAmount, + remianAmount: row.remianAmount, + tradeTime: row.tradeTime, + auditTime: row.auditTime, + payRemark: row.payRemark, + payFileUrl: convertApi2FormUrlOnlyOne(row.payFileUrl), + }); +} + +const { dialogProps, handleAdd, handleEdit, editForm } = useFormDialog({ + onConfirm: handleAddOrEdit, + defaultFormParams: { + id: '', + auditStatus: '' as any as EnumParkBountyTradeDetailAuditStatus, + auditRemark: '', + payAuditFileUrl: [] as UploadUserFile[], + isCheck: false, + userName: '', + enterpriseName: '', + societyCreditCode: '', + contactPhone: '', + authType: EnterpriseType.HREnterprise, + parkName: '', + parkTypeName: '', + tradeAmount: '' as any as number, + remianAmount: '' as any as number, + tradeTime: '', + auditTime: '', + payRemark: '', + payFileUrl: [] as UploadUserFile[], + }, +}); + +async function handleAddOrEdit() { + try { + let params: API.AuditParkBountyTradeInput = { + id: editForm.id, + auditStatus: editForm.auditStatus, + /** 瀹℃牳澶囨敞 */ + auditRemark: editForm.auditRemark, + /** 瀹℃牳鍑瘉 */ + payAuditFileUrl: editForm.payAuditFileUrl?.[0]?.path ?? '', + }; + let res = await parkBountyApplyServices.auditParkBountyApplyTrade(params); + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + getList(paginationState.pageIndex); + } + } catch (error) {} +} +</script> -- Gitblit v1.9.1