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