From b331f884097a2dc5086c8cf043c8c8f52e7640fe Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 12 九月 2025 17:34:39 +0800
Subject: [PATCH] Merge branch 'master' into dev-v1.1

---
 src/views/ServiceChargeManage/ServiceChargeManage.vue |  316 ++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 245 insertions(+), 71 deletions(-)

diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue
index a8d7819..b697403 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.flexEnterpriseSettingStatus"
-              :value-enum="[
-                { label: '宸插畨鎺�', value: 1 },
-                { label: '寰呭畨鎺�', value: 0 },
-              ]"
+              v-model="extraParamState.settlementOrderStatus"
+              :value-enum="EnumTaskSettlementOrderStatusText"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -17,19 +14,16 @@
           </QueryFilterItem>
           <QueryFilterItem tip-content="缁撶畻鐘舵��">
             <FieldRadio
-              v-model="extraParamState.flexEnterpriseSettingStatus"
-              :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.flexEnterpriseSettingStatus"
+              v-model="extraParamState.time"
               type="daterange"
               range-separator="~"
               start-placeholder="璧峰鏃ユ湡"
@@ -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,19 +46,8 @@
         </template>
         <template #btn>
           <el-button type="primary" link @click="handleDownloadTemplate()">缁撶畻鍗曟ā鏉�</el-button>
-          <BlFileUpload
-            :limitFileSize="10"
-            accept="xls,xlsx"
-            :showTip="false"
-            :show-file-list="false"
-            :on-success="handleUploadSuccess"
-            style="margin-right: 10px; margin-left: 10px"
-          >
-            <template #default>
-              <el-button type="primary">涓婁紶缁撶畻鍗�</el-button>
-            </template>
-          </BlFileUpload>
-          <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
@@ -72,23 +55,41 @@
         :columns="ServiceChargeManageColumns"
         :operationBtns="operationBtns"
       >
-        <template #operationBtn-uploadBtn="{ data, row }">
+        <!-- <template #operationBtn-uploadBtn="{ row }">
           <BlFileUpload
-            v-model:file-url="row.fileUrl"
-            :limitFileSize="2"
-            :limit="1"
-            accept="doc,docx"
+            v-model:file-url="editForm.settlementUrl"
             ref="uploadRef"
             :showTip="false"
-            :on-success="(response) => handleUpload(response, row)"
             :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 link type="primary">涓婁紶</el-button>
+            <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" />
+    <SettleDetailDialog v-bind="dialogSettleProps" />
+    <RechargeEnterpriseWalletDialog v-bind="dialogRechargeProps" />
   </LoadingLayout>
 </template>
 
@@ -104,33 +105,80 @@
   FieldDatePicker,
   FieldRadio,
   defineOperationBtns,
-  BlFileUpload,
+  useFormDialog,
   UploadUserFile,
+  BlFileUpload,
 } from '@bole-core/components';
-import * as flexEnterpriseServices from '@/services/api/FlexEnterprise';
 import { ServiceChargeManageColumns } from './constants';
-import { FlexEnterpriseSettingStatus, Gender } from '@/constants';
-import { OrderInputType } from '@bole-core/core';
-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 RechargeEnterpriseWalletDialog from './components/RechargeEnterpriseWalletDialog.vue';
+import { Message } from '@bole-core/core';
 
 defineOptions({
   name: 'ServiceChargeManageList',
 });
 
 const operationBtns = defineOperationBtns([
-  {
-    data: {
-      enCode: 'uploadBtn',
-      name: '涓婁紶',
-    },
-  },
+  // {
+  //   data: {
+  //     enCode: 'uploadBtn',
+  //     name: '涓婁紶',
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetSettlementTasksQueryResultItem) =>
+  //       row.settlementOrderStatus !== EnumTaskSettlementOrderStatus.Wait,
+  //   },
+  // },
+  // {
+  //   data: {
+  //     enCode: 'reUploadBtn',
+  //     name: '閲嶆柊涓婁紶',
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetSettlementTasksQueryResultItem) =>
+  //       !(
+  //         row.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed &&
+  //         row.settlementStatus === EnumTaskSettlementStatus.Wait
+  //       ),
+  //   },
+  // },
   {
     data: {
       enCode: 'settleBtn',
       name: '缁撶畻',
     },
     emits: {
-      onClick: (role) => goSettle(role),
+      onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role, 'settlement'),
+    },
+    extraProps: {
+      hide: (role: API.GetSettlementTasksQueryResultItem) =>
+        !(
+          role.settlementOrderStatus === EnumTaskSettlementOrderStatus.Completed &&
+          role.settlementStatus === EnumTaskSettlementStatus.Wait
+        ),
+    },
+  },
+  {
+    data: {
+      enCode: 'recallBtn',
+      name: '鎾ゅ洖',
+    },
+    emits: {
+      onClick: (role) => handleRecall(role),
+    },
+    extraProps: {
+      hide: (role: API.GetSettlementTasksQueryResultItem) =>
+        role.settlementStatus !== EnumTaskSettlementStatus.InProcess,
     },
   },
   {
@@ -139,7 +187,11 @@
       name: '璇︽儏',
     },
     emits: {
-      onClick: (role) => goDetail(role),
+      onClick: (role: API.GetSettlementTasksQueryResultItem) => goDetail(role),
+    },
+    extraProps: {
+      hide: (role: API.GetSettlementTasksQueryResultItem) =>
+        role.settlementOrderStatus === EnumTaskSettlementOrderStatus.Wait,
     },
   },
   {
@@ -150,10 +202,21 @@
     emits: {
       onClick: (role) => handleExport(role),
     },
+    extraProps: {
+      hide: () => true,
+    },
   },
 ]);
 
 const router = useRouter();
