zhengyiming
2025-09-17 81adf03a60f6b4452be4e3ad1f9e3915e0c78bf6
Merge branch 'dev-v1.1' of http://120.26.58.240:8888/r/flexJobAdminBClient into dev-v1.1
9个文件已添加
18个文件已修改
968 ■■■■ 已修改文件
.eslintrc-auto-import.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
auto-imports.d.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/PortraitTableWithAttachment.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/apiEnum.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/common.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/finance.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/task.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/portraitTable.ts 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.ts 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/components/CheckManageDialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FinanceManage/FinanceManage.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FinanceManage/components/DistributionDetailView.vue 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FinanceManage/components/UsageDetailView.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/FinanceManage/constants/columns.ts 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ServiceChargeManage/BalanceManage.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ServiceChargeManage/ServiceChargeDetail.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ServiceChargeManage/ServiceChargeManage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ServiceChargeManage/components/BalanceDetailDialog.vue 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ServiceChargeManage/components/FinanceDetailDialog.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ServiceChargeManage/constants/columns.ts 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/WithdrawManage/WithdrawManageList.vue 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/WithdrawManage/components/WithdrawalDetailDialog.vue 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/WithdrawManage/constants/columns.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/WithdrawManage/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.eslintrc-auto-import.json
@@ -5,6 +5,7 @@
    "AreaType": true,
    "CategoryCode": true,
    "CertificateTypeCodeEnum": true,
    "CommonAnnexTableColumns": true,
    "Component": true,
    "ComponentPublicInstance": true,
    "ComputedRef": true,
@@ -93,7 +94,9 @@
    "EnumUserType": true,
    "EnumUserTypeText": true,
    "EnumUserWalletTransactionType": true,
    "EnumUserWalletTransactionTypeText": true,
    "EnumWalletTransactionStatus": true,
    "EnumWalletTransactionStatusText": true,
    "ExtractDefaultPropTypes": true,
    "ExtractPropTypes": true,
    "ExtractPublicPropTypes": true,
@@ -132,6 +135,8 @@
    "OssUserSign": true,
    "PropType": true,
    "Ref": true,
    "SettlementReceiveStatus": true,
    "SettlementReceiveStatusText": true,
    "Slot": true,
    "Slots": true,
    "SubModuleKey": true,
@@ -143,6 +148,8 @@
    "ThemeColorName": true,
    "ThemeColors": true,
    "ThemeColorsType": true,
    "UsePortraitTableColumnsItem": true,
    "UsePortraitTableOptions": true,
    "VNode": true,
    "WelfareCodeEnum": true,
    "WritableComputedRef": true,
@@ -232,6 +239,8 @@
    "useModel": true,
    "useOmit": true,
    "useOmitProps": true,
    "usePortraitTable": true,
    "usePortraitTableWithAttachment": true,
    "useResizeHander": true,
    "useRoute": true,
    "useRouteView": true,
auto-imports.d.ts
@@ -11,7 +11,7 @@
  const AreaType: typeof import('./src/constants/enum')['AreaType']
  const CategoryCode: typeof import('./src/constants/dic')['CategoryCode']
  const CertificateTypeCodeEnum: typeof import('./src/constants/dic')['CertificateTypeCodeEnum']
  const CommonAnnexTableColumns: typeof import('@/constants')['CommonAnnexTableColumns']
  const CommonAnnexTableColumns: typeof import('./src/constants/common')['CommonAnnexTableColumns']
  const EditorType: typeof import('./src/constants/editor')['EditorType']
  const EditorTypeText: typeof import('./src/constants/editor')['EditorTypeText']
  const EducationCodeEnum: typeof import('./src/constants/dic')['EducationCodeEnum']
@@ -101,7 +101,9 @@
  const EnumUserType: typeof import('./src/constants/apiEnum')['EnumUserType']
  const EnumUserTypeText: typeof import('./src/constants/apiEnumText')['EnumUserTypeText']
  const EnumUserWalletTransactionType: typeof import('./src/constants/apiEnum')['EnumUserWalletTransactionType']
  const EnumUserWalletTransactionTypeText: typeof import('./src/constants/finance')['EnumUserWalletTransactionTypeText']
  const EnumWalletTransactionStatus: typeof import('./src/constants/apiEnum')['EnumWalletTransactionStatus']
  const EnumWalletTransactionStatusText: typeof import('./src/constants/finance')['EnumWalletTransactionStatusText']
  const FastButtonMap: typeof import('./src/constants/module')['FastButtonMap']
  const FastColumnList: typeof import('./src/constants/module')['FastColumnList']
  const FastDataButtonList: typeof import('./src/constants/module')['FastDataButtonList']
@@ -131,6 +133,8 @@
  const OssRich: typeof import('./src/constants/oss')['OssRich']
  const OssUser: typeof import('./src/constants/oss')['OssUser']
  const OssUserSign: typeof import('./src/constants/oss')['OssUserSign']
  const SettlementReceiveStatus: typeof import('./src/constants/apiEnum')['SettlementReceiveStatus']
  const SettlementReceiveStatusText: typeof import('./src/constants/task')['SettlementReceiveStatusText']
  const SubModuleKey: typeof import('./src/constants/module')['SubModuleKey']
  const SubModuleTitle: typeof import('./src/constants/module')['SubModuleTitle']
  const SubModuleType: typeof import('./src/constants/module')['SubModuleType']
@@ -224,6 +228,8 @@
  const useModel: typeof import('vue')['useModel']
  const useOmit: typeof import('./src/hooks/help')['useOmit']
  const useOmitProps: typeof import('./src/hooks/help')['useOmitProps']
  const usePortraitTable: typeof import('./src/hooks/portraitTable')['usePortraitTable']
  const usePortraitTableWithAttachment: typeof import('./src/hooks/portraitTable')['usePortraitTableWithAttachment']
  const useResizeHander: typeof import('./src/hooks/useResizeHander')['useResizeHander']
  const useRoute: typeof import('vue-router')['useRoute']
  const useRouteView: typeof import('./src/hooks/useRouteView')['useRouteView']
