From 2174f758e8a963964198e092f0d528ef1ae9b81e Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期二, 22 七月 2025 09:59:05 +0800
Subject: [PATCH] feat: 页面

---
 src/views/Reward/FinancialApproval.vue |  257 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 257 insertions(+), 0 deletions(-)

diff --git a/src/views/Reward/FinancialApproval.vue b/src/views/Reward/FinancialApproval.vue
new file mode 100644
index 0000000..465ca53
--- /dev/null
+++ b/src/views/Reward/FinancialApproval.vue
@@ -0,0 +1,257 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem>
+            <FieldSelect
+              v-model="extraParamState.enterpriseId"
+              placeholder="璇烽�夋嫨鍥尯"
+              :value-enum="fourStreamsIndustrialParkList"
+              enumLabelKey="parkName"
+              enum-value-key="id"
+              clearable
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="瀹℃牳鐘舵��">
+            <FieldRadio
+              v-model="extraParamState.auditStatus"
+              :value-enum="EnumParkBountyTradeDetailAuditStatusText"
+              buttonStyle
+              showAllBtn
+              @change="getList()"
+            ></FieldRadio>
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鐢宠鍑鸿处鏃ユ湡">
+            <FieldDatePicker
+              v-model="extraParamState.creationTime"
+              type="daterange"
+              range-separator="~"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡"
+              clearable
+              @change="getList()"
+            ></FieldDatePicker>
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.searchKeyWord"
+              style="width: 200px"
+              placeholder="浼佷笟鍚嶇О/淇$敤浠g爜"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2
+        v-bind="proTableProps"
+        :columns="FinancialApprovalColumns"
+        :operationBtns="operationBtns"
+      >
+      </ProTableV2>
+      <RewardApplyTradeCheckDialog v-bind="dialogProps"></RewardApplyTradeCheckDialog>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  FieldSelect,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  FieldDatePicker,
+  useFormDialog,
+  UploadUserFile,
+  defineOperationBtns,
+  FieldRadio,
+} from '@bole-core/components';
+import { Message, OrderInputType } from '@bole-core/core';
+import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
+import {
+  EnterpriseType,
+  EnterpriseTypeText,
+  EnumParkBountyTradeDetailAuditStatus,
+  EnumParkBountyTradeDetailAuditStatusTag,
+  EnumParkBountyTradeDetailAuditStatusText,
+} from '@/constants';
+import { ModelValueType } from 'element-plus';
+import RewardApplyTradeCheckDialog from './components/RewardApplyTradeCheckDialog.vue';
+import { convertApi2FormUrlOnlyOne, format } from '@/utils';
+import { FinancialApprovalColumns } from './constants';
+import { useIndustrialParkDropDownList } from '@/hooks/industrialPark';
+
+defineOptions({
+  name: 'FinancialApproval',
+});
+
+const operationBtns = defineOperationBtns([
+  {
+    data: {
+      enCode: 'detailBtn',
+      name: '璇︽儏',
+    },
+    emits: {
+      onClick: (role) => openDialog(role, true),
+    },
+    extraProps: {
+      hide: (row: API.GetParkBountyTradeDetailOutput) =>
+        row.auditStatus === EnumParkBountyTradeDetailAuditStatus.Wait,
+    },
+  },
+  {
+    data: {
+      enCode: 'checkBtn',
+      name: '瀹℃壒',
+    },
+    emits: {
+      onClick: (row) => openDialog(row),
+    },
+    extraProps: {
+      hide: (row: API.GetParkBountyTradeDetailOutput) =>
+        row.auditStatus !== EnumParkBountyTradeDetailAuditStatus.Wait,
+    },
+  },
+]);
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+const { industrialParkList } = useIndustrialParkDropDownList();
+
+const fourStreamsIndustrialParkList = computed(() => {
+  return industrialParkList.value.filter((x) => !!x.rewardEnable);
+});
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetParkBountyTradeDetailByIdInput = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        searchKeyWord: extraParamState.searchKeyWord,
+        // transferTimeBegin: format(extraParamState.transferTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        // transferTimeEnd: format(extraParamState.transferTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        creationTimeBegin: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
+        creationTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        // "enterpriseId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
+        // "auditStatus": 10
+      };
+      let res = await parkBountyApplyServices.getParkBountyTradeDetailList(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      searchKeyWord: '',
+      enterpriseId: '',
+      auditStatus: '' as any as EnumParkBountyTradeDetailAuditStatus,
+      creationTime: [] as unknown as ModelValueType,
+      orderInput: [{ property: 'tradeTime', order: OrderInputType.Desc }],
+    },
+    columnsRenderProps: {
+      authType: { type: 'enum', valueEnum: EnterpriseTypeText },
+      tradeTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
+      tradeAmount: { type: 'money' },
+      remianAmount: { type: 'money' },
+      auditStatus: {
+        type: 'tag',
+        valueEnum: EnumParkBountyTradeDetailAuditStatusText,
+        tagTypeEnum: EnumParkBountyTradeDetailAuditStatusTag,
+      },
+    },
+  }
+);
+
+function openDialog(row: API.GetParkBountyTradeDetailOutput, isCheck = false) {
+  handleAdd({
+    id: row.id,
+    isCheck,
+    auditStatus:
+      row.auditStatus === EnumParkBountyTradeDetailAuditStatus.Reject
+        ? EnumParkBountyTradeDetailAuditStatus.Reject
+        : EnumParkBountyTradeDetailAuditStatus.Pass,
+    auditRemark: row.auditRemark,
+    payAuditFileUrl: convertApi2FormUrlOnlyOne(row.payAuditFileUrl),
+    userName: row.userName,
+    enterpriseName: row.enterpriseName,
+    societyCreditCode: row.societyCreditCode,
+    contactPhone: row.contactPhone,
+    authType: row.authType,
+    parkName: row.parkName,
+    parkTypeName: row.parkTypeName,
+    tradeAmount: row.tradeAmount,
+    remianAmount: row.remianAmount,
+    tradeTime: row.tradeTime,
+    auditTime: row.auditTime,
+    payRemark: row.payRemark,
+    payFileUrl: convertApi2FormUrlOnlyOne(row.payFileUrl),
+  });
+}
+
+const { dialogProps, handleAdd, handleEdit, editForm } = useFormDialog({
+  onConfirm: handleAddOrEdit,
+  defaultFormParams: {
+    id: '',
+    auditStatus: '' as any as EnumParkBountyTradeDetailAuditStatus,
+    auditRemark: '',
+    payAuditFileUrl: [] as UploadUserFile[],
+    isCheck: false,
+    userName: '',
+    enterpriseName: '',
+    societyCreditCode: '',
+    contactPhone: '',
+    authType: EnterpriseType.HREnterprise,
+    parkName: '',
+    parkTypeName: '',
+    tradeAmount: '' as any as number,
+    remianAmount: '' as any as number,
+    tradeTime: '',
+    auditTime: '',
+    payRemark: '',
+    payFileUrl: [] as UploadUserFile[],
+  },
+});
+
+async function handleAddOrEdit() {
+  try {
+    let params: API.AuditParkBountyTradeInput = {
+      id: editForm.id,
+      auditStatus: editForm.auditStatus,
+      /** 瀹℃牳澶囨敞 */
+      auditRemark: editForm.auditRemark,
+      /** 瀹℃牳鍑瘉 */
+      payAuditFileUrl: editForm.payAuditFileUrl?.[0]?.path ?? '',
+    };
+    let res = await parkBountyApplyServices.auditParkBountyApplyTrade(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+</script>

--
Gitblit v1.9.1