+
+const { userDetail } = useUser();
+
+const eventContext = useGlobalEventContext();
+
+eventContext.addEvent('sureTaskSettlementOrder', () => {
+  getList(paginationState.pageIndex);
+});
 
 const BaseState = {
   loading: true,
@@ -175,17 +238,18 @@
 } = useTable(
   async ({ pageIndex, pageSize }, extraParamState) => {
     try {
-      let params: API.GetFlexEnterpriseInput = {
+      let params: API.GetSettlementTasksQuery = {
         pageModel: {
           rows: pageSize,
           page: pageIndex,
           orderInput: extraParamState.orderInput,
         },
-        flexEnterpriseSettingStatus: extraParamState.flexEnterpriseSettingStatus,
-        searchWord: extraParamState.searchWord,
+        keywords: extraParamState.keywords,
+        settlementOrderStatus: extraParamState.settlementOrderStatus,
+        settlementStatus: extraParamState.settlementStatus,
       };
 
-      let res = await flexEnterpriseServices.getFlexEnterpriseList(params, {
+      let res = await taskServices.getSettlementTasks(params, {
         showLoading: !state.loading,
       });
       return res;
@@ -195,37 +259,144 @@
   },
   {
     defaultExtraParams: {
-      searchWord: '',
-      orderInput: [{ property: 'id', order: OrderInputType.Desc }],
-      flexEnterpriseSettingStatus: '' as any as FlexEnterpriseSettingStatus,
+      keywords: '',
+      settlementOrderStatus: '' as any as EnumTaskSettlementOrderStatus,
+      settlementStatus: '' as any as EnumTaskSettlementStatus,
+      time: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
     },
-    queryKey: ['flexEnterpriseServices/getFlexEnterpriseList'],
-    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),
+      },
+    },
   }
 );
 
-function goSettle(row) {
-  router.push({
-    name: 'ServiceChargeSettle',
-    params: {
-      id: row.id,
-    },
+const { dialogProps, handleAdd, editForm } = useFormDialog({
+  onConfirm: handleAddOrEdit,
+  defaultFormParams: {
+    code: '',
+    id: '',
+    name: '',
+    settlementUrl: [] as UploadUserFile[],
+  },
+});
+
+async function handleAddOrEdit() {
+  goSettlementDetail(editForm.id, editForm.settlementUrl[0]?.path);
+}
+
+const {
+  dialogProps: dialogSettleProps,
+  handleEdit: handleSettleEdit,
+  editForm: settleEditForm,
+} = useFormDialog({
+  onConfirm: handleSettle,
+  defaultFormParams: {
+    id: '',
+    name: '',
+    code: '',
+    settlementUserCount: 0,
+    actualSettlementAmount: 0,
+  },
+});
+
+async function handleSettle() {
+  try {
+    let params: API.SureTaskSettlementCommand = {
+      taskInfoId: settleEditForm.id,
+    };
+    let res = await taskServices.sureTaskSettlement(params, {
+      skipErrorHandler: true,
+    });
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {
+    if (error?.info?.errorCode == 's510') {
+      handleRechargeAdd();
+    }
+  }
+}
+
+const {
+  dialogProps: dialogRechargeProps,
+  handleAdd: handleRechargeAdd,
+  editForm: rechargeEditForm,
+} = useFormDialog({
+  defaultFormParams: {
+    access: EnumEnterpriseWalletAccess.Alipay,
+    amount: null as number,
+    remark: '',
+  },
+});
+
+function openSettleDialog(row: API.GetSettlementTasksQueryResultItem) {
+  handleSettleEdit({
+    id: row.id,
+    name: row.name,
+    code: row.code,
+    settlementUserCount: row.settlementUserCount ?? 0,
+    actualSettlementAmount: row.actualSettlementAmount ?? 0,
   });
 }
 
-function goDetail(row) {
+async function handleRecall(row: API.GetSettlementTasksQueryResultItem) {
+  try {
+    await 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 handleUploadSuccess(
+  response: UploadUserFile & { file: File & { uid: number } },
+  row: API.GetSettlementTasksQueryResultItem
+) {
+  if (response.path) {
+    goSettlementDetail(row.id, response.path);
+  }
+}
+
+async function goSettlementDetail(id: string, url?: string) {
+  await router.push({
+    name: 'ServiceChargeDetail',
+    params: {
+      id: id,
+    },
+    query: {
+      url: url ? url : '',
+    },
+  });
+  editForm.settlementUrl = [] as UploadUserFile[];
+}
+
+function goDetail(row: API.GetSettlementTasksQueryResultItem, settlement?: string) {
   router.push({
     name: 'ServiceChargeDetail',
     params: {
-      id: row.id,
+      id: row?.id ?? '',
+    },
+    query: {
+      settlement: settlement ? settlement : '',
     },
   });
-}
-
-function handleUploadSuccess(response: UploadUserFile) {}
-
-function handleUpload(val, row) {
-  console.log('val: ', val);
 }
 
 function handleExport(val) {
@@ -233,6 +404,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>

--
Gitblit v1.9.1