@@ -248,7 +254,7 @@
  export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
  import('vue')
  // @ts-ignore
  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
  export type { EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus, EnumBillingMethod, EnumClientType, EnumCodeUrlScene, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseCostStatus, EnumEnterpriseCostType, EnumEnterpriseRealMethod, EnumEnterpriseWalletAccess, EnumEnterpriseWalletExpandindirectOrderFileType, EnumEnterpriseWalletExpandindirectOrderScene, EnumEnterpriseWalletExpandindirectOrderStatus, EnumEnterpriseWalletSignStatus, EnumEnterpriseWalletTransactionType, EnumGetEnterpriseEmployeesQuerySignContractStatus, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementOrderStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, EnumUserWalletTransactionType, EnumWalletTransactionStatus, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, SettlementReceiveStatus } from './src/constants/apiEnum'
  import('./src/constants/apiEnum')
  // @ts-ignore
  export type { CategoryCode, IdentityCodeEnum, EducationCodeEnum, CertificateTypeCodeEnum, WelfareCodeEnum } from './src/constants/dic'
@@ -274,6 +280,9 @@
  // @ts-ignore
  export type { GlobalEvent, GlobalEventListener, GlobalEventContext } from './src/hooks/useEvent'
  import('./src/hooks/useEvent')
  // @ts-ignore
  export type { UsePortraitTableColumnsItem, UsePortraitTableOptions } from './src/hooks/portraitTable'
  import('./src/hooks/portraitTable')
}
// for vue template auto import
@@ -286,6 +295,7 @@
    readonly AreaType: UnwrapRef<typeof import('./src/constants/enum')['AreaType']>
    readonly CategoryCode: UnwrapRef<typeof import('./src/constants/dic')['CategoryCode']>
    readonly CertificateTypeCodeEnum: UnwrapRef<typeof import('./src/constants/dic')['CertificateTypeCodeEnum']>
    readonly CommonAnnexTableColumns: UnwrapRef<typeof import('./src/constants/common')['CommonAnnexTableColumns']>
    readonly EditorType: UnwrapRef<typeof import('./src/constants/editor')['EditorType']>
    readonly EditorTypeText: UnwrapRef<typeof import('./src/constants/editor')['EditorTypeText']>
    readonly EducationCodeEnum: UnwrapRef<typeof import('./src/constants/dic')['EducationCodeEnum']>
@@ -370,7 +380,9 @@
    readonly EnumUserType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserType']>
    readonly EnumUserTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumUserTypeText']>
    readonly EnumUserWalletTransactionType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumUserWalletTransactionType']>
    readonly EnumUserWalletTransactionTypeText: UnwrapRef<typeof import('./src/constants/finance')['EnumUserWalletTransactionTypeText']>
    readonly EnumWalletTransactionStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumWalletTransactionStatus']>
    readonly EnumWalletTransactionStatusText: UnwrapRef<typeof import('./src/constants/finance')['EnumWalletTransactionStatusText']>
    readonly FastButtonMap: UnwrapRef<typeof import('./src/constants/module')['FastButtonMap']>
    readonly FastColumnList: UnwrapRef<typeof import('./src/constants/module')['FastColumnList']>
    readonly FastDataButtonList: UnwrapRef<typeof import('./src/constants/module')['FastDataButtonList']>
@@ -397,6 +409,8 @@
    readonly OssRich: UnwrapRef<typeof import('./src/constants/oss')['OssRich']>
    readonly OssUser: UnwrapRef<typeof import('./src/constants/oss')['OssUser']>
    readonly OssUserSign: UnwrapRef<typeof import('./src/constants/oss')['OssUserSign']>
    readonly SettlementReceiveStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['SettlementReceiveStatus']>
    readonly SettlementReceiveStatusText: UnwrapRef<typeof import('./src/constants/task')['SettlementReceiveStatusText']>
    readonly SubModuleKey: UnwrapRef<typeof import('./src/constants/module')['SubModuleKey']>
    readonly SubModuleTitle: UnwrapRef<typeof import('./src/constants/module')['SubModuleTitle']>
    readonly SubModuleType: UnwrapRef<typeof import('./src/constants/module')['SubModuleType']>
@@ -489,6 +503,8 @@
    readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
    readonly useOmit: UnwrapRef<typeof import('./src/hooks/help')['useOmit']>
    readonly useOmitProps: UnwrapRef<typeof import('./src/hooks/help')['useOmitProps']>
    readonly usePortraitTable: UnwrapRef<typeof import('./src/hooks/portraitTable')['usePortraitTable']>
    readonly usePortraitTableWithAttachment: UnwrapRef<typeof import('./src/hooks/portraitTable')['usePortraitTableWithAttachment']>
    readonly useResizeHander: UnwrapRef<typeof import('./src/hooks/useResizeHander')['useResizeHander']>
    readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
    readonly useRouteView: UnwrapRef<typeof import('./src/hooks/useRouteView')['useRouteView']>
src/components/Table/PortraitTableWithAttachment.vue
New file
@@ -0,0 +1,72 @@
<template>
  <PortraitTable v-bind="portraitTableProps" :label-width="labelWidth"> </PortraitTable>
  <div class="enclosure-list-title">附件列表</div>
  <ProTableV2
    :table-data="annexList"
    :columns="CommonAnnexTableColumns"
    :operation-btns="operationListBtns"
    :show-pagination="false"
    :show-no-data="false"
    :auto-height="false"
    :show-table-column-setting="false"
    :table-props="{ maxHeight: '400px' }"
    :column-render-map="columnsRenderProps"
  >
  </ProTableV2>
