From 4810a40bc1d3d8b103e24419e9745f8e61ab859a Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 23 十月 2025 21:47:32 +0800
Subject: [PATCH] fix: bug
---
src/views/ServiceChargeManage/ServiceChargeDetail.vue | 378 ++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 271 insertions(+), 107 deletions(-)
diff --git a/src/views/ServiceChargeManage/ServiceChargeDetail.vue b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
index de7d1ff..21a8b34 100644
--- a/src/views/ServiceChargeManage/ServiceChargeDetail.vue
+++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
@@ -1,6 +1,6 @@
<template>
<LoadingLayout :loading="isLoading">
- <AppContainer>
+ <AppScrollContainer>
<ChunkCell title="缁撶畻鍗曡鎯�">
<ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
<ProFormCol>
@@ -15,7 +15,7 @@
</ProFormItemV2>
</ProFormColItem>
</ProFormCol>
- <ProFormCol>
+ <!-- <ProFormCol>
<ProFormColItem :span="8">
<ProFormItemV2 label="缁撶畻鍗曞悕绉�:" prop="settlementOrderName">
<ProFormText v-model="form.settlementOrderName"> </ProFormText>
@@ -30,7 +30,7 @@
></ProFormDatePicker>
</ProFormItemV2>
</ProFormColItem>
- </ProFormCol>
+ </ProFormCol> -->
<ProFormCol>
<ProFormColItem :span="8">
<ProFormItemV2 label="缁撶畻閲戦:" prop="settlementAmount">
@@ -47,28 +47,6 @@
</ProFormCol>
</ProForm>
</ChunkCell>
- <!-- <ChunkCell title="缁撶畻娴佺▼">
- <div class="step-wrapper">
- <el-steps :active="1" align-center finish-status="process">
- <el-step title="缁撶畻鍗曚笂浼�" :icon="Edit">
- <template #description>
- <div>鍒涘缓浜�:{{ form.name }}</div>
- <div>鏃堕棿:{{ form.name }}</div>
- <TextOverTooltip>澶囨敞:{{ form.name }}</TextOverTooltip>
- </template>
- </el-step>
- <el-step title="缁撶畻浠樻" :icon="Upload">
- <template #description>
- <div>鍒涘缓浜�:{{ form.name }}</div>
- <div>鏃堕棿:{{ form.name }}</div>
- <TextOverTooltip
- >澶囨敞:{{ 'form.nameform.nameform.eform.nameform.nameform.name' }}</TextOverTooltip
- >
- </template>
- </el-step>
- </el-steps>
- </div>
- </ChunkCell> -->
<ChunkCell title="缁撶畻鍚嶅崟" style="flex: 1" class="settlement-user-list-chunk">
<ProTableQueryFilterBar @on-reset="reset">
<template #query>
@@ -82,31 +60,58 @@
</SearchInput>
</QueryFilterItem>
</template>
+ <template #btn v-if="isSettlement">
+ <BlFileUpload
+ v-model:file-url="form.settlementUrl"
+ ref="uploadRef"
+ :showTip="false"
+ :show-file-list="false"
+ class="pro-table-operation-btn upload-style-btn"
+ :on-success="(event) => handleUploadSuccess(event)"
+ :limitFileSize="null"
+ :limit="1"
+ accept="xlsx,xls"
+ >
+ <el-button text type="primary" class="pro-table-operation-btn">瀵煎叆</el-button>
+ </BlFileUpload>
+ <el-button type="primary" link @click="handleExport()">瀵煎嚭</el-button>
+ </template>
</ProTableQueryFilterBar>
<ProTableV2
v-bind="proTableProps"
:columns="SettlementListColumns"
- :show-operation-column="false"
+ :operationBtns="operationBtns"
:auto-height="false"
ref="proTable"
:tableProps="{
- maxHeight: '250px',
+ maxHeight: '400px',
}"
>
</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"
+ v-if="
+ isSettlement &&
+ (!form.auditStatus || form.auditStatus !== EnumTaskSettlementAuditStatus.Pass)
+ "
class="chuck-add-or-edit-actions"
type="primary"
- @click="handleSubmit"
- >纭</el-button
+ @click="handleSubmit()"
+ >缁撶畻鐢宠</el-button
+ >
+ <el-button
+ v-if="isSettlement && form.auditStatus === EnumTaskSettlementAuditStatus.Pass"
+ class="chuck-add-or-edit-actions"
+ type="primary"
+ @click="handleSubmit()"
+ >鎻愪氦缁撶畻</el-button
>
</div>
</ChunkCell>
- </AppContainer>
+ </AppScrollContainer>
<EditAccountInfoDialog v-bind="dialogProps"></EditAccountInfoDialog>
+ <SettleDetailDialog v-bind="dialogSettleProps" />
</LoadingLayout>
</template>
<script setup lang="ts">
@@ -130,14 +135,26 @@
ProTableQueryFilterBar,
useFormDialog,
XLSXUtils,
+ BlFileUpload,
+ UploadUserFile,
} from '@bole-core/components';
import { SettlementListColumns } from './constants';
import { useQuery } from '@tanstack/vue-query';
import * as taskServices from '@/services/api/task';
import * as taskUserServices from '@/services/api/taskUser';
import EditAccountInfoDialog from './components/EditAccountInfoDialog.vue';
+import SettleDetailDialog from './components/SettleDetailDialog.vue';
import { Message } from '@bole-core/core';
-import { paginateList, setOssFileName, toThousand } from '@/utils';
+import { SettlementReceiveStatusText, EnumTaskSettlementAuditStatus } from '@/constants';
+import {
+ downloadFile,
+ downloadFileByUrl,
+ paginateList,
+ setOssFileName,
+ setOSSLink,
+ toThousand,
+} from '@/utils';
+import _ from 'lodash';
defineOptions({
name: 'ServiceChargeDetail',
@@ -154,14 +171,16 @@
emits: {
onClick: (role) => openDialog(role),
},
+ extraProps: {
+ hide: () => !isSettlement.value,
+ },
},
]);
-
const route = useRoute();
const id = (route.params.id as string) ?? '';
-const url = (route.query.url as string) ?? '';
-
-const isDetail = computed(() => !url);
+const settlement = (route.query.settlement as string) ?? '';
+// const settlementAccess = route.query.settlementAccess ?? '';
+const isSettlement = computed(() => !!settlement);
const form = reactive({
name: '',
@@ -171,6 +190,15 @@
settlementOrderName: '',
settlementOrderTime: '',
settlementTaskUsers: [] as API.GetSettlementTaskUsersQueryResultItem[],
+
+ settlementUrl: [] as UploadUserFile[],
+
+ settlementAccess: '' as any as EnumEnterpriseWalletAccess,
+ isSettlement: isSettlement.value,
+
+ auditStatus: '' as any as EnumTaskSettlementAuditStatus,
+
+ timeoutServiceFee: 0,
});
const BaseState = {
@@ -179,41 +207,21 @@
const state = reactive({ ...BaseState });
-// onMounted(async () => {
-// await getList();
-// state.loading = false;
-// });
-
-// const { isLoading } = useQuery({
-// queryKey: ['taskServices/getSettlementTask', id],
-// queryFn: async () => {
-// return await taskServices.getSettlementTask(
-// { id: id },
-// {
-// showLoading: false,
-// }
-// );
-// },
-// placeholderData: () => ({} as API.GetSettlementTaskQueryResult),
-// onSuccess(data) {
-// form.name = data.name;
-// form.settlementAmount = data.settlementAmount ?? 0;
-// form.actualSettlementAmount = data.actualSettlementAmount ?? 0;
-// form.code = data.code;
-// form.settlementOrderName = setOssFileName(data.settlementOrderName);
-// form.settlementOrderTime = data.settlementOrderTime ?? '';
-// },
-// enabled: !!id,
-// });
-const { isLoading } = useQuery({
- queryKey: ['taskUserServices/getSettlementTaskUsers', id, url],
+const { isLoading, refetch } = useQuery({
+ queryKey: ['taskUserServices/getSettlementTaskUsers', id, toRef(form, 'isSettlement')],
queryFn: async () => {
- return await taskUserServices.getSettlementTaskUsers(
- { taskInfoId: id, settlementOrderUrl: url },
- {
- showLoading: false,
- }
- );
+ let params: API.APIgetSettlementTaskUsersParams = {
+ id: id,
+ };
+ // if (form.settlementAccess) {
+ // params.settlementAccess = Number(form.settlementAccess);
+ // }
+ if (form.isSettlement) {
+ params.isImport = true;
+ }
+ return await taskUserServices.getSettlementTaskUsers(params, {
+ showLoading: false,
+ });
},
placeholderData: () => ({} as API.GetSettlementTaskUsersQueryResult),
onSuccess(res) {
@@ -223,28 +231,31 @@
form.settlementAmount = res?.detail?.settlementAmount ?? 0;
form.actualSettlementAmount = res?.detail?.actualSettlementAmount ?? 0;
form.code = res?.detail?.code;
- form.settlementOrderName = setOssFileName(res?.detail?.settlementOrderName);
- form.settlementOrderTime = res?.detail?.settlementOrderTime ?? '';
+ form.settlementAccess = res?.detail?.settlementAccess;
+ form.auditStatus = res?.detail?.auditStatus;
+ form.timeoutServiceFee = res?.detail?.timeoutServiceFee ?? 0;
+ // form.settlementOrderName = setOssFileName(res?.detail?.settlementOrderName);
+ // form.settlementOrderTime = res?.detail?.settlementOrderTime ?? '';
}
- if (res?.errors?.length > 0) {
- Message.tipMessage('瀛樺湪瀵煎叆閿欒鐨勬暟鎹紝鏄惁瀵煎嚭锛�').then(() => {
- XLSXUtils.exportToXLSX({
- workbookDataList: res.errors,
- fileName: '缁撶畻瀵煎叆-閿欒鏁版嵁',
- workbookHeaderMap: {
- name: '濮撳悕',
- identity: '韬唤璇佸彿',
- taskName: '浠诲姟鍚嶇О',
- settlementAmount: '缁撶畻閲戦',
- actualSettlementAmount: '瀹炲彂閲戦',
- receiveAccount: '鏀舵璐︽埛',
- bank: '鎵�灞為摱琛�',
- bankBranch: '寮�鎴锋敮琛屽悕绉�',
- errorMessage: '閿欒淇℃伅',
- },
- });
- });
- }
+ // if (res?.errors?.length > 0) {
+ // Message.tipMessage('瀛樺湪瀵煎叆閿欒鐨勬暟鎹紝鏄惁瀵煎嚭锛�').then(() => {
+ // XLSXUtils.exportToXLSX({
+ // workbookDataList: res.errors,
+ // fileName: '缁撶畻瀵煎叆-閿欒鏁版嵁',
+ // workbookHeaderMap: {
+ // name: '濮撳悕',
+ // identity: '韬唤璇佸彿',
+ // taskName: '浠诲姟鍚嶇О',
+ // settlementAmount: '缁撶畻閲戦',
+ // actualSettlementAmount: '瀹炲彂閲戦',
+ // receiveAccount: '鏀舵璐︽埛',
+ // bank: '鎵�灞為摱琛�',
+ // bankBranch: '寮�鎴锋敮琛屽悕绉�',
+ // errorMessage: '閿欒淇℃伅',
+ // },
+ // });
+ // });
+ // }
getList();
},
enabled: !!id,
@@ -292,6 +303,14 @@
settlementTime: { type: 'date' },
settlementAmount: { type: 'money' },
actualSettlementAmount: { type: 'money' },
+ settlementReceiveStatus: { type: 'enum', valueEnum: SettlementReceiveStatusText },
+ serviceFee: { type: 'money' },
+ timeoutHours: {
+ formatter: (row: API.GetSettlementTaskUsersQueryResultItem) =>
+ row.timeoutHours ? `${row.timeoutHours}灏忔椂` : '',
+ },
+ timeoutFee: { type: 'money' },
+ otherFee: { type: 'money' },
},
}
);
@@ -300,34 +319,155 @@
onConfirm: handleAddOrEdit,
defaultFormParams: {
id: '',
- name: '',
+ settlementAmount: null as number,
+ actualSettlementAmount: null as number,
+ receiveAccount: '',
+ bank: '',
+ // totalWorkHours: null as number,
+ settlementAccess: form.settlementAccess,
+ // bankBranch: '',
+ timeoutServiceFee: 0,
+ serviceFee: null as number,
+ timeoutHours: null as number,
+ timeoutFee: null as number,
+ otherFee: null as number,
+ remark: '',
},
});
-function openDialog(row?) {
+function openDialog(row?: API.GetSettlementTaskUsersQueryResultItem) {
if (row) {
handleEdit({
id: row?.id,
- name: row?.name,
+ settlementAmount: row?.settlementAmount ?? null,
+ actualSettlementAmount: row?.actualSettlementAmount ?? null,
+ receiveAccount: row?.receiveAccount ?? '',
+ bank: row?.bank ?? '',
+ // totalWorkHours: row?.totalWorkHours ?? null,
+ settlementAccess: form.settlementAccess,
+ // bankBranch: row?.bankBranch ?? '',
+ timeoutServiceFee: form.timeoutServiceFee,
+ serviceFee: row?.serviceFee ?? 0,
+ timeoutHours: row?.timeoutHours ?? null,
+ timeoutFee: row?.timeoutFee ?? null,
+ otherFee: row?.otherFee ?? null,
+ remark: row?.remark ?? '',
});
}
}
-async function handleAddOrEdit() {}
-
-async function handleSubmit() {
+async function handleAddOrEdit() {
try {
- let params: API.SureTaskSettlementOrderCommand = {
- taskInfoId: id,
- settlementOrderUrl: url,
- taskInfoUsers:
- proTableProps.value.tableData?.length > 0
- ? proTableProps.value.tableData.map(
- (x) => ({ ...x } as API.SureTaskSettlementOrderCommandUser)
- )
- : [],
+ const settlementAmount =
+ (editForm.timeoutFee ?? 0) + (editForm.serviceFee ?? 0) + (editForm.otherFee ?? 0);
+ let params: API.EditTaskSettlementOrderRosterCommand = {
+ id: editForm.id,
+ settlementAmount: settlementAmount,
+ actualSettlementAmount: editForm.actualSettlementAmount,
+ receiveAccount: editForm.receiveAccount,
+ bank: editForm.bank,
+ // totalWorkHours: editForm.totalWorkHours,
+ // bankBranch: editForm.bankBranch,
+ serviceFee: editForm.serviceFee,
+ timeoutHours: editForm.timeoutHours,
+ timeoutFee: editForm.timeoutFee,
+ otherFee: editForm.otherFee,
+ remark: editForm.remark,
};
- let res = await taskServices.sureTaskSettlementOrder(params);
+ let res = await taskServices.editTaskSettlementOrderRoster(params);
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ form.isSettlement = false;
+ refetch();
+ getList(paginationState.pageIndex);
+ }
+ } catch (error) {}
+}
+
+function handleUploadSuccess(response: UploadUserFile & { file: File & { uid: number } }) {
+ if (response.path) {
+ importTaskSettlementOrderRosters(response.path);
+ }
+}
+
+async function importTaskSettlementOrderRosters(url: string) {
+ try {
+ let params: API.ImportTaskSettlementOrderRostersCommand = {
+ id: id,
+ url: url,
+ };
+ let res = await taskServices.importTaskSettlementOrderRosters(params);
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ form.isSettlement = false;
+ refetch();
+ getList(paginationState.pageIndex);
+ if (res?.errors?.length > 0) {
+ Message.tipMessage('瀛樺湪瀵煎叆閿欒鐨勬暟鎹紝鏄惁瀵煎嚭锛�').then(() => {
+ XLSXUtils.exportToXLSX({
+ workbookDataList: res.errors,
+ fileName: '缁撶畻瀵煎叆-閿欒鏁版嵁',
+ workbookHeaderMap: {
+ name: '濮撳悕',
+ identity: '韬唤璇佸彿',
+ contactPhoneNumber: '鎵嬫満鍙�',
+ bank: '鎵�灞為摱琛�',
+ bankBranch: '鎵�灞炴敮琛�',
+ receiveAccount: '鏀舵璐︽埛',
+ totalWorkHours: '绱宸ユ椂锛堝皬鏃讹級',
+ settlementAmount: '缁撶畻閲戦',
+ actualSettlementAmount: '瀹炲彂閲戦',
+ errorMessage: '閿欒淇℃伅',
+ },
+ });
+ });
+ }
+ }
+ } catch (error) {
+ } finally {
+ form.settlementUrl = [] as UploadUserFile[];
+ }
+}
+
+function handleSubmit() {
+ handleSettleEdit({
+ id: id,
+ name: form.name,
+ code: form.code,
+ settlementUserCount: form.settlementTaskUsers.length,
+ actualSettlementAmount: form.actualSettlementAmount,
+ settlementAmount: form.settlementAmount,
+ settlementAccess: form.settlementAccess,
+ });
+}
+
+const {
+ dialogProps: dialogSettleProps,
+ handleEdit: handleSettleEdit,
+ editForm: settleEditForm,
+} = useFormDialog({
+ onConfirm: handleSettle,
+ defaultFormParams: {
+ id: '',
+ name: '',
+ code: '',
+ settlementUserCount: 0,
+ settlementAmount: 0,
+ actualSettlementAmount: 0,
+ settlementAccess: '' as any as EnumEnterpriseWalletAccess,
+ },
+});
+
+async function handleSettle() {
+ sureTaskSettlementOrder();
+}
+
+async function sureTaskSettlementOrder() {
+ try {
+ let params: API.SureTaskSettlementCommand = {
+ taskInfoId: id,
+ };
+ let res = await taskServices.sureTaskSettlement(params);
if (res) {
Message.successMessage('鎿嶄綔鎴愬姛');
eventContext.emit('sureTaskSettlementOrder');
@@ -335,6 +475,26 @@
}
} catch (error) {}
}
+
+const handleExport = _.debounce(
+ async () => {
+ if (paginationState.total === 0) {
+ Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝');
+ return;
+ }
+ try {
+ let params: API.ExportTaskSettlementOrderRostersCommand = {
+ id: id,
+ };
+ let res = await taskServices.exportTaskSettlementOrderRosters(params);
+ if (res) {
+ downloadFileByUrl(setOSSLink(res), `${form.name}-${form.code}`);
+ }
+ } catch (error) {}
+ },
+ 1000,
+ { leading: true, trailing: false }
+);
function handleBack() {
closeViewPush(route, {
@@ -358,6 +518,10 @@
}
}
}
+
+.chuck-add-or-edit-actions {
+ margin-bottom: 20px;
+}
</style>
<style lang="scss">
.text-over-tooltip-content {
--
Gitblit v1.9.1