From da9363290e99b960805b7dfdefef201f89d1dde0 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期三, 16 七月 2025 18:07:39 +0800 Subject: [PATCH] fix: 奖励金审核 --- src/services/api/User.ts | 14 + src/constants/reward.ts | 28 ++ src/services/api/typings.d.ts | 62 +++++ src/views/Reward/RewardApplyTradeCheck.vue | 228 +++++++++++++++++++ src/views/Reward/constants/index.ts | 1 src/router/index.ts | 13 + src/services/api/ParkBountyApply.ts | 15 + src/views/Reward/components/RewardApplyTradeCheckDialog.vue | 236 +++++++++++++++++++ src/views/Reward/constants/columns.ts | 81 ++++++ 9 files changed, 677 insertions(+), 1 deletions(-) diff --git a/src/constants/reward.ts b/src/constants/reward.ts index 8304a23..dde73a7 100644 --- a/src/constants/reward.ts +++ b/src/constants/reward.ts @@ -177,3 +177,31 @@ [BillStatusEnum.NeedUpload]: '寰呭畬鍠�', [BillStatusEnum.HasUpload]: '宸蹭笂浼�', }; + +export enum EnumParkBountyTradeDetailAuditStatus { + /// 寰呭鏍� + Wait = 10, + + /// 瀹℃牳閫氳繃 + Pass = 20, + + /// 椹冲洖 + Reject = 30, +} + +export const EnumParkBountyTradeDetailAuditStatusText = { + [EnumParkBountyTradeDetailAuditStatus.Wait]: '寰呭鏍�', + [EnumParkBountyTradeDetailAuditStatus.Pass]: '瀹℃牳閫氳繃', + [EnumParkBountyTradeDetailAuditStatus.Reject]: '椹冲洖', +}; + +export const EnumParkBountyTradeDetailAuditStatusTextForAdudit = { + [EnumParkBountyTradeDetailAuditStatus.Pass]: '閫氳繃', + [EnumParkBountyTradeDetailAuditStatus.Reject]: '椹冲洖', +}; + +export const EnumParkBountyTradeDetailAuditStatusTag = { + [EnumParkBountyTradeDetailAuditStatus.Wait]: 'warning', + [EnumParkBountyTradeDetailAuditStatus.Pass]: 'success', + [EnumParkBountyTradeDetailAuditStatus.Reject]: 'danger', +}; diff --git a/src/router/index.ts b/src/router/index.ts index cb3837d..6314848 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -234,6 +234,19 @@ icon: 'home', }, }, + { + path: '/RewardApplyTradeCheck', + name: 'RewardApplyTradeCheck', + hidden: false, + alwaysShow: true, + component: () => import('@/views/Reward/RewardApplyTradeCheck.vue'), + meta: { + rank: 10034, + title: '鍑鸿处瀹℃壒', + // rootMenu: true, + icon: 'home', + }, + }, ], }, // { diff --git a/src/services/api/ParkBountyApply.ts b/src/services/api/ParkBountyApply.ts index e5828b4..867b106 100644 --- a/src/services/api/ParkBountyApply.ts +++ b/src/services/api/ParkBountyApply.ts @@ -17,6 +17,21 @@ }); } +/** 濂栧姳閲�-鍑鸿处 POST /api/ParkBountyApply/AuditParkBountyApplyTrade */ +export async function auditParkBountyApplyTrade( + body: API.AuditParkBountyTradeInput, + options?: API.RequestConfig +) { + return request<number>('/api/ParkBountyApply/AuditParkBountyApplyTrade', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} + /** 鎾ゅ洖鐢虫姤 GET /api/ParkBountyApply/CancelParkBountyApply */ export async function cancelParkBountyApply( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) diff --git a/src/services/api/User.ts b/src/services/api/User.ts index 62c8e00..3e7a25b 100644 --- a/src/services/api/User.ts +++ b/src/services/api/User.ts @@ -306,6 +306,20 @@ }); } +/** 鑾峰彇姹熶綉淇濈敤鎴蜂俊鎭� GET /api/User/GetJybUserInfo/${param0} */ +export async function getJybUserInfoId( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetJybUserInfoIdParams, + options?: API.RequestConfig +) { + const { id: param0, ...queryParams } = params; + return request<API.JybUserInfoDto>(`/api/User/GetJybUserInfo/${param0}`, { + method: 'GET', + params: { ...queryParams }, + ...(options || {}), + }); +} + /** 鑾峰彇浜掔浉鍏虫敞鍒嗛〉鍒楄〃 POST /api/User/GetMutualFollowUserPage */ export async function getMutualFollowUserPage(body: API.PageInput, options?: API.RequestConfig) { return request<API.FollowUserListOutputPageOutput>('/api/User/GetMutualFollowUserPage', { diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index 289d356..75788fe 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -1535,6 +1535,10 @@ suppierType?: number; } + interface APIgetJybUserInfoIdParams { + id: string; + } + interface APIgetLgGigWorkUserDetailParams { id?: string; } @@ -2368,6 +2372,16 @@ auditNote?: string; /** 瀹℃牳浜� */ checkUserId?: string; + } + + interface AuditParkBountyTradeInput { + /** 鍑鸿处璁板綍Id */ + id?: string; + auditStatus?: EnumParkBountyTradeDetailAuditStatus; + /** 瀹℃牳澶囨敞 */ + auditRemark?: string; + /** 瀹℃牳鍑瘉 */ + payAuditFileUrl?: string; } interface AuditWalletBatchTransferDetailInput { @@ -5904,6 +5918,8 @@ configuration?: Record<string, any>; } + type EnumParkBountyTradeDetailAuditStatus = 10 | 20 | 30; + interface ExportBountyApplyData { /** 浼佷笟鍚嶇О */ enterpriseName: string; @@ -8429,11 +8445,26 @@ /** 鍑鸿处缁撴潫鏃ユ湡 */ transferTimeEnd?: string; enterpriseId?: string; + auditStatus?: EnumParkBountyTradeDetailAuditStatus; } interface GetParkBountyTradeDetailOutput { + enterpriseId?: string; + /** 璐﹀彿 */ + userName?: string; + /** 浼佷笟鍚嶇О */ + enterpriseName?: string; + /** 鐢佃瘽 */ + contactPhone?: string; + /** 绀句細缁熶竴淇$敤浠g爜 */ + societyCreditCode?: string; + authType?: EnterpriseTypeEnum; + /** 鐢宠鍥尯 */ + parkName?: string; + /** 鐢宠鍥尯绫诲瀷 */ + parkTypeName?: string; id?: string; - /** 鏈�杩戝嚭璐﹂噾棰� */ + /** 鍑鸿处閲戦 */ tradeAmount?: number; /** 鍑鸿处鍑瘉 */ payFileUrl?: string; @@ -8445,6 +8476,13 @@ /** 濂栧姳閲戜綑棰� */ remianAmount?: number; financeType?: FinanceTypeEnum; + auditStatus?: EnumParkBountyTradeDetailAuditStatus; + /** 瀹℃牳澶囨敞 */ + auditRemark?: string; + /** 瀹℃牳鏃堕棿 */ + auditTime?: string; + /** 瀹℃牳鍑瘉 */ + payAuditFileUrl?: string; } interface GetParkBountyTradeDetailOutputPageOutput { @@ -13003,6 +13041,28 @@ properties?: Record<string, any>; } + interface JybUserInfoDto { + id?: string; + /** 浼佷笟鍚嶇О */ + enterpriseName?: string; + /** 鑱旂郴浜� */ + contact?: string; + /** 鑱旂郴鐢佃瘽 */ + contactPhone?: string; + /** 缁熶竴绀句細淇$敤浠g爜 */ + societyCreditCode?: string; + /** 璇︾粏鍦板潃 */ + addressDetail?: string; + /** 鐢ㄦ埛鎵嬫満鍙� */ + phoneNumber?: string; + /** 閾惰鎬昏鍚嶇О */ + bankName?: string; + /** 閾惰鍗″彿 */ + bankCardNumber?: string; + /** 缁戝畾閭鍦板潃 */ + bindEmailAddress?: string; + } + interface KeyInput { id?: string; } diff --git a/src/views/Reward/RewardApplyTradeCheck.vue b/src/views/Reward/RewardApplyTradeCheck.vue new file mode 100644 index 0000000..32b478b --- /dev/null +++ b/src/views/Reward/RewardApplyTradeCheck.vue @@ -0,0 +1,228 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <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="RewardApplyTradeCheckColumns" + :operationBtns="operationBtns" + > + </ProTableV2> + <RewardApplyTradeCheckDialog v-bind="dialogProps"></RewardApplyTradeCheckDialog> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + OperationBtnType, + ProTableV2, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + FieldDatePicker, + useFormDialog, + UploadUserFile, + defineOperationBtns, +} 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 { RewardApplyTradeCheckColumns } from './constants'; + +defineOptions({ + name: 'RewardApplyTradeCheck', +}); + +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 }); + +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: '', + 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> diff --git a/src/views/Reward/components/RewardApplyTradeCheckDialog.vue b/src/views/Reward/components/RewardApplyTradeCheckDialog.vue new file mode 100644 index 0000000..42d82a7 --- /dev/null +++ b/src/views/Reward/components/RewardApplyTradeCheckDialog.vue @@ -0,0 +1,236 @@ +<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="form.isCheck" + > + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 + label="瀹℃牳:" + prop="auditStatus" + :check-rules="[{ message: '璇烽�夋嫨瀹℃牳鐘舵��' }]" + > + <ProFormRadio + v-model="form.auditStatus" + :value-enum="EnumParkBountyTradeDetailAuditStatusTextForAdudit" + /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol v-if="form.isCheck"> + <ProFormColItem :span="12"> + <ProFormItemV2 label="瀹℃牳鏃ユ湡:" prop="auditTime"> + <ProFormDatePicker v-model="form.auditTime" type="date" format="YYYY-MM-DD HH:mm" /> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + <ProFormCol> + <ProFormColItem :span="12"> + <ProFormItemV2 + label="涓婁紶鍑瘉:" + prop="payAuditFileUrl" + :check-rules="[ + { + message: '璇蜂笂浼犲嚟璇�', + type: 'upload', + }, + ]" + > + <ProFormUpload + v-model:file-url="form.payAuditFileUrl" + :limit="1" + :showTip="false" + :limitFileSize="50" + ></ProFormUpload> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + + <ProFormCol> + <ProFormColItem> + <ProFormItemV2 + label="瀹℃牳鐞嗙敱:" + prop="auditRemark" + :required="form.auditStatus === EnumParkBountyTradeDetailAuditStatus.Reject" + :check-rules="[ + { + message: '璇疯緭鍏ュ鏍哥悊鐢�', + validator: (rule, value, callback) => { + if (!value && form.auditStatus === EnumParkBountyTradeDetailAuditStatus.Reject) { + callback(new Error('璇疯緭鍏ラ┏鍥炵悊鐢�')); + } + callback(); + }, + }, + ]" + > + <ProFormTextArea + v-model="form.auditRemark" + placeholder="璇疯緭鍏�" + show-word-limit + :maxlength="150" + ></ProFormTextArea> + </ProFormItemV2> + </ProFormColItem> + </ProFormCol> + </ProForm> + <template #footer> + <span class="dialog-footer"> + <el-button @click="emit('onCancel')">鍙� 娑�</el-button> + <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button> + </span> + </template> + </ProDialog> +</template> + +<script setup lang="ts"> +import { FormInstance } from 'element-plus'; +import { + ProDialog, + ProForm, + ProFormItemV2, + ProFormTextArea, + ProFormCol, + ProFormColItem, + ProFormRadio, + ProFormUpload, + ProFormDatePicker, + UploadUserFile, +} from '@bole-core/components'; +import * as parkBountyApplyServices from '@/services/api/ParkBountyApply'; +import { usePortraitTableWithAttachment } from '@/hooks'; +import { convertApi2FormUrl, convertApi2FormUrlOnlyOne } from '@/utils'; +import { useQuery } from '@tanstack/vue-query'; +import { + EnumParkBountyTradeDetailAuditStatus, + EnumParkBountyTradeDetailAuditStatusTextForAdudit, + EnterpriseType, + EnterpriseTypeText, +} from '@/constants'; + +defineOptions({ + name: 'WithdrawalApprovalAuditDialog', +}); + +// type Props = {}; + +// const props = withDefaults(defineProps<Props>(), {}); + +const visible = defineModel({ type: Boolean }); + +type Form = { + title?: string; + id: string; + auditStatus: EnumParkBountyTradeDetailAuditStatus; + auditRemark: string; + payAuditFileUrl: UploadUserFile[]; + isCheck: boolean; + userName: string; + enterpriseName: string; + societyCreditCode: string; + contactPhone: string; + authType: EnterpriseType; + parkName: string; + parkTypeName: string; + tradeAmount: number; + remianAmount: number; + tradeTime: string; + auditTime: string; + payRemark: string; + payFileUrl: UploadUserFile[]; +}; + +const form = defineModel<Form>('form'); + +const emit = defineEmits<{ + (e: 'onConfirm'): void; + (e: 'onCancel'): void; +}>(); + +const { portraitTableWithAttachmentProps } = usePortraitTableWithAttachment({ + data: form, + annexList: computed(() => form.value?.payFileUrl), + columns: [ + { + label: '寮�鎴疯处鍙�', + key: 'userName', + formatter: () => '1511 2001 2920 0156 069', + }, + { + label: '杩涜处鍗曚綅', + key: 'enterpriseName', + formatter: () => '澶钩璐骇淇濋櫓鏈夐檺鍏徃鎶氬窞涓績鏀叕鍙�', + }, + { + label: '寮�鎴峰悕绉�', + key: 'societyCreditCode', + formatter: () => '澶钩璐骇淇濋櫓鏈夐檺鍏徃鎶氬窞涓績鏀叕鍙�', + }, + { + label: '寮�鎴烽摱琛�', + key: 'contactPhone', + formatter: () => '涓浗宸ュ晢閾惰鑲′唤鏈夐檺鍏徃鎶氬窞璧d笢鏀', + }, + // { + // label: '浼佷笟绫诲瀷', + // key: 'authType', + // type: 'enum', + // valueEnum: EnterpriseTypeText, + // }, + // { + // label: '鎵�灞炲洯鍖�', + // key: 'parkName', + // }, + // { + // label: '鍥尯绫诲瀷', + // key: 'parkTypeName', + // }, + // { + // label: '娑堣垂绫诲瀷', + // key: 'payRemark', + // }, + { + label: '鐢宠鍑鸿处閲戦', + key: 'tradeAmount', + type: 'money', + }, + { + label: '鐢宠鍑鸿处鏃堕棿', + key: 'tradeTime', + type: 'date', + }, + { + label: '璧勯噾浣欓', + key: 'remianAmount', + type: 'money', + }, + ], +}); + +const dialogForm = ref<FormInstance>(); + +function onDialogClose() { + if (!dialogForm.value) return; + dialogForm.value.resetFields(); +} + +function handleConfirm() { + if (!dialogForm.value) return; + if (form.value?.isCheck) { + emit('onCancel'); + return; + } + dialogForm.value.validate((valid) => { + if (valid) { + emit('onConfirm'); + } else { + return; + } + }); +} +</script> diff --git a/src/views/Reward/constants/columns.ts b/src/views/Reward/constants/columns.ts new file mode 100644 index 0000000..58aab3c --- /dev/null +++ b/src/views/Reward/constants/columns.ts @@ -0,0 +1,81 @@ +import { defineColumns } from '@bole-core/components'; + +export const RewardApplyTradeCheckColumns = defineColumns([ + { + id: '1', + enCode: 'userName', + name: '甯愬彿', + width: 160, + }, + { + id: '2', + enCode: 'enterpriseName', + name: '浼佷笟鍚嶇О', + width: 160, + }, + { + id: '3', + enCode: 'societyCreditCode', + name: '淇$敤浠g爜', + width: 160, + }, + { + id: '4', + enCode: 'contactPhone', + name: '鐢佃瘽', + width: 160, + }, + { + id: '5', + enCode: 'authType', + name: '浼佷笟绫诲瀷', + width: 160, + }, + { + id: '6', + enCode: 'parkName', + name: '鎵�灞炲洯鍖�', + width: 160, + }, + { + id: '7', + enCode: 'parkTypeName', + name: '鍥尯绫诲瀷', + }, + { + id: '22', + enCode: 'auditStatus', + name: '瀹℃牳鐘舵��', + width: 160, + }, + { + id: '21', + enCode: 'payRemark', + name: '娑堣垂绫诲瀷', + width: 160, + }, + { + id: '10', + enCode: 'tradeAmount', + name: '鐢宠鍑鸿处閲戦', + width: 160, + }, + { + id: '11', + enCode: 'tradeTime', + name: '鐢宠鍑鸿处鏃堕棿', + width: 160, + }, + // { + // id: '12', + // enCode: 'payFileUrl', + // name: '鍑鸿处鍑瘉', + // width: 160, + // }, + { + id: '9', + enCode: 'remianAmount', + name: '璧勯噾浣欓', + width: 160, + }, +]); diff --git a/src/views/Reward/constants/index.ts b/src/views/Reward/constants/index.ts new file mode 100644 index 0000000..a7f066b --- /dev/null +++ b/src/views/Reward/constants/index.ts @@ -0,0 +1 @@ +export * from './columns'; -- Gitblit v1.9.1