</template>
<script setup lang="ts" generic="TAnnexItem">
import { downloadFileByUrl } from '@bole-core/core';
import { CommonAnnexTableColumns } from '@/constants';
import { ProTableV2, ProTableV2Props } from '@bole-core/components';
defineOptions({
  name: 'PortraitTableWithAttachment',
});
type Props = {
  annexList: TAnnexItem[];
  customDownLoad?: (row: TAnnexItem) => Promise<any>;
  labelWidth?: string;
  portraitTableProps: any;
  columnsRenderProps?: ProTableV2Props['columnRenderMap'];
  downloadFileKey?: keyof TAnnexItem;
};
const props = withDefaults(defineProps<Props>(), {
  labelWidth: '180px',
  columnsRenderProps: () => ({}),
  downloadFileKey: 'url' as any,
});
const operationListBtns = [
  {
    data: {
      enCode: 'downloadBtn',
      name: '下载',
    },
    emits: {
      onClick: (row) => handleDownload(row),
    },
  },
];
function handleDownload(row: TAnnexItem) {
  if (props.customDownLoad) {
    props.customDownLoad(row);
  } else {
    downloadFileByUrl(row[props.downloadFileKey] as any);
  }
}
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
.enclosure-list-title {
  padding: 16px 0;
  font-size: 14px;
  color: getCssVar('text-color', 'primary');
  line-height: 19px;
}
</style>
src/constants/apiEnum.ts
@@ -417,6 +417,10 @@
  InProcess = 20,
  /**已结算 */
  Completed = 30,
  /**部分结算 */
  Part = 40,
  /**结算失败 */
  Fail = 50,
}
/** 任务安排状态 */
@@ -566,3 +570,11 @@
  /**已完成 */
  Completed = 20,
}
/** 结算到账状态 */
export enum SettlementReceiveStatus {
  /**已到账 */
  Completed = 10,
  /**已退款 */
  Refunded = 20,
}
src/constants/common.ts
New file
@@ -0,0 +1,9 @@
import { defineColumns } from '@bole-core/components';
export const CommonAnnexTableColumns = defineColumns([
  {
    id: '1',
    enCode: 'name',
    name: '文件名',
  },
]);
src/constants/finance.ts
New file
@@ -0,0 +1,13 @@
export const EnumUserWalletTransactionTypeText = {
  [EnumUserWalletTransactionType.Income]: '收入',
  [EnumUserWalletTransactionType.Withdraw]: '提现',
};
export const EnumWalletTransactionStatusText = {
  [EnumWalletTransactionStatus.WaitSubmit]: '待提交',
  [EnumWalletTransactionStatus.WaitPay]: '待支付',
  [EnumWalletTransactionStatus.Dealing]: '处理中',
  [EnumWalletTransactionStatus.Success]: '成功',
  [EnumWalletTransactionStatus.Refund]: '退票',
  [EnumWalletTransactionStatus.Fail]: '失败',
};
src/constants/index.ts
@@ -14,3 +14,5 @@
export * from './enterpriseEmployee';
export * from './electronSign';
export * from './enterpriseWallet';
export * from './finance';
export * from './common';
src/constants/task.ts
@@ -132,11 +132,17 @@
  [EnumTaskSettlementOrderStatus.Wait]: '待上传',
  [EnumTaskSettlementOrderStatus.Completed]: '已上传',
};
export const SettlementReceiveStatusText = {
  [SettlementReceiveStatus.Completed]: '已到账',
  [SettlementReceiveStatus.Refunded]: '已退款',
};
export const EnumTaskSettlementStatusText = {
  [EnumTaskSettlementStatus.Wait]: '待结算',
  [EnumTaskSettlementStatus.InProcess]: '结算中',
  [EnumTaskSettlementStatus.Completed]: '已结算',
  [EnumTaskSettlementStatus.Part]: '部分结算',
  [EnumTaskSettlementStatus.Fail]: '结算失败',
};
export const EnumPersonalFreeTimeText = {
src/hooks/index.ts
@@ -10,3 +10,4 @@
export * from './dic';
export * from './sign';
export * from './settlement';
export * from './portraitTable';
src/hooks/portraitTable.ts
New file
@@ -0,0 +1,50 @@
import { ColumnsRenderProps } from '@bole-core/components';
import { MaybeRef } from 'vue';
export type UsePortraitTableColumnsItem<TData extends object = object> = ColumnsRenderProps & {
  label?: string;
  key?: keyof TData;
};
export type UsePortraitTableOptions<TData extends object> = {
  data: Ref<TData>;
  columns?: UsePortraitTableColumnsItem<TData>[];
};
export function usePortraitTable<TData extends object>(options: UsePortraitTableOptions<TData>) {
  const portraitTableProps = computed(
    () =>
      ({
        data: options.data.value,
        columns: options.columns ?? [],
      } as any)
  );
  return {
    portraitTableProps,
  };
}
type UsePortraitTableWithAttachmentOptions<
  TData extends object,
  TAnnexItem extends object = object
> = UsePortraitTableOptions<TData> & {
  annexList: Ref<TAnnexItem[]>;
  columnsRenderProps?: { [key in keyof TAnnexItem]?: ColumnsRenderProps };
};
export function usePortraitTableWithAttachment<
  TData extends object,
  TAnnexItem extends object = object
>(options: UsePortraitTableWithAttachmentOptions<TData, TAnnexItem>) {
  const { annexList, columnsRenderProps } = options;
  const { portraitTableProps } = usePortraitTable(options);
  const portraitTableWithAttachmentProps = computed(() => ({
    annexList: annexList.value,
    portraitTableProps: portraitTableProps.value,
    columnsRenderProps,
  }));
  return { portraitTableWithAttachmentProps };
}
src/router/index.ts
@@ -256,19 +256,19 @@
          icon: 'home',
        },
      },
      // {
      //   path: '/BalanceManage',
      //   name: 'BalanceManage',
      //   hidden: false,
      //   alwaysShow: true,
      //   component: () => import('@/views/ServiceChargeManage/BalanceManage.vue'),
      //   meta: {
      //     rank: 10042,
      //     title: '余额管理',
      //     // rootMenu: true,
      //     icon: 'home',
      //   },
      // },
      {
        path: '/BalanceManage',
        name: 'BalanceManage',
        hidden: false,
        alwaysShow: true,
        component: () => import('@/views/ServiceChargeManage/BalanceManage.vue'),
        meta: {
          rank: 10042,
          title: '余额管理',
          // rootMenu: true,
          icon: 'home',
        },
      },
      {
        path: '/ServiceChargeDetail/:id',
        name: 'ServiceChargeDetail',
@@ -312,6 +312,34 @@
      },
    ],
  },
  // {
  //   path: '/WithdrawManage',
  //   redirect: 'noRedirect',
  //   component: Layout,
  //   hidden: false,
  //   alwaysShow: true,
  //   meta: {
  //     rank: 10060,
  //     title: '提现管理',
  //     rootMenu: true,
  //     icon: 'home',
  //   },
  //   children: [
  //     {
  //       path: '/WithdrawManageList',
  //       name: 'WithdrawManageList',
  //       hidden: false,
  //       alwaysShow: true,
  //       component: () => import('@/views/WithdrawManage/WithdrawManageList.vue'),
  //       meta: {
  //         rank: 10061,
  //         title: '提现管理',
  //         // rootMenu: true,
  //         icon: 'home',
  //       },
  //     },
  //   ],
  // },
  {
    path: '/FinanceManage',
    redirect: 'noRedirect',
@@ -319,7 +347,7 @@
    hidden: false,
    alwaysShow: true,
    meta: {
      rank: 10060,
      rank: 10070,
      title: '财务管理',
      rootMenu: true,
      icon: 'home',
@@ -332,7 +360,7 @@
        alwaysShow: true,
        component: () => import('@/views/FinanceManage/FinanceManage.vue'),
        meta: {
          rank: 10061,
          rank: 10071,
          title: '财务管理',
          // rootMenu: true,
          icon: 'home',
src/services/api/typings.d.ts
@@ -900,6 +900,10 @@
    InProcess = 20,
    /**已结算 */
    Completed = 30,
    /**部分结算 */
    Part = 40,
    /**结算失败 */
    Fail = 50,
  }
  enum EnumTaskStatus {
@@ -3286,6 +3290,7 @@
    enterpriseSignContractTime?: string;
    /** 电子合同 */
    contractUrl?: string;
    createdTime?: string;
  }
  type GetEnterpriseLoginInfoQuery = Record<string, any>;
@@ -4123,6 +4128,8 @@
    /** 创建时间-截止 */
    createdTimeEnd?: string;
    type?: EnumUserWalletTransactionType;
    /** 用户Id */
    userId?: string;
    pageModel?: PagedListQueryPageModel;
  }
@@ -4145,6 +4152,13 @@
    balance?: number;
    /** 企业名称 */
    enterpriseName?: string;
    /** 任务名称 */
    taskName?: string;
    /** 结算单名称 */
    settlementOrderName?: string;
    settlementStatus?: EnumTaskSettlementStatus;
    /** 结算时间 */
    settlementTime?: string;
    /** 付款人账户 */
    payerAccount?: string;
    /** 付款人名称 */
@@ -4185,6 +4199,12 @@
  }
  interface GetPersonalUserWalletBalancesQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetPersonalUserWalletBalancesQueryResultItem[];
  }
  interface GetPersonalUserWalletBalancesQueryResultItem {
    /** 用户Id */
    id?: string;
    /** 姓名 */
@@ -4195,12 +4215,7 @@
    identity?: string;
    /** 余额 */
    balance?: number;
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetPersonalUserWalletBalancesQueryResultItem[];
  }
  type GetPersonalUserWalletBalancesQueryResultItem = Record<string, any>;
  interface GetResourceFieldsQueryResultItem {
    /** 编号 */
@@ -4467,7 +4482,6 @@
    identity?: string;
    /** 手机号 */
    contactPhoneNumber?: string;
    settlementStatus?: EnumTaskSettlementStatus;
    /** 所属银行 */
    bank?: string;
    /** 开户支行名称 */
@@ -4478,6 +4492,8 @@
    settlementAmount?: number;
    /** 实发金额 */
    actualSettlementAmount?: number;
    settlementReceiveStatus?: SettlementReceiveStatus;
    settlementStatus?: EnumTaskSettlementStatus;
    /** 结算时间 */
    settlementTime?: string;
  }
