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