From 1d922e2cd32532fc149fac86cd63e318431d22a4 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期五, 05 九月 2025 14:39:33 +0800 Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobAdminBClient --- src/views/ServiceChargeManage/constants/columns.ts | 65 ++---- src/hooks/useEvent.ts | 1 src/views/ServiceChargeManage/ServiceChargeDetail.vue | 130 ++++++++++--- src/constants/task.ts | 11 + .eslintrc-auto-import.json | 3 src/views/ServiceChargeManage/ServiceChargeManage.vue | 206 ++++++++++++++++------ src/views/ServiceChargeManage/components/SettleDetailDialog.vue | 16 + src/hooks/index.ts | 1 src/views/FlexJobManage/FlexJobManage.vue | 7 src/constants/oss.ts | 2 auto-imports.d.ts | 6 src/views/ServiceChargeManage/components/UploadStatementDialog.vue | 25 ++ src/hooks/settlement.ts | 23 ++ 13 files changed, 355 insertions(+), 141 deletions(-) diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index b651d98..76dc90d 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -63,7 +63,9 @@ "EnumTaskReleaseStatusText": true, "EnumTaskReleaseStatusTextForTip": true, "EnumTaskSettlementOrderStatus": true, + "EnumTaskSettlementOrderStatusText": true, "EnumTaskSettlementStatus": true, + "EnumTaskSettlementStatusText": true, "EnumTaskStatus": true, "EnumTaskStatusText": true, "EnumTaskUserArrangeStatus": true, @@ -227,6 +229,7 @@ "useRouter": true, "useSetReactive": true, "useSlots": true, + "useTaskSelect": true, "useTemplateRef": true, "useUser": true, "useVModel": true, diff --git a/auto-imports.d.ts b/auto-imports.d.ts index 0d3f4f7..89831f3 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -68,7 +68,9 @@ const EnumTaskReleaseStatusText: typeof import('./src/constants/task')['EnumTaskReleaseStatusText'] const EnumTaskReleaseStatusTextForTip: typeof import('./src/constants/task')['EnumTaskReleaseStatusTextForTip'] const EnumTaskSettlementOrderStatus: typeof import('./src/constants/apiEnum')['EnumTaskSettlementOrderStatus'] + const EnumTaskSettlementOrderStatusText: typeof import('./src/constants/task')['EnumTaskSettlementOrderStatusText'] const EnumTaskSettlementStatus: typeof import('./src/constants/apiEnum')['EnumTaskSettlementStatus'] + const EnumTaskSettlementStatusText: typeof import('./src/constants/task')['EnumTaskSettlementStatusText'] const EnumTaskStatus: typeof import('./src/constants/apiEnum')['EnumTaskStatus'] const EnumTaskStatusText: typeof import('./src/constants/task')['EnumTaskStatusText'] const EnumTaskUserArrangeStatus: typeof import('./src/constants/apiEnum')['EnumTaskUserArrangeStatus'] @@ -220,6 +222,7 @@ const useSetReactive: typeof import('./src/hooks/global/helper')['useSetReactive'] const useSign: typeof import('./src/hooks/sign')['useSign'] const useSlots: typeof import('vue')['useSlots'] + const useTaskSelect: typeof import('./src/hooks/settlement')['useTaskSelect'] const useTemplateRef: typeof import('vue')['useTemplateRef'] const useUser: typeof import('./src/hooks/useUser')['useUser'] const useVModel: typeof import('./src/hooks/help')['useVModel'] @@ -327,7 +330,9 @@ readonly EnumTaskReleaseStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskReleaseStatusText']> readonly EnumTaskReleaseStatusTextForTip: UnwrapRef<typeof import('./src/constants/task')['EnumTaskReleaseStatusTextForTip']> readonly EnumTaskSettlementOrderStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskSettlementOrderStatus']> + readonly EnumTaskSettlementOrderStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskSettlementOrderStatusText']> readonly EnumTaskSettlementStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskSettlementStatus']> + readonly EnumTaskSettlementStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskSettlementStatusText']> readonly EnumTaskStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskStatus']> readonly EnumTaskStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumTaskStatusText']> readonly EnumTaskUserArrangeStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumTaskUserArrangeStatus']> @@ -471,6 +476,7 @@ readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']> readonly useSetReactive: UnwrapRef<typeof import('./src/hooks/global/helper')['useSetReactive']> readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']> + readonly useTaskSelect: UnwrapRef<typeof import('./src/hooks/settlement')['useTaskSelect']> readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']> readonly useUser: UnwrapRef<typeof import('./src/hooks/useUser')['useUser']> readonly useVModel: UnwrapRef<typeof import('./src/hooks/help')['useVModel']> diff --git a/src/constants/oss.ts b/src/constants/oss.ts index 91a3a78..5b0b1f0 100644 --- a/src/constants/oss.ts +++ b/src/constants/oss.ts @@ -4,7 +4,7 @@ export const OSSBaseURL = VITE_OSS_URL; -const _basicPath = '12333/YeXing/'; +const _basicPath = 'FlexJob/'; export const OssHRSIE = _basicPath + 'HRSIE/'; diff --git a/src/constants/task.ts b/src/constants/task.ts index 79bf326..6cf4a5e 100644 --- a/src/constants/task.ts +++ b/src/constants/task.ts @@ -73,3 +73,14 @@ [EnumTaskUserSubmitCheckReceiveStatus.Success]: '楠屾敹閫氳繃', [EnumTaskUserSubmitCheckReceiveStatus.Fail]: '楠屾敹鏈�氳繃', }; + +export const EnumTaskSettlementOrderStatusText = { + [EnumTaskSettlementOrderStatus.Wait]: '寰呬笂浼�', + [EnumTaskSettlementOrderStatus.Completed]: '宸蹭笂浼�', +}; + +export const EnumTaskSettlementStatusText = { + [EnumTaskSettlementStatus.Wait]: '寰呯粨绠�', + [EnumTaskSettlementStatus.InProcess]: '缁撶畻涓�', + [EnumTaskSettlementStatus.Completed]: '宸茬粨绠�', +}; diff --git a/src/hooks/index.ts b/src/hooks/index.ts index e79975f..bf536bc 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -9,3 +9,4 @@ export * from './menu'; export * from './dic'; export * from './sign'; +export * from './settlement'; diff --git a/src/hooks/settlement.ts b/src/hooks/settlement.ts new file mode 100644 index 0000000..afc6f9c --- /dev/null +++ b/src/hooks/settlement.ts @@ -0,0 +1,23 @@ +import { useQuery, useQueryClient } from '@tanstack/vue-query'; +import * as taskServices from '@/services/api/task'; + +export function useTaskSelect() { + const queryClient = useQueryClient(); + + const { data } = useQuery({ + queryKey: ['taskServices/getTaskSelect'], + queryFn: () => { + return taskServices.getTaskSelect( + {}, + { + showLoading: false, + } + ); + }, + placeholderData: () => [] as API.SelectOptionGuidGetTaskSelectQueryOption[], + }); + + const taskSelect = computed(() => data.value?.map((x) => x.data)); + + return { taskSelect }; +} diff --git a/src/hooks/useEvent.ts b/src/hooks/useEvent.ts index f897656..3d01572 100644 --- a/src/hooks/useEvent.ts +++ b/src/hooks/useEvent.ts @@ -5,6 +5,7 @@ 'home:add': any; 'taskManage:add': any; 'taskManage:edit': any; + sureTaskSettlementOrder: any; checkReceiveTask: any; }; diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue index 5cb7a19..60d3901 100644 --- a/src/views/FlexJobManage/FlexJobManage.vue +++ b/src/views/FlexJobManage/FlexJobManage.vue @@ -538,6 +538,13 @@ try { const selectionRows = getSelectionRows(); if (selectionRows) { + const hasUnSigned = selectionRows?.some( + (x) => x.enterpriseSignContractStatus !== EnumTaskUserSignContractStatus.Pass + ); + if (hasUnSigned) { + Message.warnMessage('鍕鹃�夋暟鎹腑鍖呭惈鏈绾︽垨宸茶В绾︽暟鎹�'); + return; + } stopElectronSign(selectionRows.map((x) => x.id)); } } catch (error) {} diff --git a/src/views/ServiceChargeManage/ServiceChargeDetail.vue b/src/views/ServiceChargeManage/ServiceChargeDetail.vue index 0f4c891..f10c238 100644 --- a/src/views/ServiceChargeManage/ServiceChargeDetail.vue +++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue @@ -1,6 +1,6 @@ <template> <LoadingLayout :loading="isLoading"> - <AppScrollContainer> + <AppContainer> <ChunkCell title="缁撶畻鍗曡鎯�"> <ProForm :model="form" ref="formRef" label-width="120px" :is-read="true"> <ProFormCol> @@ -10,22 +10,21 @@ </ProFormItemV2> </ProFormColItem> <ProFormColItem :span="8"> - <ProFormItemV2 label="浠诲姟缂栧彿:" prop="name"> - <ProFormText v-model="form.name"> </ProFormText> + <ProFormItemV2 label="浠诲姟缂栧彿:" prop="code"> + <ProFormText v-model="form.code"> </ProFormText> </ProFormItemV2> </ProFormColItem> - <ProFormColItem :span="8"></ProFormColItem> </ProFormCol> <ProFormCol> <ProFormColItem :span="8"> - <ProFormItemV2 label="缁撶畻鍗曞悕绉�:" prop="name"> - <ProFormText v-model="form.name"> </ProFormText> + <ProFormItemV2 label="缁撶畻鍗曞悕绉�:" prop="settlementOrderName"> + <ProFormText v-model="form.settlementOrderName"> </ProFormText> </ProFormItemV2> </ProFormColItem> <ProFormColItem :span="8"> - <ProFormItemV2 label="涓婁紶鏃堕棿:" prop="name"> + <ProFormItemV2 label="涓婁紶鏃堕棿:" prop="settlementOrderTime"> <ProFormDatePicker - v-model="form.name" + v-model="form.settlementOrderTime" type="date" format="YYYY-MM-DD HH:mm" ></ProFormDatePicker> @@ -34,13 +33,13 @@ </ProFormCol> <ProFormCol> <ProFormColItem :span="8"> - <ProFormItemV2 label="缁撶畻閲戦:" prop="money"> - <ProFormInputNumber v-model="form.money"> </ProFormInputNumber> + <ProFormItemV2 label="缁撶畻閲戦:" prop="settlementAmount"> + <ProFormText v-model="form.settlementAmount"> </ProFormText> </ProFormItemV2> </ProFormColItem> <ProFormColItem :span="8"> - <ProFormItemV2 label="瀹炲彂閲戦:" prop="money"> - <ProFormInputNumber v-model="form.money"> </ProFormInputNumber> + <ProFormItemV2 label="瀹炲彂閲戦:" prop="actualSettlementAmount"> + <ProFormText v-model="form.actualSettlementAmount"> </ProFormText> </ProFormItemV2> </ProFormColItem> </ProFormCol> @@ -68,7 +67,7 @@ </el-steps> </div> </ChunkCell> --> - <ChunkCell title="缁撶畻鍚嶅崟"> + <ChunkCell title="缁撶畻鍚嶅崟" style="flex: 1"> <ProTableQueryFilterBar @on-reset="reset"> <template #query> <QueryFilterItem> @@ -85,7 +84,7 @@ <ProTableV2 v-bind="proTableProps" :columns="SettlementListColumns" - :operationBtns="operationBtns" + :show-operation-column="false" :auto-height="false" ref="proTable" :tableProps="{ @@ -93,14 +92,25 @@ }" > </ProTableV2> + <div class="chuck-add-or-edit-actions"> + <el-button class="chuck-add-or-edit-actions" @click="handleBack">鍙栨秷</el-button> + <el-button + v-if="!isDetail" + class="chuck-add-or-edit-actions" + type="primary" + @click="handleSubmit" + >纭</el-button + > + </div> </ChunkCell> - </AppScrollContainer> + </AppContainer> <EditAccountInfoDialog v-bind="dialogProps"></EditAccountInfoDialog> </LoadingLayout> </template> <script setup lang="ts"> import { LoadingLayout, + AppContainer, AppScrollContainer, ChunkCell, ProForm, @@ -110,27 +120,28 @@ ProFormColItem, ProFormDatePicker, ProFormInputNumber, - ProFormRadio, useTable, ProTableV2, defineOperationBtns, SearchInput, QueryFilterItem, ProTableQueryFilterBar, - TextOverTooltip, useFormDialog, } from '@bole-core/components'; -import { Edit, Upload } from '@element-plus/icons-vue'; import { SettlementListColumns } from './constants'; import { useQuery } from '@tanstack/vue-query'; -import { downloadFileByUrl } from '@bole-core/core'; import * as taskServices from '@/services/api/task'; +import * as taskUserServices from '@/services/api/taskUser'; import EditAccountInfoDialog from './components/EditAccountInfoDialog.vue'; +import { Message } from '@bole-core/core'; +import { paginateList, setOssFileName, toThousand } from '@/utils'; defineOptions({ name: 'ServiceChargeDetail', }); +const { closeViewPush } = useRouteView(); +const eventContext = useGlobalEventContext(); const operationBtns = defineOperationBtns([ { data: { @@ -145,26 +156,37 @@ const route = useRoute(); const id = (route.params.id as string) ?? ''; +const url = (route.query.url as string) ?? ''; + +const isDetail = computed(() => !url); const form = reactive({ name: '', - money: 0, - status: 1, + settlementAmount: '', + actualSettlementAmount: '', + code: '', + settlementOrderName: '', + settlementOrderTime: '', }); const { isLoading } = useQuery({ - queryKey: ['taskServices/getTaskInfo', id], + queryKey: ['taskServices/getSettlementTask', id], queryFn: async () => { - return await taskServices.getTaskInfo( + return await taskServices.getSettlementTask( { id: id }, { showLoading: false, } ); }, - placeholderData: () => ({} as API.GetTaskInfoQueryResult), + placeholderData: () => ({} as API.GetSettlementTaskQueryResult), onSuccess(data) { form.name = data.name; + form.settlementAmount = toThousand(data.settlementAmount); + form.actualSettlementAmount = toThousand(data.actualSettlementAmount); + form.code = data.code; + form.settlementOrderName = setOssFileName(data.settlementOrderName); + form.settlementOrderTime = data.settlementOrderTime ?? ''; }, enabled: !!id, }); @@ -178,17 +200,28 @@ } = useTable( async ({ pageIndex, pageSize }, extraParamState) => { try { - let params: API.GetOpenTaskInfosQuery = { + let params: API.APIgetSettlementTaskUsersParams = { + taskInfoId: id, + settlementOrderUrl: url, + }; + let res = await taskUserServices.getSettlementTaskUsers(params); + if (extraParamState.keywords) { + res.data = res.data?.filter((item) => { + return ( + item.name.includes(extraParamState.keywords) || + item.contactPhoneNumber.includes(extraParamState.keywords) || + item.identity.includes(extraParamState.keywords) + ); + }); + } + return Promise.resolve({ pageModel: { rows: pageSize, page: pageIndex, - orderInput: extraParamState.orderInput, + totalCount: res.data.length, }, - keywords: extraParamState.keywords, - }; - - let res = await taskServices.getOpenTaskInfos(params); - return res; + data: paginateList(res.data, pageIndex, pageSize), + }); } catch (error) { console.log('error: ', error); } @@ -198,8 +231,12 @@ keywords: '', orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], }, - queryKey: ['taskServices/getOpenTaskInfos'], - columnsRenderProps: {}, + queryKey: ['taskUserServices/getSettlementTaskUsers'], + columnsRenderProps: { + settlementTime: { type: 'date' }, + settlementAmount: { type: 'money' }, + actualSettlementAmount: { type: 'money' }, + }, } ); @@ -222,6 +259,33 @@ async function handleAddOrEdit() {} +async function handleSubmit() { + try { + let params: API.SureTaskSettlementOrderCommand = { + taskInfoId: id, + settlementOrderUrl: url, + taskInfoUsers: + proTableProps.value.tableData?.length > 0 + ? proTableProps.value.tableData.map( + (x) => ({ ...x } as API.SureTaskSettlementOrderCommandUser) + ) + : [], + }; + let res = await taskServices.sureTaskSettlementOrder(params); + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + eventContext.emit('sureTaskSettlementOrder'); + handleBack(); + } + } catch (error) {} +} + +function handleBack() { + closeViewPush(route, { + name: 'ServiceChargeManageList', + }); +} + onMounted(() => { getList(); }); diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue index 47361e8..8c76c8c 100644 --- a/src/views/ServiceChargeManage/ServiceChargeManage.vue +++ b/src/views/ServiceChargeManage/ServiceChargeManage.vue @@ -5,11 +5,8 @@ <template #query> <QueryFilterItem tip-content="缁撶畻鍗曠姸鎬�"> <FieldRadio - v-model="extraParamState.status" - :value-enum="[ - { label: '宸插畨鎺�', value: 1 }, - { label: '寰呭畨鎺�', value: 0 }, - ]" + v-model="extraParamState.settlementOrderStatus" + :value-enum="EnumTaskSettlementOrderStatusText" buttonStyle showAllBtn @change="getList()" @@ -17,17 +14,14 @@ </QueryFilterItem> <QueryFilterItem tip-content="缁撶畻鐘舵��"> <FieldRadio - v-model="extraParamState.status" - :value-enum="[ - { label: '宸插畨鎺�', value: 1 }, - { label: '寰呭畨鎺�', value: 0 }, - ]" + v-model="extraParamState.settlementStatus" + :value-enum="EnumTaskSettlementStatusText" buttonStyle showAllBtn @change="getList()" /> </QueryFilterItem> - <QueryFilterItem> + <!-- <QueryFilterItem> <FieldDatePicker v-model="extraParamState.time" type="daterange" @@ -38,10 +32,10 @@ @change="getList()" tooltipContent="鍒涘缓鏃堕棿" ></FieldDatePicker> - </QueryFilterItem> + </QueryFilterItem> --> <QueryFilterItem> <SearchInput - v-model="extraParamState.searchWord" + v-model="extraParamState.keywords" style="width: 250px" placeholder="浠诲姟鍚嶇О" @on-click-search="getList" @@ -52,9 +46,8 @@ </template> <template #btn> <el-button type="primary" link @click="handleDownloadTemplate()">缁撶畻鍗曟ā鏉�</el-button> - - <el-button type="primary" @click="openDialog()">涓婁紶缁撶畻鍗�</el-button> - <el-button type="primary" @click="handleDownloadTemplate()">瀵煎嚭</el-button> + <el-button type="primary" @click="handleAdd()">涓婁紶缁撶畻鍗�</el-button> + <!-- <el-button type="primary" @click="handleDownloadTemplate()">瀵煎嚭</el-button> --> </template> </ProTableQueryFilterBar> <ProTableV2 @@ -62,6 +55,36 @@ :columns="ServiceChargeManageColumns" :operationBtns="operationBtns" > + <template #operationBtn-uploadBtn="{ row }"> + <BlFileUpload + v-model:file-url="editForm.settlementUrl" + ref="uploadRef" + :showTip="false" + :show-file-list="false" + class="pro-table-operation-btn upload-style-btn" + :on-success="(event) => handleUploadSuccess(event, row)" + :limitFileSize="null" + :limit="1" + accept="xlsx,xls" + > + <el-button text type="primary" class="pro-table-operation-btn">涓婁紶</el-button> + </BlFileUpload> + </template> + <template #operationBtn-reUploadBtn="{ data, row }"> + <BlFileUpload + v-model:file-url="editForm.settlementUrl" + ref="uploadRef" + :showTip="false" + :show-file-list="false" + class="pro-table-operation-btn upload-style-btn" + :on-success="(event) => handleUploadSuccess(event, row)" + :limitFileSize="null" + :limit="1" + accept="xlsx,xls" + > + <el-button text type="primary" class="pro-table-operation-btn">閲嶆柊涓婁紶</el-button> + </BlFileUpload> + </template> </ProTableV2> </AppContainer> <UploadStatementDialog v-bind="dialogProps" /> @@ -83,13 +106,21 @@ defineOperationBtns, useFormDialog, UploadUserFile, + BlFileUpload, } from '@bole-core/components'; import { ServiceChargeManageColumns } from './constants'; -import { downloadFileByUrl } from '@/utils'; +import { + EnumTaskSettlementStatusText, + EnumTaskSettlementOrderStatusText, + EnumTaskSettlementOrderStatus, + EnumTaskSettlementStatus, +} from '@/constants'; +import { downloadFileByUrl, setOssFileName } from '@/utils'; import * as taskServices from '@/services/api/task'; import { ModelValueType } from 'element-plus'; import UploadStatementDialog from './components/UploadStatementDialog.vue'; import SettleDetailDialog from './components/SettleDetailDialog.vue'; +import { Message } from '@bole-core/core'; defineOptions({ name: 'ServiceChargeManageList', @@ -101,11 +132,9 @@ enCode: 'uploadBtn', name: '涓婁紶', }, - emits: { - onClick: (role) => openDialog(role), - }, extraProps: { - hide: () => false, + hide: (row: API.GetSettlementTasksQueryResultItem) => + row.settlementOrderStatus !== EnumTaskSettlementOrderStatus.Wait, }, }, { @@ -113,11 +142,12 @@ enCode: 'reUploadBtn', name: '閲嶆柊涓婁紶', }, - emits: { - onClick: (role) => openDialog(role), - }, extraProps: { - hide: () => false, + hide: (row: API.GetSettlementTasksQueryResultItem) => + !( + row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed && + row.settlementStatus === EnumTaskSettlementStatus.Wait + ), }, }, { @@ -126,10 +156,14 @@ name: '缁撶畻', }, emits: { - onClick: (role) => openSettleDialog(role), + onClick: (role: API.GetSettlementTasksQueryResultItem) => openSettleDialog(role), }, extraProps: { - hide: () => false, + hide: (role: API.GetSettlementTasksQueryResultItem) => + !( + role.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed && + role.settlementStatus === EnumTaskSettlementStatus.Wait + ), }, }, { @@ -141,7 +175,8 @@ onClick: (role) => handleRecall(role), }, extraProps: { - hide: () => false, + hide: (role: API.GetSettlementTasksQueryResultItem) => + role.settlementStatus !== EnumTaskSettlementStatus.InProcess, }, }, { @@ -150,7 +185,11 @@ name: '璇︽儏', }, emits: { - onClick: (role) => goDetail(role), + onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role.id), + }, + extraProps: { + hide: (role: API.GetSettlementTasksQueryResultItem) => + role.settlementOrderStatus === EnumTaskSettlementOrderStatus.Wait, }, }, { @@ -168,6 +207,12 @@ ]); const router = useRouter(); + +const eventContext = useGlobalEventContext(); + +eventContext.addEvent('sureTaskSettlementOrder', () => { + getList(paginationState.pageIndex); +}); const BaseState = { loading: true, @@ -189,15 +234,18 @@ } = useTable( async ({ pageIndex, pageSize }, extraParamState) => { try { - let params: API.GetTaskInfosQuery = { + let params: API.GetSettlementTasksQuery = { pageModel: { rows: pageSize, page: pageIndex, orderInput: extraParamState.orderInput, }, + keywords: extraParamState.keywords, + settlementOrderStatus: extraParamState.settlementOrderStatus, + settlementStatus: extraParamState.settlementStatus, }; - let res = await taskServices.getTaskInfos(params, { + let res = await taskServices.getSettlementTasks(params, { showLoading: !state.loading, }); return res; @@ -207,38 +255,42 @@ }, { defaultExtraParams: { - searchWord: '', - status: 0, + keywords: '', + settlementOrderStatus: '' as any as EnumTaskSettlementOrderStatus, + settlementStatus: '' as any as EnumTaskSettlementStatus, time: [] as unknown as ModelValueType, orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], }, - queryKey: ['taskServices/getTaskInfos'], - columnsRenderProps: {}, + queryKey: ['taskServices/getSettlementTasks'], + columnsRenderProps: { + settlementOrderStatus: { type: 'enum', valueEnum: EnumTaskSettlementOrderStatusText }, + settlementStatus: { type: 'enum', valueEnum: EnumTaskSettlementStatusText }, + actualSettlementAmount: { type: 'money' }, + settlementAmount: { type: 'money' }, + settlementTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + settlementOrderTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' }, + settlementOrderName: { + formatter: (row: API.GetSettlementTasksQueryResultItem) => + row.settlementOrderName && setOssFileName(row.settlementOrderName), + }, + }, } ); -const { dialogProps, handleAdd, handleEdit, editForm } = useFormDialog({ +const { dialogProps, handleAdd, editForm } = useFormDialog({ onConfirm: handleAddOrEdit, defaultFormParams: { + code: '', id: '', name: '', settlementUrl: [] as UploadUserFile[], }, }); -function openDialog(row?) { - if (row) { - handleEdit({ - id: row?.id, - name: row?.name, - settlementUrl: [] as UploadUserFile[], - }); - } else { - handleAdd(); - } +async function handleAddOrEdit() { + console.log('editForm: ', editForm); + goDetail(editForm.id, editForm.settlementUrl[0]?.path); } - -async function handleAddOrEdit() {} const { dialogProps: dialogSettleProps, @@ -249,27 +301,66 @@ defaultFormParams: { id: '', name: '', - count: 0, + code: '', + settlementUserCount: 0, + settlementAmount: 0, }, }); -async function handleSettle() {} +async function handleSettle() { + try { + let params: API.SureTaskSettlementCommand = { + taskInfoId: settleEditForm.id, + }; + let res = await taskServices.sureTaskSettlement(params); + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + getList(paginationState.pageIndex); + } + } catch (error) {} +} -function openSettleDialog(row?) { +function openSettleDialog(row: API.GetSettlementTasksQueryResultItem) { handleSettleEdit({ id: row.id, name: row.name, - count: row.count, + code: row.code, + settlementUserCount: row.settlementUserCount ?? 0, + settlementAmount: row.settlementAmount ?? 0, }); } -function handleRecall(row) {} +async function handleRecall(row: API.GetSettlementTasksQueryResultItem) { + try { + Message.tipMessage('纭瑕佹挙鍥炲悧锛�'); + let params: API.RevokeTaskSettlementOrderCommand = { + taskInfoId: row.id, + }; + let res = await taskServices.revokeTaskSettlementOrder(params); + if (res) { + Message.successMessage('鎿嶄綔鎴愬姛'); + getList(paginationState.pageIndex); + } + } catch (error) {} +} -function goDetail(row) { +function handleUploadSuccess( + response: UploadUserFile & { file: File & { uid: number } }, + row: API.GetSettlementTasksQueryResultItem +) { + if (response.path) { + goDetail(row.id, response.path); + } +} + +function goDetail(id: string, url?: string) { router.push({ name: 'ServiceChargeDetail', params: { - id: row.id, + id: id, + }, + query: { + url: url ? url : '', }, }); } @@ -279,6 +370,9 @@ } function handleDownloadTemplate() { - downloadFileByUrl('', '缁撶畻鍗曟ā鏉�'); + downloadFileByUrl( + 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/FlexJob/temp/%E7%BB%93%E7%AE%97%E5%8D%95%E6%A8%A1%E6%9D%BF.xlsx', + '缁撶畻鍗曟ā鏉�' + ); } </script> diff --git a/src/views/ServiceChargeManage/components/SettleDetailDialog.vue b/src/views/ServiceChargeManage/components/SettleDetailDialog.vue index 189905a..181b6bf 100644 --- a/src/views/ServiceChargeManage/components/SettleDetailDialog.vue +++ b/src/views/ServiceChargeManage/components/SettleDetailDialog.vue @@ -8,17 +8,17 @@ :width="700" > <ProForm :model="form" ref="dialogForm" label-width="120px" is-read> - <ProFormItemV2 label="浠诲姟鍗曞彿锛�" prop="name"> - <ProFormSelect v-model="form.name" :valueEnum="[]"> </ProFormSelect> + <ProFormItemV2 label="浠诲姟鍗曞彿锛�" prop="code"> + <ProFormSelect v-model="form.code" :valueEnum="[]"> </ProFormSelect> </ProFormItemV2> <ProFormItemV2 label="浠诲姟鍚嶇О锛�" prop="name"> <ProFormText v-model.trim="form.name"></ProFormText> </ProFormItemV2> - <ProFormItemV2 label="缁撶畻浜烘暟锛�" prop="count"> - <ProFormInputNumber v-model="form.count" unit="浜�"> </ProFormInputNumber> + <ProFormItemV2 label="缁撶畻浜烘暟锛�" prop="settlementUserCount"> + <ProFormInputNumber v-model="form.settlementUserCount" unit="浜�"> </ProFormInputNumber> </ProFormItemV2> - <ProFormItemV2 label="缁撶畻閲戦锛�" prop="count"> - <ProFormInputNumber v-model="form.count" unit="鍏�"> </ProFormInputNumber> + <ProFormItemV2 label="缁撶畻閲戦锛�" prop="settlementAmount"> + <ProFormInputNumber v-model="form.settlementAmount" unit="鍏�"> </ProFormInputNumber> </ProFormItemV2> </ProForm> <template #footer> @@ -49,7 +49,9 @@ title?: string; id: string; name: string; - count: number; + code: string; + settlementUserCount: number; + settlementAmount: number; }; const visible = defineModel({ type: Boolean }); diff --git a/src/views/ServiceChargeManage/components/UploadStatementDialog.vue b/src/views/ServiceChargeManage/components/UploadStatementDialog.vue index 451b4fc..46e8393 100644 --- a/src/views/ServiceChargeManage/components/UploadStatementDialog.vue +++ b/src/views/ServiceChargeManage/components/UploadStatementDialog.vue @@ -8,13 +8,16 @@ :width="700" > <ProForm :model="form" ref="dialogForm" label-width="120px"> - <ProFormItemV2 label="浠诲姟鍗曞彿锛�" prop="name" :check-rules="[{ message: '璇烽�夋嫨浠诲姟鍗曞彿' }]"> + <ProFormItemV2 label="浠诲姟鍗曞彿锛�" prop="code" :check-rules="[{ message: '璇烽�夋嫨浠诲姟鍗曞彿' }]"> <ProFormSelect - v-model="form.name" - :valueEnum="[]" + v-model="form.code" + :valueEnum="taskSelect" placeholder="璇烽�夋嫨浠诲姟鍗曞彿" + enum-value-key="id" + enum-label-key="code" filterable clearable + @change="handleCodeChange" > </ProFormSelect> </ProFormItemV2> @@ -23,6 +26,7 @@ style="width: 50%" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" v-model.trim="form.name" + disabled ></ProFormText> </ProFormItemV2> <ProFormItemV2 @@ -34,7 +38,7 @@ v-model:file-url="form.settlementUrl" :limit="1" :limitFileSize="10" - accept="jpg/jpeg,png,pdf" + accept="xlsx,xls" ></ProFormUpload> </ProFormItemV2> </ProForm> @@ -58,6 +62,7 @@ ProFormSelect, UploadUserFile, } from '@bole-core/components'; +import { Message } from '@bole-core/core'; defineOptions({ name: 'UploadStatementDialog', @@ -66,9 +71,12 @@ type Form = { title?: string; id: string; + code: string; name: string; settlementUrl: UploadUserFile[]; }; + +const { taskSelect } = useTaskSelect(); const visible = defineModel({ type: Boolean }); @@ -81,6 +89,15 @@ const dialogForm = ref<FormInstance>(); +function handleCodeChange(value: string) { + if (value) { + form.value.name = taskSelect.value?.find((item) => item.id === value)?.name ?? ''; + form.value.id = value; + } else { + Message.errorMessage('璇烽�夋嫨浠诲姟鍗曞彿'); + } +} + function onDialogClose() { if (!dialogForm.value) return; dialogForm.value.resetFields(); diff --git a/src/views/ServiceChargeManage/constants/columns.ts b/src/views/ServiceChargeManage/constants/columns.ts index f9bb4a0..aecda4a 100644 --- a/src/views/ServiceChargeManage/constants/columns.ts +++ b/src/views/ServiceChargeManage/constants/columns.ts @@ -8,62 +8,47 @@ }, { id: '2', - enCode: 'name', + enCode: 'code', name: '浠诲姟鍗曞彿', }, { id: '3', - enCode: 'name', - name: '鍙戞斁鏂瑰紡', - }, - { - id: '4', - enCode: 'name', + enCode: 'settlementOrderStatus', name: '缁撶畻鍗曠姸鎬�', }, { - id: '5', - enCode: 'name', + id: '4', + enCode: 'settlementOrderName', name: '缁撶畻鍗曞悕绉�', }, { - id: '6', - enCode: 'name', + id: '5', + enCode: 'settlementOrderTime', name: '涓婁紶鏃堕棿', }, { - id: '7', - enCode: 'name', - name: '缁撶畻鐘舵��', - }, - { - id: '8', - enCode: 'name', + id: '6', + enCode: 'actualSettlementAmount', name: '瀹炲彂閲戦', }, { - id: '9', - enCode: 'name', + id: '7', + enCode: 'settlementAmount', name: '缁撶畻閲戦', }, { - id: '10', - enCode: 'name', - name: '澶辫触閲戦', + id: '8', + enCode: 'settlementStatus', + name: '缁撶畻鐘舵��', }, { - id: '11', - enCode: 'name', - name: '閫�娆鹃噾棰�', - }, - { - id: '12', - enCode: 'name', + id: '9', + enCode: 'settlementTime', name: '缁撶畻鏃堕棿', }, { - id: '13', - enCode: 'name', + id: '10', + enCode: 'settlementRemark', name: '澶囨敞', }, ]); @@ -76,42 +61,42 @@ }, { id: '2', - enCode: 'name', + enCode: 'identity', name: '韬唤璇佸彿', }, { id: '3', - enCode: 'name', + enCode: 'contactPhoneNumber', name: '鎵嬫満鍙�', }, { id: '4', - enCode: 'name', + enCode: 'bank', name: '鎵�灞為摱琛�', }, { id: '5', - enCode: 'name', + enCode: 'bankBranch', name: '鎵�灞炴敮琛�', }, { id: '6', - enCode: 'name', + enCode: 'receiveAccount', name: '鏀舵甯愭埛', }, { id: '7', - enCode: 'signNum', + enCode: 'settlementAmount', name: '缁撶畻閲戦', }, { id: '8', - enCode: 'name', + enCode: 'actualSettlementAmount', name: '瀹炲彂閲戦', }, { id: '9', - enCode: 'name', + enCode: 'settlementTime', name: '缁撶畻鏃堕棿', }, ]); -- Gitblit v1.9.1