@@ -5108,18 +5124,18 @@
    name?: string;
    /** 身份证号 */
    identity?: string;
    /** 结算金额 */
    settlementAmount?: number;
    /** 实发金额 */
    actualSettlementAmount?: number;
    /** 收款账户 */
    receiveAccount?: string;
    /** 手机号 */
    contactPhoneNumber?: string;
    /** 所属银行 */
    bank?: string;
    /** 开户支行名称 */
    bankBranch?: string;
    /** 任务名称 */
    taskName?: string;
    /** 收款账户 */
    receiveAccount?: string;
    /** 结算金额 */
    settlementAmount?: number;
    /** 实发金额 */
    actualSettlementAmount?: number;
  }
  interface InviteElectronSignCommand {
@@ -5816,6 +5832,13 @@
    hireStatus?: EnumTaskUserHireStatus;
  }
  enum SettlementReceiveStatus {
    /**已到账 */
    Completed = 10,
    /**已退款 */
    Refunded = 20,
  }
  interface SetUserInfoRolesCommand {
    /** 用户Id */
    userInfoId?: string;
src/views/EmploymentManage/components/CheckManageDialog.vue
@@ -155,7 +155,7 @@
  },
  {
    defaultExtraParams: {
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      orderInput: [{ property: 'date', order: EnumPagedListOrder.Desc }],
    },
    queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmits'],
    columnsRenderProps: {
@@ -167,7 +167,7 @@
        type: 'url',
        //@ts-ignore
        formatter: (row: API.GetCheckReceiveTaskUserSubmitsQueryResultItem) =>
          (row.files ?? []).map((x) => setOSSLink(x)),
          row.files?.length > 0 && (row.files ?? []).map((x) => setOSSLink(x)),
        showDownloadBtn: false,
      },
    },
