From 8a27eb793148aa30558f3efa317fde14b6367dc1 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 17 十月 2025 14:54:13 +0800
Subject: [PATCH] feat: 1.2.0.1

---
 src/views/FinanceManage/EnterpriseBalanceManage.vue       |  107 +++++++++++++++++
 src/views/FinanceManage/EnterpriseBalanceManageDetail.vue |  202 +++++++++++++++++++++++++++++++++
 2 files changed, 309 insertions(+), 0 deletions(-)

diff --git a/src/views/FinanceManage/EnterpriseBalanceManage.vue b/src/views/FinanceManage/EnterpriseBalanceManage.vue
new file mode 100644
index 0000000..6873425
--- /dev/null
+++ b/src/views/FinanceManage/EnterpriseBalanceManage.vue
@@ -0,0 +1,107 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.keywords"
+              style="width: 260px"
+              placeholder="浼佷笟鍚嶇О/淇$敤浠g爜"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  OperationBtnType,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  useFormDialog,
+} from '@bole-core/components';
+import { useAccess } from '@/hooks';
+import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
+import { EnumEnterpriseWalletAccessText } from '@/constants';
+
+defineOptions({
+  name: 'EnterpriseBalanceManage',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: { emits: { onClick: (role) => goDetail(role) } },
+};
+
+const { column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+const router = useRouter();
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetEnterpriseWalletBalancesQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        keywords: extraParamState.keywords,
+      };
+
+      let res = await enterpriseWalletServices.getEnterpriseWalletBalances(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      access: { type: 'enum', valueEnum: EnumEnterpriseWalletAccessText },
+      balance: { type: 'money' },
+    },
+  }
+);
+
+function goDetail(row: API.GetEnterpriseWalletBalancesQueryResultItem) {
+  router.push({
+    name: 'EnterpriseBalanceManageDetail',
+    params: {
+      id: row.id,
+    },
+  });
+}
+</script>
diff --git a/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue b/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue
new file mode 100644
index 0000000..66f5da2
--- /dev/null
+++ b/src/views/FinanceManage/EnterpriseBalanceManageDetail.vue
@@ -0,0 +1,202 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ChunkCell title="璐︽埛淇℃伅">
+        <ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
+          <ProFormCol>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="璐︽埛浣欓:" prop="balance">
+                <ProFormInputNumber v-model="form.balance" format-value="money">
+                </ProFormInputNumber>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="璐︽埛绫诲瀷:" prop="access">
+                <ProFormSelect v-model="form.access" :valueEnum="EnumEnterpriseWalletAccessText">
+                </ProFormSelect>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="8">
+              <ProFormItemV2 label="鎴峰彿:" prop="identity">
+                <ProFormText v-model.trim="form.identity"> </ProFormText>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="鍙戞斁鏄庣粏" style="flex: 1" class="settlement-user-list-chunk">
+        <ProTableQueryFilterBar @on-reset="reset">
+          <template #query>
+            <QueryFilterItem>
+              <FieldDatePicker
+                v-model="extraParamState.creationTime"
+                type="daterange"
+                range-separator="~"
+                start-placeholder="璧峰鏃ユ湡"
+                end-placeholder="鎴鏃ユ湡"
+                clearable
+                @change="getList()"
+                tooltipContent="鐢宠鏃堕棿"
+              ></FieldDatePicker>
+            </QueryFilterItem>
+          </template>
+          <template #btn>
+            <el-button type="primary" @click="handleExport()">瀵煎嚭</el-button>
+          </template>
+        </ProTableQueryFilterBar>
+        <ProTableV2
+          v-bind="proTableProps"
+          :columns="column"
+          :show-operation-column="false"
+          :auto-height="false"
+          :table-props="{
+            height: '400px',
+          }"
+        >
+        </ProTableV2>
+      </ChunkCell>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+<script setup lang="ts">
+import {
+  LoadingLayout,
+  AppContainer,
+  ChunkCell,
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  ProFormCol,
+  ProFormColItem,
+  FieldDatePicker,
+  ProFormInputNumber,
+  useTable,
+  ProTableV2,
+  QueryFilterItem,
+  ProTableQueryFilterBar,
+  ProFormSelect,
+} from '@bole-core/components';
+import { EnumWalletTransactionStatusText, EnumEnterpriseWalletAccessText } from '@/constants';
+import * as taskServices from '@/services/api/task';
+import * as userServices from '@/services/api/user';
+import { Message } from '@bole-core/core';
+import { downloadFileByUrl, format, setOSSLink } from '@/utils';
+import _ from 'lodash';
+import { ModelValueType } from 'element-plus';
+
+defineOptions({
+  name: 'EnterpriseBalanceManageDetail',
+});
+
+const { column, operationBtns } = useAccess({});
+
+const route = useRoute();
+const id = (route.params.id as string) ?? '';
+
+const form = reactive({
+  identity: '',
+  access: '' as any as EnumEnterpriseWalletAccess,
+  balance: 0,
+});
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetPersonalUserTransactionsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        createdTimeStart: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        createdTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        enterpriseWalletId: id,
+      };
+      let res = await userServices.getPersonalUserTransactions(params);
+      if (res.objectData?.enterpriseWallet) {
+        form.identity = res.objectData.enterpriseWallet.identity;
+        form.access = res.objectData.enterpriseWallet.access;
+        form.balance = res.objectData.enterpriseWallet.balance;
+      }
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      creationTime: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      transDate: { type: 'date' },
+      sendTime: { type: 'date' },
+      amount: { type: 'money' },
+      transactionStatus: { type: 'enum', valueEnum: EnumWalletTransactionStatusText },
+      ereceiptDownloadOssUrl: {
+        type: 'url',
+        formatter: (row: API.GetPersonalUserTransactionsQueryResultItem) =>
+          row.ereceiptDownloadOssUrl ? setOSSLink(row.ereceiptDownloadOssUrl) : '',
+      },
+    },
+  }
+);
+
+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));
+      }
+    } catch (error) {}
+  },
+  1000,
+  { leading: true, trailing: false }
+);
+
+onMounted(() => {
+  state.loading = false;
+  getList();
+});
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+.step-wrapper {
+  margin: 0 auto;
+  padding: 24px 0;
+}
+
+.settlement-user-list-chunk {
+  :deep() {
+    .no-data img {
+      width: 280px;
+    }
+  }
+}
+</style>
+<style lang="scss">
+.text-over-tooltip-content {
+  max-width: 600px;
+  word-break: break-all;
+}
+</style>

--
Gitblit v1.9.1