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