src/views/FinanceManage/FinanceManage.vue
@@ -4,9 +4,9 @@
      <ProTabPane lazy label="发放明细" :name="FinanceTabType.DistributionDetail">
        <DistributionDetailView />
      </ProTabPane>
      <ProTabPane lazy label="用量明细" :name="FinanceTabType.UsageDetail">
      <!-- <ProTabPane lazy label="用量明细" :name="FinanceTabType.UsageDetail">
        <UsageDetailView />
      </ProTabPane>
      </ProTabPane> -->
    </ProTabs>
  </AppContainer>
</template>
src/views/FinanceManage/components/DistributionDetailView.vue
@@ -4,7 +4,7 @@
      <ProTableV2
        v-bind="proTableProps"
        :columns="DistributionDetailColumns"
        :operationBtns="operationBtns"
        :showOperationColumn="false"
      >
      </ProTableV2>
    </AppContainer>
@@ -20,7 +20,8 @@
  defineOperationBtns,
} from '@bole-core/components';
import { DistributionDetailColumns } from '../constants';
import * as taskServices from '@/services/api/task';
import * as userServices from '@/services/api/user';
import { EnumTaskSettlementStatusText } from '@/constants';
defineOptions({
  name: 'DistributionDetailView',
@@ -34,11 +35,6 @@
const state = reactive({ ...BaseState });
onMounted(async () => {
  await getList();
  state.loading = false;
});
const {
  getDataSource: getList,
  proTableProps,
@@ -48,28 +44,32 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetOpenTaskInfosQuery = {
      let params: API.GetPersonalUserTransactionsQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        type: EnumUserWalletTransactionType.Income,
      };
      let res = await taskServices.getOpenTaskInfos(params, {
        showLoading: !state.loading,
      });
      let res = await userServices.getPersonalUserTransactions(params);
      return res;
    } catch (error) {
      console.log('error: ', error);
    }
    } catch (error) {}
  },
  {
    defaultExtraParams: {
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
    },
    queryKey: ['taskServices/getOpenTaskInfos'],
    columnsRenderProps: {},
    columnsRenderProps: {
      amount: { type: 'money' },
      settlementStatus: { type: 'enum', valueEnum: EnumTaskSettlementStatusText },
      settlementTime: { type: 'date' },
    },
  }
);
onMounted(async () => {
  await getList();
  state.loading = false;
});
</script>
src/views/FinanceManage/components/UsageDetailView.vue
@@ -10,7 +10,7 @@
<script setup lang="ts">
import { ProTableV2, LoadingLayout, AppContainer, useTable } from '@bole-core/components';
import { UsageDetailColumns } from '../constants';
import * as taskServices from '@/services/api/task';
import * as userServices from '@/services/api/user';
defineOptions({
  name: 'UsageDetailView',
@@ -21,12 +21,6 @@
};
const state = reactive({ ...BaseState });
onMounted(async () => {
  await getList();
  state.loading = false;
});
const {
  getDataSource: getList,
  proTableProps,
@@ -36,28 +30,28 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetOpenTaskInfosQuery = {
      let params: API.GetPersonalUserTransactionsQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        type: EnumUserWalletTransactionType.Income,
      };
      let res = await taskServices.getOpenTaskInfos(params, {
        showLoading: !state.loading,
      });
      let res = await userServices.getPersonalUserTransactions(params);
      return res;
    } catch (error) {
      console.log('error: ', error);
    }
    } catch (error) {}
  },
  {
    defaultExtraParams: {
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
    },
    queryKey: ['taskServices/getOpenTaskInfos'],
    columnsRenderProps: {},
  }
);
onMounted(async () => {
  await getList();
  state.loading = false;
});
</script>
src/views/FinanceManage/constants/columns.ts
@@ -3,42 +3,42 @@
export const DistributionDetailColumns = defineColumns([
  {
    id: '1',
    enCode: 'name',
    enCode: 'enterpriseName',
    name: '所属客户',
  },
  {
    id: '2',
    enCode: 'name',
    enCode: 'taskName',
    name: '所属任务',
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'settlementOrderName',
    name: '结算单名称',
  },
  {
    id: '4',
    enCode: 'name',
    enCode: 'payerName',
    name: '姓名',
  },
  {
    id: '5',
    enCode: 'name',
    enCode: 'payerContactPhoneNumber',
    name: '手机号',
  },
  {
    id: '6',
    enCode: 'name',
    enCode: 'amount',
    name: '结算金额',
  },
  {
    id: '7',
    enCode: 'signNum',
    enCode: 'settlementStatus',
    name: '结算状态',
  },
  {
    id: '8',
    enCode: 'name',
    enCode: 'settlementTime',
    name: '结算日期',
  },
]);
@@ -46,7 +46,7 @@
export const UsageDetailColumns = defineColumns([
  {
    id: '1',
    enCode: 'name',
    enCode: 'transDate',
    name: '使用时间',
  },
  {
src/views/ServiceChargeManage/BalanceManage.vue
@@ -5,14 +5,14 @@
        <template #query>
          <QueryFilterItem tip-content="余额范围">
            <el-input-number
              v-model="extraParamState.minAmount"
              v-model="extraParamState.balanceMin"
              placeholder="余额最小金额"
              size="small"
              style="width: 150px"
              :controls="false"
            />~
            <el-input-number
              v-model="extraParamState.maxAmount"
              v-model="extraParamState.balanceMax"
              placeholder="余额最大金额"
              size="small"
              style="width: 150px"
@@ -21,7 +21,7 @@
          </QueryFilterItem>
          <QueryFilterItem>
            <SearchInput
              v-model="extraParamState.keyword"
              v-model="extraParamState.keywords"
              style="width: 260px"
              placeholder="姓名/手机号/身份证号"
              @on-click-search="getList"
@@ -53,12 +53,12 @@
  useFormDialog,
  defineOperationBtns,
} from '@bole-core/components';
import * as enterpriseServices from '@/services/api/enterprise';
import * as userServices from '@/services/api/user';
import BalanceDetailDialog from './components/BalanceDetailDialog.vue';
import { BalanceManageColumns } from './constants';
defineOptions({
  name: 'BalanceManage',
  name: 'WithdrawManageList',
});
const operationBtns = defineOperationBtns([
@@ -69,9 +69,6 @@
    },
    emits: {
      onClick: (role) => openDialog(role),
    },
    extraProps: {
      hide: () => false,
    },
  },
]);
@@ -97,15 +94,18 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetEnterprisesQuery = {
      let params: API.GetPersonalUserWalletBalancesQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        // searchKeys: extraParamState.keyword,
        keywords: extraParamState.keywords,
        balanceMin: extraParamState.balanceMin,
        balanceMax: extraParamState.balanceMax,
      };
      let res = await enterpriseServices.getEnterprises(params, {
      let res = await userServices.getPersonalUserWalletBalances(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -113,13 +113,14 @@
  },
  {
    defaultExtraParams: {
      keyword: '',
      status: '',
      minAmount: null as number,
      maxAmount: null as number,
      keywords: '',
      balanceMin: null as number,
      balanceMax: null as number,
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
    },
    columnsRenderProps: {},
    columnsRenderProps: {
      balance: { type: 'money' },
    },
  }
);
src/views/ServiceChargeManage/ServiceChargeDetail.vue
@@ -134,6 +134,7 @@
import EditAccountInfoDialog from './components/EditAccountInfoDialog.vue';
import SettleDetailDialog from './components/SettleDetailDialog.vue';
import { Message } from '@bole-core/core';
import { SettlementReceiveStatusText } from '@/constants';
import {
  downloadFile,
  downloadFileByUrl,
@@ -274,6 +275,7 @@
      settlementTime: { type: 'date' },
      settlementAmount: { type: 'money' },
      actualSettlementAmount: { type: 'money' },
      settlementReceiveStatus: { type: 'enum', valueEnum: SettlementReceiveStatusText },
    },
  }
);
src/views/ServiceChargeManage/ServiceChargeManage.vue
@@ -45,7 +45,7 @@
          </QueryFilterItem>
        </template>
        <template #btn>
          <el-button type="primary" link @click="handleDownloadTemplate()">结算单模板</el-button>
          <!-- <el-button type="primary" link @click="handleDownloadTemplate()">结算单模板</el-button> -->
          <!-- <el-button type="primary" @click="handleAdd()">上传结算单</el-button> -->
          <!-- <el-button type="primary" @click="handleDownloadTemplate()">导出</el-button> -->
        </template>
