From 18c1c2833377e85b6042c0622ddf67becaf3bacb Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期五, 05 九月 2025 11:04:08 +0800 Subject: [PATCH] feat: 页面 --- src/views/FlexJobManage/FlexJobManage.vue | 7 + src/services/api/enterpriseEmployee.ts | 15 +++ src/views/ServiceChargeManage/ServiceChargeDetail.vue | 30 +++++-- src/services/api/typings.d.ts | 42 +++++++--- src/views/ServiceChargeManage/ServiceChargeManage.vue | 85 +++++++++----------- src/views/ServiceChargeManage/components/UploadStatementDialog.vue | 9 + src/constants/apiEnum.ts | 6 + src/services/api/taskUser.ts | 12 +- 8 files changed, 127 insertions(+), 79 deletions(-) diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts index 1045c37..281da50 100644 --- a/src/constants/apiEnum.ts +++ b/src/constants/apiEnum.ts @@ -133,9 +133,11 @@ /** 浼佷笟閽卞寘浠h繘浠跺崟鐘舵�� */ export enum EnumEnterpriseWalletExpandindirectOrderStatus { + /**鏈繘浠� */ + Wait = 1, /**瀹℃壒涓� */ PROCESSING = 10, - /**宸茬敓鏁� */ + /**宸茶繘浠� */ VALID = 20, /**瀹℃壒涓嶉�氳繃 */ INVALID = 30, @@ -147,6 +149,8 @@ /** 浼佷笟閽卞寘绛剧害鐘舵�� */ export enum EnumEnterpriseWalletSignStatus { + /**鏈绾� */ + Wait = 1, /**鐢宠涓� */ Apply = 10, /**宸茬绾� */ diff --git a/src/services/api/enterpriseEmployee.ts b/src/services/api/enterpriseEmployee.ts index 874d511..286ed8a 100644 --- a/src/services/api/enterpriseEmployee.ts +++ b/src/services/api/enterpriseEmployee.ts @@ -158,6 +158,21 @@ ); } +/** 鍙戦�侀個璇风绾︾煭淇� POST /api/user/enterpriseEmployee/sendInviteElectronSignSms */ +export async function sendInviteElectronSignSms( + body: API.SendInviteElectronSignSmsCommand, + options?: API.RequestConfig +) { + return request<number>('/api/user/enterpriseEmployee/sendInviteElectronSignSms', { + method: 'POST', + headers: { + 'Content-Type': 'application/json-patch+json', + }, + data: body, + ...(options || {}), + }); +} + /** 鐏靛伐瑙g害 POST /api/user/enterpriseEmployee/stopElectronSign */ export async function stopElectronSign( body: API.StopElectronSignCommand, diff --git a/src/services/api/taskUser.ts b/src/services/api/taskUser.ts index 85e1c78..a66d30a 100644 --- a/src/services/api/taskUser.ts +++ b/src/services/api/taskUser.ts @@ -56,19 +56,19 @@ }); } -/** 鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁 POST /api/flexjob/taskUser/getSettlementTaskUsers */ +/** 鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁 GET /api/flexjob/taskUser/getSettlementTaskUsers */ export async function getSettlementTaskUsers( - body: API.GetSettlementTaskUsersQuery, + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetSettlementTaskUsersParams, options?: API.RequestConfig ) { return request<API.GetSettlementTaskUsersQueryResult>( '/api/flexjob/taskUser/getSettlementTaskUsers', { - method: 'POST', - headers: { - 'Content-Type': 'application/json-patch+json', + method: 'GET', + params: { + ...params, }, - data: body, ...(options || {}), } ); diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index 5aa46b1..a904276 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -187,6 +187,13 @@ id?: string; } + interface APIgetSettlementTaskUsersParams { + /** 浠诲姟Id */ + taskInfoId?: string; + /** 缁撶畻鍗曞湴鍧� */ + settlementOrderUrl?: string; + } + interface APIgetTaskEnterpriseParams { /** 浼佷笟Id */ id?: string; @@ -585,9 +592,11 @@ } enum EnumEnterpriseWalletExpandindirectOrderStatus { + /**鏈繘浠� */ + Wait = 1, /**瀹℃壒涓� */ PROCESSING = 10, - /**宸茬敓鏁� */ + /**宸茶繘浠� */ VALID = 20, /**瀹℃壒涓嶉�氳繃 */ INVALID = 30, @@ -598,6 +607,8 @@ } enum EnumEnterpriseWalletSignStatus { + /**鏈绾� */ + Wait = 1, /**鐢宠涓� */ Apply = 10, /**宸茬绾� */ @@ -3179,6 +3190,10 @@ /** 閽卞寘Id */ id?: string; access?: EnumEnterpriseWalletAccess; + /** 璐﹀彿 */ + account?: string; + /** 鍟嗘埛Id */ + merchantId?: string; /** 鍗忚鍙� */ code?: string; /** 閫氶亾鍗忚鍙� */ @@ -3190,6 +3205,7 @@ /** 鍗忚澶辨晥鏃堕棿 */ invalidTime?: string; signStatus?: EnumEnterpriseWalletSignStatus; + expandindirectOrderStatus?: EnumEnterpriseWalletExpandindirectOrderStatus; } interface GetEnterpriseWalletTransactionQueryResult { @@ -3995,22 +4011,11 @@ settlementUserCount?: number; } - interface GetSettlementTaskUsersQuery { - /** 浠诲姟Id */ - taskInfoId?: string; - /** 鍏抽敭瀛� */ - keywords?: string; - /** 缁撶畻鍗曞湴鍧� */ - settlementOrderUrl?: string; - pageModel?: PagedListQueryPageModel; - } - interface GetSettlementTaskUsersQueryResult { + /** 缁撶畻鍚嶅崟 */ + data?: GetSettlementTaskUsersQueryResultItem[]; /** 閿欒淇℃伅 */ errors?: GetSettlementTaskUsersQueryResultError[]; - pageModel?: PagedListQueryResultPageModel; - /** 鏁版嵁 */ - data?: GetSettlementTaskUsersQueryResultItem[]; } interface GetSettlementTaskUsersQueryResultError { @@ -4660,6 +4665,10 @@ /** 浼佷笟Id */ enterpriseId?: string; access?: EnumEnterpriseWalletAccess; + /** 璐﹀彿 */ + account?: string; + /** 鍟嗘埛Id */ + merchantId?: string; } interface OpenEnterpriseWalletCommandResult { @@ -5193,6 +5202,11 @@ data?: GetDictionaryDataSelectQueryResultOption; } + interface SendInviteElectronSignSmsCommand { + /** Id */ + ids?: string[]; + } + interface SendLoginOrRegisterVerifyCodeCommand { /** 鎵嬫満鍙风爜 */ phoneNumber: string; diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue index 55741d4..af9b798 100644 --- a/src/views/FlexJobManage/FlexJobManage.vue +++ b/src/views/FlexJobManage/FlexJobManage.vue @@ -531,6 +531,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 756a31a..8c10aa8 100644 --- a/src/views/ServiceChargeManage/ServiceChargeDetail.vue +++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue @@ -129,6 +129,7 @@ import * as taskUserServices from '@/services/api/taskUser'; import EditAccountInfoDialog from './components/EditAccountInfoDialog.vue'; import { Message } from '@bole-core/core'; +import { paginateList } from '@/utils'; defineOptions({ name: 'ServiceChargeDetail', @@ -192,19 +193,28 @@ } = useTable( async ({ pageIndex, pageSize }, extraParamState) => { try { - let params: API.GetSettlementTaskUsersQuery = { + 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, }, - taskInfoId: id, - // settlementOrderUrl:form. - keywords: extraParamState.keywords, - }; - - let res = await taskUserServices.getSettlementTaskUsers(params); - return res; + data: paginateList(res.data, pageIndex, pageSize), + }); } catch (error) { console.log('error: ', error); } @@ -214,7 +224,7 @@ keywords: '', orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], }, - queryKey: ['taskUserServices/getOpenTaskInfos'], + queryKey: ['taskUserServices/getSettlementTaskUsers'], columnsRenderProps: {}, } ); diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue index 868fbbf..f60c590 100644 --- a/src/views/ServiceChargeManage/ServiceChargeManage.vue +++ b/src/views/ServiceChargeManage/ServiceChargeManage.vue @@ -46,7 +46,7 @@ </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="handleAdd()">涓婁紶缁撶畻鍗�</el-button> <el-button type="primary" @click="handleDownloadTemplate()">瀵煎嚭</el-button> </template> </ProTableQueryFilterBar> @@ -55,18 +55,39 @@ :columns="ServiceChargeManageColumns" :operationBtns="operationBtns" > - <template #operationBtn-uploadBtn="{ data, row }"> + <template #operationBtn-uploadBtn="{ row }"> <BlFileUpload - v-model:file-url="row.listFiles" - multiple + v-if="row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Wait" + 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-if=" + row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed && + row.settlementStatus === EnumTaskSettlementStatus.Wait + " + 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> @@ -93,7 +114,12 @@ BlFileUpload, } from '@bole-core/components'; import { ServiceChargeManageColumns } from './constants'; -import { EnumTaskSettlementStatusText, EnumTaskSettlementOrderStatusText } from '@/constants'; +import { + EnumTaskSettlementStatusText, + EnumTaskSettlementOrderStatusText, + EnumTaskSettlementOrderStatus, + EnumTaskSettlementStatus, +} from '@/constants'; import { downloadFileByUrl } from '@/utils'; import * as taskServices from '@/services/api/task'; import { ModelValueType } from 'element-plus'; @@ -106,30 +132,6 @@ }); const operationBtns = defineOperationBtns([ - // { - // data: { - // enCode: 'uploadBtn', - // name: '涓婁紶', - // }, - // emits: { - // onClick: (role) => openDialog(role), - // }, - // extraProps: { - // hide: () => false, - // }, - // }, - // { - // data: { - // enCode: 'reUploadBtn', - // name: '閲嶆柊涓婁紶', - // }, - // emits: { - // onClick: (role) => openDialog(role), - // }, - // extraProps: { - // hide: () => false, - // }, - // }, { data: { enCode: 'settleBtn', @@ -161,7 +163,7 @@ name: '璇︽儏', }, emits: { - onClick: (role) => goDetail(role), + onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role.id), }, }, { @@ -245,28 +247,19 @@ } ); -const { dialogProps, handleAdd, handleEdit, editForm } = useFormDialog({ +const { dialogProps, handleAdd, editForm } = useFormDialog({ onConfirm: handleAddOrEdit, defaultFormParams: { + code: '', id: '', name: '', settlementUrl: [] as UploadUserFile[], }, }); -function openDialog(row?: API.GetSettlementTasksQueryResultItem) { - if (row) { - handleEdit({ - id: row?.id, - name: row?.name, - settlementUrl: [] as UploadUserFile[], - }); - } else { - handleAdd(); - } +async function handleAddOrEdit() { + goDetail(editForm.id, editForm.settlementUrl[0]?.url); } - -async function handleAddOrEdit() {} const { dialogProps: dialogSettleProps, @@ -325,15 +318,15 @@ row: API.GetSettlementTasksQueryResultItem ) { if (response.url) { - goDetail(row, response.url); + goDetail(row.id, response.url); } } -function goDetail(row: API.GetSettlementTasksQueryResultItem, url?: string) { +function goDetail(id: string, url?: string) { router.push({ name: 'ServiceChargeDetail', query: { - id: row.id, + id: id, url: url ? url : '', }, }); diff --git a/src/views/ServiceChargeManage/components/UploadStatementDialog.vue b/src/views/ServiceChargeManage/components/UploadStatementDialog.vue index 451b4fc..7cd652e 100644 --- a/src/views/ServiceChargeManage/components/UploadStatementDialog.vue +++ b/src/views/ServiceChargeManage/components/UploadStatementDialog.vue @@ -8,13 +8,14 @@ :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" + v-model="form.code" :valueEnum="[]" placeholder="璇烽�夋嫨浠诲姟鍗曞彿" filterable clearable + @change="handleCodeChange" > </ProFormSelect> </ProFormItemV2> @@ -23,6 +24,7 @@ style="width: 50%" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" v-model.trim="form.name" + disabled ></ProFormText> </ProFormItemV2> <ProFormItemV2 @@ -66,6 +68,7 @@ type Form = { title?: string; id: string; + code: string; name: string; settlementUrl: UploadUserFile[]; }; @@ -81,6 +84,8 @@ const dialogForm = ref<FormInstance>(); +function handleCodeChange() {} + function onDialogClose() { if (!dialogForm.value) return; dialogForm.value.resetFields(); -- Gitblit v1.9.1