Quellcode durchsuchen

转账功能发布

kevin_zhangl vor 3 Jahren
Ursprung
Commit
b200b0d435

+ 55 - 0
src/api/finance.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 转账列表
+export function fetchTransferList(data) {
+  return request({
+    url: '/v1/finance/transfer-list',
+    method: 'get',
+    params: data
+  })
+}
+
+// 发起转账
+export function fetchApplyTransfer(data) {
+  return request({
+    url: '/v1/finance/transfer-add',
+    method: 'post',
+    params: data
+  })
+}
+
+// 转账配置
+export function fetchChkTransferUser() {
+  return request({
+    url: '/v1/finance/chk-transfer-user',
+    method: 'get',
+    params: {}
+  })
+}
+
+// 用户账户
+export function fetchBalance() {
+  return request({
+    url: '/v1/finance/available-balance',
+    method: 'get',
+    params: {}
+  })
+}
+
+// 查询用户
+export function fetchFullInfo(data) {
+  return request({
+    url: '/v1/user/full-info',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取转账授权吗
+export function fetchTransferCode() {
+  return request({
+    url: '/v1/finance/mult-point\n',
+    method: 'get',
+    params: {}
+  })
+}

+ 34 - 1
src/lang/en.js

@@ -218,7 +218,8 @@ export default {
   },
   currency: {
     unit: 'Naira',
-    sign: '₦'
+    sign: '₦',
+    naira: 'NGN',
   },
 
   common: {
@@ -237,6 +238,8 @@ export default {
     endDate: 'End Date',
     deleteTips: 'Are you sure you want to delete the selected data?',
     hint: 'Hint',
+    cancel: 'Cancel',
+    confirm: 'Confirm',
   },
 
   shop: {
@@ -335,4 +338,34 @@ export default {
     postTransactionBalance: 'Post Trans Balance',
     remark: 'Remark',
   },
+  finance: {
+    applyTransfer: 'Apply For Transfer',
+    transferOutAccountHint: 'Select transfer out of account',
+    transferInAccountHint: 'Select transfer in account',
+    receiveMemberCodeHint: 'Enter your receiving member code',
+    receiveMemberNameHint: 'Enter the name of receiving member',
+    transferAccounts: 'Transfer Accounts',
+    receivingMemberCode: 'Receiving Member Code',
+    receivingMemberName: 'Receiving Member Name',
+    transferIntoAccount: 'Transfer Into Account',
+    transferAmount: 'Amount',
+    serviceCharge: 'Service Charge',
+    actualAmountTransferredInto: 'Actual Amount Transferred Into',
+    transferTime: 'Transfer Time',
+    remark: 'Remark',
+    messageApplyTransfer: 'Are you sure you want to apply transfer?',
+    selectTransferType: 'Select transfer type',
+    transferType: 'Transfer Type',
+    currentAvailableBonus: 'Available Bonus',
+    currentAvailableEcoin: 'Available Ecoin',
+    currentTransferRatio: 'Transfer Ratio',
+    maximumTransferAmount: 'Maximum transfer amount',
+    memberCode: 'Member Code',
+    memberName: 'Member Name',
+    lessTransferHint: 'Each transfer shall not be less than %s',
+    transferNotAllow: 'Not allowed to transfer to yourself',
+    successTips: 'Successfully.',
+    enterPasswordTips: 'Please enter your payment password',
+    executing: 'executing...',
+  },
 }

+ 34 - 1
src/lang/zh.js

@@ -218,7 +218,8 @@ export default {
   },
   currency: {
     unit: '元',
-    sign: '¥'
+    sign: '¥',
+    naira: 'NGN',
   },
   common: {
     save: '保存',
@@ -236,6 +237,8 @@ export default {
     endDate: '结束时间',
     deleteTips: '确认删除所选数据?',
     hint: '提示',
+    confirm: '确定',
+    cancel: '取消'
   },
   shop: {
     productCode: '商品编号',
@@ -330,4 +333,34 @@ export default {
     postTransactionBalance: '交易后余额',
     remark: '备注',
   },
+  finance: {
+    applyTransfer: '转账',
+    transferOutAccountHint: '请选择转出账户',
+    transferInAccountHint: '请选择转入账户',
+    receiveMemberCodeHint: '请输入接收会员编号',
+    receiveMemberNameHint: '请输入接收会员姓名',
+    transferAccounts: '转出账户',
+    receivingMemberCode: '接收会员编号',
+    receivingMemberName: '接收会员姓名',
+    transferIntoAccount: '转入账户',
+    transferAmount: '转账金额',
+    serviceCharge: '手续费',
+    actualAmountTransferredInto: '实际入账金额',
+    transferTime: '转账时间',
+    remark: '备注',
+    messageApplyTransfer: '确定要发起转账吗?',
+    selectTransferType: '请选择转账类型',
+    transferType: '转账类型',
+    currentAvailableBonus: '当前可用奖金',
+    currentAvailableEcoin: '当前可用余额',
+    currentTransferRatio: '当前转账比例',
+    maximumTransferAmount: '最大转账金额',
+    lessTransferHint: '每次转账不得少于 %s',
+    transferNotAllow: '不允许向自己转账',
+    memberCode: '转入会员编号',
+    memberName: '会员姓名',
+    successTips: '转账成功',
+    enterPasswordTips: '请输入支付密码',
+    executing: '执行中...',
+  },
 }

+ 2 - 0
src/router/index.js

@@ -17,6 +17,7 @@ import configRouter from "@/router/modules/config";
 import atlasRouter from "@/router/modules/atlas";
 import articleRouter from "@/router/modules/article";
 import bonusRouter from "@/router/modules/bonus";
+import financeRouter from "@/router/modules/finance";
 
 /**
  * Note: sub-menu only appear when route children.length >= 1
@@ -205,6 +206,7 @@ export const asyncRoutes = [
   atlasRouter,
   articleRouter,
   bonusRouter,
+  financeRouter,
 
   {
     path: '/error',

+ 27 - 0
src/router/modules/finance.js

@@ -0,0 +1,27 @@
+import Layout from '@/layout'
+
+const financeRouter = {
+  path: '/finance',
+  component: Layout,
+  redirect: '/finance/transfer-list',
+  name: 'Bonus Management',
+  meta: {
+    title: 'finance',
+    icon: 'el-icon-coin'
+  },
+  children: [
+    {
+      path: 'transfer-list',  // 转账列表
+      component: () => import('@/views/finance/transfer-list'),
+      name: 'TransferList',
+      meta: { title: 'transferList', icon: 'el-icon-coin' }
+    },
+    {
+      path: 'transfer-apply',  // 发起转账
+      component: () => import('@/views/finance/transfer-apply'),
+      name: 'TransferApply',
+      meta: { title: 'transferApply', icon: 'el-icon-coin' }
+    },
+  ]
+}
+export default financeRouter

+ 3 - 2
src/utils/request.js

@@ -25,14 +25,14 @@ service.interceptors.request.use(
     if (usersInfo.accessToken()) {
       config.headers['Authorization'] = process.env.VUE_APP_ACCESS_TOKEN_PREFIX + usersInfo.accessToken()
     }
-    if (usersInfo.accessToken() && usersInfo.accessTokenExpiresIn() 
+    if (usersInfo.accessToken() && usersInfo.accessTokenExpiresIn()
     && parseInt(usersInfo.accessTokenExpiresIn()) + parseInt(usersInfo.accessTokenUpdateAt()) - 30 > parseInt(tool.getTimestamp())) {
     } else if(usersInfo.accessToken()) {
       // 需要先刷新token
       let refreshToken = usersInfo.refreshToken()
       let refreshTokenExpiresIn = usersInfo.refreshTokenExpiresIn()
       let refreshTokenUpdateAt = usersInfo.refreshTokenUpdateAt()
-      if (refreshToken && refreshTokenExpiresIn 
+      if (refreshToken && refreshTokenExpiresIn
         && parseInt(refreshTokenExpiresIn) - 30 + parseInt(refreshTokenUpdateAt) > parseInt(tool.getTimestamp())) {
         // 有效,去更新
         axios.get(`${process.env.VUE_APP_BASE_API}/v1/oauth/refresh-token?refresh-token=${refreshToken}`).then(response => {
@@ -77,6 +77,7 @@ service.interceptors.request.use(
 // response interceptor
 service.interceptors.response.use(
   response => {
+    console.log(response)
     const responseData = response.data
     const data = responseData.data
     if (responseData.success === false) {

+ 1 - 1
src/views/bonus/account-list.vue

@@ -48,7 +48,7 @@
 								<el-input size="small" v-model="listQuery.remark" :placeholder="$t('bonus.remark')" clearable  style="width: 100%; margin: 10px 0;"></el-input>
 						</el-col>
 						<el-col :xs="24" :sm="24" :lg="24" :span="24">
-							<div class="grid-content bg-purple" align="right">
+							<div class="grid-content bg-purple">
 								<el-button size="small" type="primary" @click="handleBonusFlow(listQuery.walletType, walletName)">{{ $t('common.select') }}</el-button>
 								<el-button size="small" type="warning" @click="handleFilterClear(listQuery.walletType, walletName)">{{ $t('common.reset') }}</el-button>
 							</div>

+ 6 - 6
src/views/config/receive-address-list.vue

@@ -53,7 +53,7 @@
       </el-table-column>
     </el-table>
 
-    <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
+    <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.pageSize" @pagination="getList" />
 
 		<el-dialog :title="$t('config.createAddress')" :visible.sync="dialog" v-loading="dialogLoading" style="margin-top: -50px;">
 			<el-form ref="dataForm" :model="dataForm" label-position="right" label-width="180px" style="width: 500px; margin-left:50px;">
@@ -197,7 +197,7 @@ export default {
 			this.dialogLoading = true
 			createAddress(this.dataForm).then(() => {
 				this.$message({
-					message: 'User receive address has been added successfully.',
+					message: this.$t('config.messageCreate'),
 					type: 'success',
 					duration: 5 * 1000
 				})
@@ -229,7 +229,7 @@ export default {
 			this.listLoading = true
 			updateAddress(data).then(() => {
 				this.$message({
-					message: 'User receive address has been updated successfully.',
+					message: this.$t('config.messageUpdate'),
 					type: 'success',
 					duration: 5 * 1000
 				})
@@ -247,7 +247,7 @@ export default {
 			})
 		},
 		handleDelete(id) {
-			this.$confirm(`Are you sure you want to delete the selected data?`, 'Hint', {
+			this.$confirm(this.$t('common.deleteTips'), this.$t('common.hint'), {
 				confirmButtonText: 'Confirm',
 				cancelButtonText: 'Cancel',
 				type: 'warning'
@@ -256,7 +256,7 @@ export default {
 				this.listLoading = true
 				deleteAddress(data).then(() => {
 					this.$message({
-						message: 'User receive address has been deleted successfully.',
+						message: this.$t('config.messageDelete'),
 						type: 'success',
 						duration: 5 * 1000
 					})
@@ -290,7 +290,7 @@ export default {
 			this.editLoading = true
 			updateAddress(this.editForm).then(() => {
 				this.$message({
-					message: 'User receive address has been updated successfully.',
+					message: this.$t('config.messageUpdate'),
 					type: 'success',
 					duration: 5 * 1000
 				})

+ 208 - 0
src/views/finance/transfer-apply.vue

@@ -0,0 +1,208 @@
+<template>
+	<div class="app-container" v-loading="loading">
+		<el-form ref="form" :model="form" label-position="right" label-width="130px">
+			<el-row :gutter="10">
+				<el-col :xs="24" :sm="24" :lg="6">
+					<el-form-item :label="$t('finance.transferType')" prop="type" :placeholder="$t('finance.selectTransferType')" required>
+						<el-select v-model="form.type" class="filter-item">
+							<el-option v-for="(item,key) in transferConfig" :key="key" :label="item.outName + ' To ' + item.inName" :value="item.typeId" />
+						</el-select>
+					</el-form-item>
+					<el-form-item :label="$t('finance.currentAvailableBonus')">
+						<el-tag type="success">{{ balance }} {{ $t('currency.naira') }}</el-tag>
+					</el-form-item>
+					<el-form-item :label="$t('finance.currentAvailableEcoin')">
+						<el-tag type="success">{{ cash }} {{ $t('currency.naira') }}</el-tag>
+					</el-form-item>
+					<el-form-item :label="$t('finance.currentTransferRatio')" v-if="false">
+						<el-tag type="info">{{ transferProp }}%</el-tag>
+					</el-form-item>
+					<el-form-item :label="$t('finance.maximumTransferAmount')" v-if="false">
+						<el-tag type="info">{{ maxAmount }} {{ $t('currency.naira') }}</el-tag>
+					</el-form-item>
+					<el-form-item :label="$t('finance.memberCode')" prop="toUserName" required>
+						<el-input size="small" v-model.trim="form.toUserName" type="text" @change="fetchMember"></el-input>
+					</el-form-item>
+					<el-form-item :label="$t('finance.memberName')" prop="toRealName" v-show="form.toRealName !== null">
+						<el-input size="small" v-model.trim="form.toRealName" type="text" disabled></el-input>
+					</el-form-item>
+					<el-form-item :label="$t('finance.transferAmount')" prop="amount" required>
+						<el-input v-model.number="form.amount" type="number" :min="minAmount" :max="maxAmount" @change="chkReal"></el-input>
+					</el-form-item>
+					<el-form-item :label="$t('finance.transferAmount')" v-show="fee > 0">
+						<el-tag type="info">{{ fee }}%</el-tag>
+					</el-form-item>
+					<el-form-item :label="$t('finance.actualAmountTransferredInto')" v-show="fee > 0">
+						<el-tag type="warning">{{ realAmount }} {{ $t('currency.naira') }}</el-tag>
+					</el-form-item>
+					<el-form-item :label="$t('finance.remark')" prop="remark">
+						<el-input size="small" v-model.trim="form.remark" type="text"></el-input>
+					</el-form-item>
+					<el-form-item>
+						<el-button type="warning" size="small" @click="transferList">{{ $t('table.cancel') }}</el-button>
+						<el-button type="primary" size="small" @click="submit('form')">{{ $t('table.confirm') }}</el-button>
+					</el-form-item>
+				</el-col>
+			</el-row>
+		</el-form>
+	</div>
+</template>
+
+<script>
+import {fetchApplyTransfer, fetchBalance, fetchChkTransferUser, fetchFullInfo, fetchTransferCode} from '@/api/finance'
+import waves from '@/directive/waves'
+import Pagination from '@/components/Pagination'
+import tool from "@/utils/tool"
+import usersInfo from "@/utils/usersInfo";
+
+export default {
+	name: 'transferApply',
+	components: { Pagination },
+	directives: { waves },
+	data() {
+		return {
+			tool: tool,
+			loading: false,
+			form: {
+				type: 1,
+				toUserName: '',
+				toRealName: null,
+				amount: 0,
+				payPassword: '',
+				remark: '',
+				transferCode: '',
+			},
+			userInfo: {
+				TRANSFER_PROP: 100
+			},
+			transferConfig: [],
+			minAmount: 0,
+			maxAmount: 0,
+			transferProp: 0,
+			fee: 0,
+			cash: 0,
+			balance: 0,
+			realAmount: 0,
+			minAmountAllow: 5000,
+
+			submitButtonStat: false,
+		}
+	},
+	created() {
+		this.applyTransfer()
+	},
+	mounted() {
+		this.fetchBalance()
+	},
+	methods: {
+		applyTransfer() {
+			this.loading = true
+			fetchChkTransferUser().then(response => {
+				this.userInfo = response.data.userInfo
+				this.transferConfig = response.data.transferConfig
+				this.minAmount = response.data.minAmount
+				// 奖金转现金
+				this.fee = this.transferConfig[this.form.type - 1].fee
+
+				setTimeout(() => {
+					this.loading = false
+				}, 0.5 * 1000)
+			})
+		},
+		fetchBalance() {
+			fetchBalance().then(response => {
+				this.balance = response.data.bonus
+				this.cash = response.data.cash
+				this.maxAmount = parseFloat(tool.formatPrice(this.balance * this.userInfo.TRANSFER_PROP * 0.01))
+				this.transferProp = this.userInfo.TRANSFER_PROP
+			})
+		},
+		fetchMember () {
+			let toUserName = this.form.toUserName.trim()
+			// 不允许向自己转账
+			if (usersInfo.userName() === toUserName) {
+				this.form.toUserName = ''
+				this.$message({
+					message: this.$t('finance.transferNotAllow'),
+					type: 'error'
+				})
+				return false
+			}
+
+			this.listLoading = true
+			fetchFullInfo({ userName: toUserName }).then(response => {
+				this.form.toRealName = response.data.REAL_NAME
+				this.listLoading = false
+			})
+		},
+		chkReal () {
+			this.realAmount = tool.formatPrice(this.form.amount * (100 - this.fee) * 0.01)
+			if (this.realAmount < this.minAmountAllow) {
+				this.$message({
+					message: this.$t('finance.lessTransferHint').replace('%s', this.minAmountAllow + ' NGN'),
+					type: 'error',
+					duration: 3 * 1000
+				})
+				return false
+			}
+			return true
+		},
+		submit() {
+			if (this.chkReal() === false) {
+				return false
+			}
+
+			// 获取转账码
+			fetchTransferCode().then(response => {
+				this.form.transferCode = response.data.transferCode
+			}).catch((err) => {
+				this.$message({
+					message: err,
+					type: 'error',
+					duration: 3 * 1000
+				})
+				return false
+			})
+
+			this.$prompt(this.$t('finance.enterPasswordTips'), this.$t('common.hint'), {
+				confirmButtonText: this.$t('common.confirm'),
+				cancelButtonText: this.$t('common.cancel'),
+				inputType: 'password',
+				inputPattern: /\S+/,
+				inputErrorMessage: this.$t('finance.enterPasswordTips'),
+				beforeClose: async (action, instance, done) => {
+					if (action === 'confirm') {
+						instance.confirmButtonLoading = true
+						instance.confirmButtonText = 'executing..'// this.$t('finance.executing')
+						this.form.payPassword = instance.inputValue
+						this.submitButtonStat = true
+						fetchApplyTransfer(this.form).then(() => {
+							this.$refs['form'].resetFields()
+							this.$message({
+								message: this.$t('finance.messageApplyTransfer'),
+								type: 'success',
+								duration: 3 * 1000
+							})
+							this.submitButtonStat = false
+						}).catch((err) => {
+							this.$message({
+								message: err,
+								type: 'error',
+								duration: 3 * 1000
+							})
+							this.submitButtonStat = false
+						})
+					} else {
+						this.submitButtonStat = false
+						done()
+					}
+				}
+			})
+		},
+		transferList() {
+			this.$refs['form'].resetFields()
+			this.$router.push({path: `/finance/transfer-list`})
+		},
+	}
+}
+</script>

+ 159 - 0
src/views/finance/transfer-list.vue

@@ -0,0 +1,159 @@
+<template>
+	<div class="app-container" v-loading="listLoading">
+		<el-button size="small" type="success" @click="applyTransfer">{{ $t('finance.applyTransfer') }}</el-button>
+		<div class="filter-container">
+			<el-row :gutter="20">
+				<el-col :xs="24" :sm="24" :lg="6" :span="6">
+					<el-date-picker
+						v-model="listQuery.dateRange[0]"
+						type="date"
+						:placeholder="$t('common.startDate')"
+						value-format="yyyy-MM-dd"
+						clearable
+						style="width: 100%; margin: 10px 0;">
+					</el-date-picker>
+				</el-col>
+				<el-col :xs="24" :sm="24" :lg="6" :span="6">
+					<el-date-picker
+						v-model="listQuery.dateRange[1]"
+						type="date"
+						:placeholder="$t('common.endDate')"
+						value-format="yyyy-MM-dd"
+						clearable
+						style="width: 100%; margin: 10px 0;">
+					</el-date-picker>
+				</el-col>
+				<el-col :xs="24" :sm="24" :lg="6" :span="6">
+					<el-select size="small" v-model="listQuery.outWallet" :placeholder="$t('finance.transferOutAccountHint')" clearable class="filter-item" style="width: 100%; margin: 10px 0;">
+						<el-option v-for="(item, key) in walletType" :label="item.label" :value="item.type" :key="key"></el-option>
+					</el-select>
+				</el-col>
+				<el-col :xs="24" :sm="24" :lg="6" :span="6">
+					<el-select size="small" v-model="listQuery.inWallet" :placeholder="$t('finance.transferInAccountHint')" clearable class="filter-item" style="width: 100%; margin: 10px 0;">
+						<el-option v-for="(item, key) in walletType" :label="item.label" :value="item.type" :key="key"></el-option>
+					</el-select>
+				</el-col>
+			</el-row>
+			<el-row :gutter="20">
+				<el-col :xs="24" :sm="24" :lg="6" :span="6">
+					<el-input size="small" v-model="listQuery.userName" clearable :placeholder="$t('finance.receiveMemberCodeHint')" class="filter-item" style="width: 100%; margin: 10px 0;"></el-input>
+				</el-col>
+				<el-col :xs="24" :sm="24" :lg="6" :span="6">
+					<el-input size="small" v-model="listQuery.realName" clearable :placeholder="$t('finance.receiveMemberNameHint')" class="filter-item" auto-complate="false" style="width: 100%; margin: 10px 0;"></el-input>
+				</el-col>
+				<el-col :xs="24" :sm="24" :lg="12" :span="12">
+					<div class="grid-content bg-purple" align="right" style="width: 100%; margin: 10px 0;">
+						<el-button size="small" type="primary" @click="getList">{{ $t('common.select') }}</el-button>
+						<el-button size="small" type="warning" @click="handleFilterClear">{{ $t('common.reset') }}</el-button>
+					</div>
+				</el-col>
+			</el-row>
+		</div>
+		<el-table
+			:data="list"
+			border
+			fit
+			highlight-current-row
+			style="width: 100%; margin-top: 25px;"
+		>
+			<el-table-column min-width="120px" align="center" :label="$t('finance.transferAccounts')" prop="OUT_WALLET_NAME"></el-table-column>
+			<el-table-column min-width="130px" align="center" :label="$t('finance.receivingMemberCode')" prop="LAST_IN_USER_NAME"></el-table-column>
+			<el-table-column min-width="130px" align="center" :label="$t('finance.receivingMemberName')" prop="LAST_IN_REAL_NAME"></el-table-column>
+			<el-table-column min-width="130px" align="center" :label="$t('finance.transferIntoAccount')" prop="IN_WALLET_NAME"></el-table-column>
+			<el-table-column min-width="130px" align="center" :label="$t('finance.transferAmount')" prop="ORI_AMOUNT">
+				<template slot-scope="{row}">
+					<span>{{ tool.formatPrice(row.ORI_AMOUNT) }}</span>
+				</template>
+			</el-table-column>
+			<el-table-column min-width="180px" align="center" :label="$t('finance.serviceCharge')" prop="FEE" v-if="showFee">
+				<template slot-scope="{row}">
+					<span>{{ tool.formatPrice(row.FEE) }}</span>
+				</template>
+			</el-table-column>
+			<el-table-column min-width="120px" align="center" :label="$t('finance.actualAmountTransferredInto')" prop="AMOUNT" v-if="showFee">
+				<template slot-scope="{row}">
+					<span>{{ tool.formatPrice(row.AMOUNT) }}</span>
+				</template>
+			</el-table-column>
+			<el-table-column min-width="150px" align="center" :label="$t('finance.transferTime')" prop="CREATED_AT">
+				<template slot-scope="{row}">
+					<span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+				</template>
+			</el-table-column>
+			<el-table-column min-width="130px" align="center" :label="$t('finance.remark')" prop="REMARK"></el-table-column>
+		</el-table>
+
+		<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.pageSize" @pagination="getList" />
+	</div>
+</template>
+
+<script>
+import {fetchTransferList} from '@/api/finance'
+import waves from '@/directive/waves'
+import Pagination from '@/components/Pagination'
+import tool from "@/utils/tool"
+
+export default {
+	name: 'transferList',
+	components: { Pagination },
+	directives: { waves },
+	data() {
+		return {
+			tool: tool,
+			list: [],
+			total: 0,
+			listLoading: true,
+			listQuery: {
+				page: 1,
+				pageSize: 5,
+				inWallet: '',
+				outWallet: '',
+				realName: '',
+				userName: '',
+				dateRange: [],
+			},
+			showFee: false,
+			walletType: [
+				{
+					type: 'bonus',
+					label: 'Bonus'
+				},
+				{
+					type: 'cash',
+					label: 'Ecoin'
+				},
+			],
+		}
+	},
+	created() {
+		this.getList()
+	},
+	methods: {
+		getList() {
+			this.listLoading = true
+			fetchTransferList(this.listQuery).then(response => {
+				this.list = response.data.list
+				this.total = response.data.totalCount
+				this.showFee = response.data.showFee
+
+				setTimeout(() => {
+					this.listLoading = false
+				}, 0.5 * 1000)
+			})
+		},
+		applyTransfer() {
+			this.$router.push({path: `/finance/transfer-apply`})
+		},
+		handleFilterClear(){
+			this.listQuery.page = 1
+			this.listQuery.pageSize = 5
+			this.listQuery.inWallet = ''
+			this.listQuery.outWallet = ''
+			this.listQuery.realName = ''
+			this.listQuery.userName = ''
+			this.listQuery.dateRange = []
+			this.getList()
+		},
+	}
+}
+</script>