src/views/ServiceChargeManage/components/BalanceDetailDialog.vue
@@ -5,8 +5,8 @@
        <template #query>
          <QueryFilterItem>
            <FieldSelect
              v-model="extraParamState.status"
              :valueEnum="[]"
              v-model="extraParamState.type"
              :valueEnum="EnumUserWalletTransactionTypeText"
              clearable
              filterable
              placeholder="交易类型"
@@ -25,9 +25,25 @@
          </QueryFilterItem>
        </template>
      </ProTableQueryFilterBar>
      <ProTableV2 v-bind="proTableProps" :columns="columns" :showOperationColumn="false">
      <ProTableV2 v-bind="proTableProps" :columns="columns" :operationBtns="operationBtns">
        <template #income="{ row }">
          <div style="color: #67c23a" v-if="row.type === EnumUserWalletTransactionType.Income">
            {{ `+${toThousand(row.amount)}` }}
          </div>
          <div v-else>/</div>
        </template>
        <template #outcome="{ row }">
          <div style="color: #f56c6c" v-if="row.type === EnumUserWalletTransactionType.Withdraw">
            {{ toThousand(row.amount) }}
          </div>
          <div v-else>/</div>
        </template>
        <template #account="{ row }">
          {{ `${row.receiveAccount} - ${row.receiveName}` }}
        </template>
      </ProTableV2>
    </ProDialogTableWrapper>
    <FinanceDetailDialog v-bind="dialogProps"></FinanceDetailDialog>
  </ProDialog>
</template>
@@ -42,9 +58,14 @@
  FieldSelect,
  ProTableV2,
  ProTableQueryFilterBar,
  defineOperationBtns,
  useFormDialog,
} from '@bole-core/components';
import * as enterpriseServices from '@/services/api/enterprise';
import * as userServices from '@/services/api/user';
import { ModelValueType } from 'element-plus';
import { format, toThousand } from '@/utils';
import { EnumUserWalletTransactionType, EnumUserWalletTransactionTypeText } from '@/constants';
import FinanceDetailDialog from './FinanceDetailDialog.vue';
defineOptions({
  name: 'FinanceDetailDialog',
@@ -65,33 +86,48 @@
const columns = defineColumns([
  {
    id: '1',
    enCode: 'name',
    enCode: 'transDate',
    name: '交易时间',
  },
  {
    id: '2',
    enCode: 'name',
    enCode: 'income',
    name: '收入',
    width: 100,
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'outcome',
    name: '支出',
    width: 100,
  },
  {
    id: '4',
    enCode: 'name',
    enCode: 'balance',
    name: '账户余额',
    width: 100,
  },
  {
    id: '4',
    enCode: 'name',
    id: '5',
    enCode: 'account',
    name: '对方帐号/户名',
  },
  {
    id: '4',
    enCode: 'name',
    id: '6',
    enCode: 'purpose',
    name: '用途',
  },
]);
const operationBtns = defineOperationBtns([
  {
    data: {
      enCode: 'detailBtn',
      name: '明细',
    },
    emits: {
      onClick: (role) => openDialog(role),
    },
  },
]);
@@ -113,27 +149,45 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetEnterprisesQuery = {
      let params: API.GetPersonalUserTransactionsQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        // searchKeys: extraParamState.keyword,
        createdTimeStart: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        createdTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
        type: extraParamState.type,
        userId: form.value.id,
      };
      let res = await enterpriseServices.getEnterprises(params);
      let res = await userServices.getPersonalUserTransactions(params);
      return res;
    } catch (error) {}
  },
  {
    defaultExtraParams: {
      status: '',
      type: '' as any as EnumUserWalletTransactionType,
      creationTime: [] as unknown as ModelValueType,
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
    },
    columnsRenderProps: {},
    columnsRenderProps: {
      transDate: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
      balance: { type: 'money' },
    },
  }
);
const { dialogProps, handleEdit, editForm } = useFormDialog({
  defaultFormParams: {
    id: '',
  },
});
function openDialog(row: API.GetPersonalUserTransactionsQueryResultItem) {
  handleEdit({
    id: row.id,
  });
}
</script>
<style lang="scss" scoped>
src/views/ServiceChargeManage/components/FinanceDetailDialog.vue
New file
@@ -0,0 +1,106 @@
<template>
  <ProDialog title="明细" v-model="visible" destroy-on-close draggable>
    <PortraitTable v-bind="portraitTableProps" label-width="140px" :col-number="2"></PortraitTable>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="emit('onCancel')" type="primary">确定</el-button>
      </span>
    </template>
  </ProDialog>
</template>
<script setup lang="ts">
import { ProDialog, toThousand } from '@bole-core/components';
import { usePortraitTable } from '@/hooks';
import * as userServices from '@/services/api/user';
import { useQuery } from '@tanstack/vue-query';
import { EnumWalletTransactionStatusText } from '@/constants';
defineOptions({
  name: 'FinanceDetailDialog',
});
type Form = {
  id?: string;
};
const visible = defineModel({ type: Boolean });
const form = defineModel<Form>('form');
const emit = defineEmits<{
  (e: 'update:modelValue', value: boolean): void;
  (e: 'onCancel'): void;
}>();
const { data: detail } = useQuery({
  queryKey: ['userResumeServices/getUserResume', form.value.id],
  queryFn: async () => {
    return await userServices.getPersonalUserTransaction({ id: form.value.id });
  },
  placeholderData: () => ({} as API.GetPersonalUserTransactionQueryResult),
  enabled: computed(() => !!form.value.id),
});
const { portraitTableProps } = usePortraitTable({
  data: detail,
  columns: [
    {
      label: '付款人账户',
      key: 'payerAccount',
    },
    {
      label: '收款人账户',
      key: 'receiveAccount',
    },
    {
      label: '付款人名称',
      key: 'payerName',
    },
    {
      label: '收款人名称',
      key: 'receiveName',
    },
    {
      label: '付款人开户行',
      key: 'payerBank',
    },
    {
      label: '收款人开户行',
      key: 'receiveBank',
    },
    {
      label: '币种',
      key: 'currency',
    },
    {
      label: '交易金额',
      key: 'actualAmount',
      type: 'money',
    },
    {
      label: '用途',
      key: 'purpose',
    },
    {
      label: '摘要',
      key: 'failReason',
    },
    {
      label: '交易时间',
      key: 'transDate',
      type: 'date',
      format: 'YYYY-MM-DD HH:mm:ss',
    },
    {
      label: '交易状态',
      key: 'transactionStatus',
      type: 'enum',
      valueEnum: EnumWalletTransactionStatusText,
    },
  ],
});
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>
src/views/ServiceChargeManage/constants/columns.ts
@@ -106,6 +106,11 @@
  },
  {
    id: '9',
    enCode: 'settlementReceiveStatus',
    name: '到账状态',
  },
  {
    id: '10',
    enCode: 'settlementTime',
    name: '结算时间',
  },
@@ -119,17 +124,17 @@
  },
  {
    id: '2',
    enCode: 'name',
    enCode: 'contactPhoneNumber',
    name: '手机号',
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'identity',
    name: '身份证号',
  },
  {
    id: '4',
    enCode: 'name',
    enCode: 'balance',
    name: '账户余额',
  },
]);
src/views/WithdrawManage/WithdrawManageList.vue
New file
@@ -0,0 +1,148 @@
<template>
  <LoadingLayout :loading="state.loading">
    <AppContainer>
      <ProTableQueryFilterBar @on-reset="reset">
        <template #query>
          <QueryFilterItem>
            <FieldDatePicker
              v-model="extraParamState.time"
              type="daterange"
              range-separator="~"
              start-placeholder="起始日期"
              end-placeholder="截止日期"
              clearable
              @change="getList()"
              tooltipContent="申请时间"
            ></FieldDatePicker>
          </QueryFilterItem>
          <QueryFilterItem tip-content="提现状态">
            <FieldRadio
              v-model="extraParamState.status"
              :value-enum="[]"
              buttonStyle
              showAllBtn
              @change="getList()"
            />
          </QueryFilterItem>
          <QueryFilterItem>
            <SearchInput
              v-model="extraParamState.keywords"
              style="width: 260px"
              placeholder="姓名/电话/身份证号"
              @on-click-search="getList"
            >
            </SearchInput>
          </QueryFilterItem>
        </template>
      </ProTableQueryFilterBar>
      <ProTableV2
        v-bind="proTableProps"
        :columns="WithdrawManageColumns"
        :operationBtns="operationBtns"
      >
      </ProTableV2>
    </AppContainer>
    <WithdrawalDetailDialog v-bind="dialogProps" />
  </LoadingLayout>
</template>
<script setup lang="ts">
import {
  ProTableQueryFilterBar,
  ProTableV2,
  SearchInput,
  LoadingLayout,
  AppContainer,
  QueryFilterItem,
  useTable,
  useFormDialog,
  defineOperationBtns,
  FieldDatePicker,
  FieldRadio,
} from '@bole-core/components';
import * as userServices from '@/services/api/user';
import WithdrawalDetailDialog from './components/WithdrawalDetailDialog.vue';
import { WithdrawManageColumns } from './constants';
import { ModelValueType } from 'element-plus';
defineOptions({
  name: 'WithdrawManageList',
});
const operationBtns = defineOperationBtns([
  {
    data: {
      enCode: 'detailBtn',
      name: '详情',
    },
    emits: {
      onClick: (role) => openDialog(role),
    },
  },
]);
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.GetPersonalUserWalletBalancesQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        keywords: extraParamState.keywords,
      };
      let res = await userServices.getPersonalUserWalletBalances(params, {
        showLoading: !state.loading,
      });
      return res;
    } catch (error) {}
  },
  {
    defaultExtraParams: {
      keywords: '',
      status: '',
      time: [] as unknown as ModelValueType,
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
    },
    columnsRenderProps: {
      balance: { type: 'money' },
    },
  }
);
const { dialogProps, handleEdit, editForm } = useFormDialog({
  defaultFormParams: {
    id: '',
    status: '',
    time: '',
  },
});
function openDialog(row) {
  handleEdit({
    id: row.id,
    status: '',
    time: '',
  });
}
</script>
src/views/WithdrawManage/components/WithdrawalDetailDialog.vue
New file
@@ -0,0 +1,145 @@
<template>
  <ProDialog title="详情" v-model="visible" @close="onDialogClose" destroy-on-close draggable>
    <!-- <PortraitTableWithAttachment v-bind="portraitTableWithAttachmentProps" /> -->
    <ProForm :model="form" ref="dialogForm" label-width="90px" style="margin-top: 20px" is-read>
      <ProFormCol>
        <ProFormColItem :span="12">
          <ProFormItemV2 label="提现状态:" prop="status">
            <ProFormRadio v-model="form.status" :value-enum="[]" />
          </ProFormItemV2>
        </ProFormColItem>
      </ProFormCol>
      <ProFormCol>
        <ProFormColItem :span="12">
          <ProFormItemV2 label="提现日期:" prop="time">
            <ProFormDatePicker v-model="form.time" type="date" format="YYYY-MM-DD HH:mm" />
          </ProFormItemV2>
        </ProFormColItem>
      </ProFormCol>
    </ProForm>
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="emit('onCancel')">取 消</el-button>
        <el-button type="primary" @click="emit('onCancel')">确 定</el-button>
      </span>
    </template>
  </ProDialog>
</template>
<script setup lang="ts">
import { FormInstance } from 'element-plus';
import {
  ProDialog,
  ProForm,
  ProFormItemV2,
  ProFormCol,
  ProFormColItem,
  ProFormRadio,
  ProFormDatePicker,
} from '@bole-core/components';
import { usePortraitTableWithAttachment } from '@/hooks';
import { convertApi2FormUrl } from '@/utils';
import { useQuery } from '@tanstack/vue-query';
defineOptions({
  name: 'WithdrawalDetailDialog',
});
const visible = defineModel({ type: Boolean });
type Form = {
  title?: string;
  id: string;
  status: string;
  time: string;
};
const form = defineModel<Form>('form');
const emit = defineEmits<{
  (e: 'onConfirm'): void;
  (e: 'onCancel'): void;
}>();
watch(
  () => visible.value,
  (val) => {
    if (val) {
      // refetch();
    }
  }
);
// const {
//   data: detail,
//   refetch,
//   isLoading,
// } = useQuery({
//   queryKey: ['parkBountyApplyServices/getEnterpriseDrawWithDetail', form.value?.id],
//   queryFn: async () => {
//     return await parkBountyApplyServices.getEnterpriseDrawWithDetail(
//       {
//         drawWithId: form.value?.id,
//       },
//       {
//         showLoading: true,
//       }
//     );
//   },
//   placeholderData: () => ({}),
//   enabled: !!form.value?.id,
//   onSuccess(data) {},
// });
// const { portraitTableWithAttachmentProps } = usePortraitTableWithAttachment({
//   data: detail,
//   annexList: computed(() =>
//     detail.value?.invoiceUrl
//       ? detail.value?.invoiceUrl.split('|').map((item) => convertApi2FormUrl(item))
//       : []
//   ),
//   columns: [
//     {
//       label: '姓名',
//       key: 'enterpriseName',
//     },
//     {
//       label: '身份证号',
//       key: 'societyCreditCode',
//     },
//     {
//       label: '账户名称',
//       key: 'accountName',
//     },
//     {
//       label: '银行帐号',
//       key: 'bankNumber',
//     },
//     {
//       label: '开户银行',
//       key: 'bankName',
//     },
//     {
//       label: '开户支行',
//       key: 'bankResumeName',
//     },
//     {
//       label: '提现金额',
//       key: 'amount',
//       type: 'money',
//     },
//     {
//       label: '申请日期',
//       key: 'creationTime',
//       type: 'date',
//     },
//   ],
// });
const dialogForm = ref<FormInstance>();
function onDialogClose() {
  if (!dialogForm.value) return;
  dialogForm.value.resetFields();
}
</script>
src/views/WithdrawManage/constants/columns.ts
New file
@@ -0,0 +1,39 @@
import { defineColumns } from '@bole-core/components';
export const WithdrawManageColumns = defineColumns([
  {
    id: '1',
    enCode: 'name',
    name: '姓名',
  },
  {
    id: '2',
    enCode: 'code',
    name: '身份证号',
  },
  {
    id: '3',
    enCode: 'checkReceiveStatus',
    name: '电话',
  },
  {
    id: '4',
    enCode: 'settlementOrderStatus',
    name: '申请时间',
  },
  {
    id: '5',
    enCode: 'settlementOrderName',
    name: '申请提现金额(元)',
  },
  {
    id: '6',
    enCode: 'settlementOrderTime',
    name: '提现状态',
  },
  {
    id: '7',
    enCode: 'actualSettlementAmount',
    name: '提现时间',
  },
]);
src/views/WithdrawManage/constants/index.ts
New file
@@ -0,0 +1 @@
export * from './columns';