72 changed files with 3383 additions and 766 deletions
@ -0,0 +1,60 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
// 查询钱包列表
|
|||
export function listCoinAddress(query) { |
|||
return request({ |
|||
url: '/coin/coinAddress/list', |
|||
method: 'get', |
|||
params: query |
|||
}) |
|||
} |
|||
// 清除钱包详细
|
|||
export function clear(query) { |
|||
return request({ |
|||
url: '/coin/coinAddress/clearCoinAddressInfo', |
|||
method: 'get', |
|||
params: query |
|||
}) |
|||
} |
|||
// 查询钱包详细
|
|||
export function getCoinAddress(id) { |
|||
return request({ |
|||
url: '/coin/coinAddress/' + id, |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 新增钱包
|
|||
export function addCoinAddress(data) { |
|||
return request({ |
|||
url: '/coin/coinAddress', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 修改钱包
|
|||
export function updateCoinAddress(data) { |
|||
return request({ |
|||
url: '/coin/coinAddress', |
|||
method: 'put', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除钱包
|
|||
export function delCoinAddress(id) { |
|||
return request({ |
|||
url: '/coin/coinAddress/' + id, |
|||
method: 'delete' |
|||
}) |
|||
} |
|||
|
|||
// 导出钱包
|
|||
export function exportCoinAddress(query) { |
|||
return request({ |
|||
url: '/coin/coinAddress/export', |
|||
method: 'get', |
|||
params: query |
|||
}) |
|||
} |
@ -0,0 +1,53 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
// 查询波场USDT同步列表
|
|||
export function listTronUsdtSync(query) { |
|||
return request({ |
|||
url: '/tron/tronUsdtSync/list', |
|||
method: 'get', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
// 查询波场USDT同步详细
|
|||
export function getTronUsdtSync(txid) { |
|||
return request({ |
|||
url: '/tron/tronUsdtSync/' + txid, |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 新增波场USDT同步
|
|||
export function addTronUsdtSync(data) { |
|||
return request({ |
|||
url: '/tron/tronUsdtSync', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 修改波场USDT同步
|
|||
export function updateTronUsdtSync(data) { |
|||
return request({ |
|||
url: '/tron/tronUsdtSync', |
|||
method: 'put', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 删除波场USDT同步
|
|||
export function delTronUsdtSync(txid) { |
|||
return request({ |
|||
url: '/tron/tronUsdtSync/' + txid, |
|||
method: 'delete' |
|||
}) |
|||
} |
|||
|
|||
// 导出波场USDT同步
|
|||
export function exportTronUsdtSync(query) { |
|||
return request({ |
|||
url: '/tron/tronUsdtSync/export', |
|||
method: 'get', |
|||
params: query |
|||
}) |
|||
} |
@ -0,0 +1,403 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">{{ $route.meta.title }}</div> |
|||
</div> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" |
|||
v-hasPermi="['coin:coinAddress:add']">新增</el-button> |
|||
</el-col> |
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
|||
</el-row> |
|||
</div> |
|||
<div class="bg"> |
|||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" class="flex form" |
|||
label-width="88px" style="padding:0 20px"> |
|||
<el-form-item label="钱包名称" prop="name"> |
|||
<el-input v-model="queryParams.name" placeholder="请输入钱包名称" clearable size="medium" |
|||
@keyup.enter.native="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item label="钱包地址" prop="address"> |
|||
<el-input v-model="queryParams.address" placeholder="请输入钱包地址" clearable size="medium" |
|||
@keyup.enter.native="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item label="支付类型" prop="payType"> |
|||
<el-select v-model="queryParams.payType" placeholder="请选择支付类型" clearable size="medium"> |
|||
<el-option v-for="(item, i) in sortLevType" :key="i" :label="item.typeName" :value="item.payType"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="渠道类型" prop="channelType"> |
|||
<el-select v-model="queryParams.channelType" placeholder="请选择渠道类型" clearable size="medium"> |
|||
<el-option v-for="(item, i) in payChannelCon" :key="i" :label="item.channelName" |
|||
:value="item.payChannel"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
|
|||
<el-form-item> |
|||
<el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">搜索</el-button> |
|||
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
|
|||
<el-table v-loading="loading" :data="coinAddressList"> |
|||
<el-table-column label="钱包名称" align="center" prop="name" min-width="120"/> |
|||
<el-table-column label="钱包地址" align="center" prop="address" min-width="150"/> |
|||
<el-table-column label="支付类型" align="center" prop="payType" min-width="120"/> |
|||
<el-table-column label="渠道类型" align="center" prop="channelType" /> |
|||
<el-table-column label="备注" align="center" prop="remark" /> |
|||
<el-table-column label="日最大收款限额" align="center" prop="dayReceiveMax" /> |
|||
<el-table-column label="状态" align="center" prop="status" width="140px"> |
|||
<template slot-scope="scope"> |
|||
<el-switch v-model="scope.row.status" active-text="开" inactive-text="关" :active-value="'open'" |
|||
:inactive-value="'close'" @change="switchStatusChange(scope.row)"> |
|||
</el-switch> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="最后收款时间" align="center" prop="lastReceiveTime" width="180" /> |
|||
<el-table-column label="今日已收金额" align="center" prop="todayReceived" /> |
|||
<el-table-column label="日最大收款笔数" align="center" prop="dayMaxNumber" /> |
|||
<el-table-column label="今日已收笔数" align="center" prop="todayNumber" /> |
|||
<el-table-column label="单笔下限" align="center" prop="singleMin" /> |
|||
<el-table-column label="单笔上限" align="center" prop="singleMax" /> |
|||
<el-table-column label="单笔最大" align="center" prop="singleReceiveMax" /> |
|||
<el-table-column label="已支付统计" align="center" prop="paidCnt" /> |
|||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
|||
<template slot-scope="scope"> |
|||
<el-button size="mini" type="text" @click="handleKill(scope.row)">清除</el-button> |
|||
<el-button size="mini" type="text" @click="handleUpdate(scope.row)" |
|||
v-hasPermi="['coin:coinAddress:edit']">设置</el-button> |
|||
<el-button size="mini" type="text" @click="handleDelete(scope.row)" |
|||
v-hasPermi="['coin:coinAddress:remove']">删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" |
|||
@pagination="getList" /> |
|||
</div> |
|||
|
|||
<!-- 添加或修改钱包对话框 --> |
|||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
|||
<el-form-item label="钱包名称" prop="name"> |
|||
<el-input v-model="form.name" placeholder="请输入钱包名称" /> |
|||
</el-form-item> |
|||
<el-form-item label="钱包地址" prop="address"> |
|||
<el-input v-model="form.address" placeholder="请输入钱包地址" /> |
|||
</el-form-item> |
|||
<el-form-item label="支付类型" prop="payType"> |
|||
<el-select v-model="form.payType" placeholder="请选择支付类型"> |
|||
<el-option v-for="(item, i) in paymentChannelsList" :key="i" :label="item.name" |
|||
:value="item.payType+'-'+item.channelType"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="渠道类型" prop="channelType"> |
|||
<el-select v-model="form.channelType" placeholder="请选择渠道类型"> |
|||
<el-option v-for="(item, i) in paymentChannelsList" :key="i" :label="item.channelName" |
|||
:value="item.channelType"></el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="form.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="primary" @click="submitForm('form')">确 定</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
|
|||
<!-- 添加 --> |
|||
<el-dialog :title="title" :visible.sync="openSetting" width="500px" append-to-body> |
|||
<el-form ref="formSetting" :model="form" :rules="rules" label-width="120px"> |
|||
<el-form-item label="收款金额区间" prop="username"> |
|||
<el-input v-model="form.singleMin" placeholder="" style="width:150px" @input="change" /> - |
|||
<el-input v-model="form.singleMax" placeholder="" style="width:150px" @input="change" /> |
|||
</el-form-item> |
|||
<el-form-item label="日最大收款限额" prop="dayReceiveMax"> |
|||
<el-input v-model="form.dayReceiveMax" placeholder="请输入日最大收款限额" @input="change" /> |
|||
</el-form-item> |
|||
<el-form-item label="日最大收款笔数" prop="dayMaxNumber"> |
|||
<el-input v-model="form.dayMaxNumber" placeholder="请输入日最大收款笔数" @input="change" /> |
|||
</el-form-item> |
|||
<el-form-item label="单笔最大" prop="singleReceiveMax"> |
|||
<el-input v-model="form.singleReceiveMax" placeholder="请输入单笔最大" @input="change" /> |
|||
</el-form-item> |
|||
|
|||
|
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="primary" @click="submitForm('formSetting')">保 存</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { listCoinAddress, getCoinAddress, delCoinAddress, addCoinAddress, updateCoinAddress, exportCoinAddress, clear } from "@/api/coin/coinAddress"; |
|||
import { common_api } from "@/api/form"; |
|||
|
|||
export default { |
|||
name: "CoinAddress", |
|||
components: { |
|||
}, |
|||
data() { |
|||
return { |
|||
paymentChannelsList: [], |
|||
sortLevType: [], |
|||
payChannelCon: [], |
|||
|
|||
// 遮罩层 |
|||
loading: true, |
|||
// 选中数组 |
|||
ids: [], |
|||
// 非单个禁用 |
|||
single: true, |
|||
// 非多个禁用 |
|||
multiple: true, |
|||
// 显示搜索条件 |
|||
showSearch: true, |
|||
// 总条数 |
|||
total: 0, |
|||
// 钱包表格数据 |
|||
coinAddressList: [], |
|||
// 弹出层标题 |
|||
title: "", |
|||
// 是否显示弹出层 |
|||
open: false, |
|||
openSetting: false, |
|||
// 查询参数 |
|||
queryParams: { |
|||
pageNum: 1, |
|||
pageSize: 10, |
|||
name: null, |
|||
address: null, |
|||
payType: null, |
|||
channelType: null, |
|||
dayReceiveMax: null, |
|||
status: null, |
|||
lastReceiveTime: null, |
|||
todayReceived: null, |
|||
dayMaxNumber: null, |
|||
todayNumber: null, |
|||
singleMin: null, |
|||
singleMax: null, |
|||
singleReceiveMax: null, |
|||
paidCnt: null |
|||
}, |
|||
// 表单参数 |
|||
form: {}, |
|||
// 表单校验 |
|||
rules: { |
|||
payType: [ |
|||
{ required: true, message: "支付类型不能为空", trigger: "blur" } |
|||
], |
|||
channelType: [ |
|||
{ required: true, message: "渠道类型不能为空", trigger: "blur" } |
|||
], |
|||
name: [ |
|||
{ required: true, message: "钱包名称不能为空", trigger: "blur" } |
|||
], |
|||
address: [ |
|||
{ required: true, message: "钱包地址不能为空", trigger: "blur" } |
|||
], |
|||
remark: [ |
|||
{ required: true, message: "备注不能为空", trigger: "blur" } |
|||
], |
|||
dayReceiveMax: [ |
|||
{ required: true, message: "日最大收款限额(0表示不限制)不能为空", trigger: "blur" } |
|||
], |
|||
status: [ |
|||
{ required: true, message: "状态 open已使用 close:未使用不能为空", trigger: "blur" } |
|||
], |
|||
createTime: [ |
|||
{ required: true, message: "添加时间不能为空", trigger: "blur" } |
|||
], |
|||
todayReceived: [ |
|||
{ required: true, message: "今日已收金额不能为空", trigger: "blur" } |
|||
], |
|||
dayMaxNumber: [ |
|||
{ required: true, message: "日最大收款笔数不能为空", trigger: "blur" } |
|||
], |
|||
todayNumber: [ |
|||
{ required: true, message: "今日已收笔数不能为空", trigger: "blur" } |
|||
], |
|||
singleMin: [ |
|||
{ required: true, message: "单笔下限不能为空", trigger: "blur" } |
|||
], |
|||
singleMax: [ |
|||
{ required: true, message: "单笔上限不能为空", trigger: "blur" } |
|||
], |
|||
singleReceiveMax: [ |
|||
{ required: true, message: "单笔最大不能为空", trigger: "blur" } |
|||
], |
|||
paidCnt: [ |
|||
{ required: true, message: "已支付统计不能为空", trigger: "blur" } |
|||
] |
|||
} |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
this.init(); |
|||
}, |
|||
methods: { |
|||
change() { |
|||
this.$forceUpdate() |
|||
}, |
|||
// 状态有效无效 |
|||
switchStatusChange(rows) { |
|||
this.reset() |
|||
this.form = rows; |
|||
this.form.status = rows.status |
|||
updateCoinAddress(this.form).then((res) => { |
|||
if (res.code === 200) { |
|||
this.$message.success("编辑成功"); |
|||
} |
|||
}); |
|||
|
|||
}, |
|||
init() { |
|||
common_api.payTypeAll().then((response) => { |
|||
this.sortLevType = response.data |
|||
}); |
|||
common_api.payChannelAll().then((response) => { |
|||
this.payChannelCon = response.data |
|||
}); |
|||
common_api.getPaymentChannelsList().then((response) => { |
|||
this.paymentChannelsList = response.data |
|||
}); |
|||
|
|||
}, |
|||
/** 查询钱包列表 */ |
|||
getList() { |
|||
this.loading = true; |
|||
listCoinAddress(this.queryParams).then(response => { |
|||
this.coinAddressList = response.rows; |
|||
this.total = Number(response.total); |
|||
this.loading = false; |
|||
}); |
|||
}, |
|||
// 取消按钮 |
|||
cancel() { |
|||
this.open = false; |
|||
this.openSetting = false |
|||
this.reset(); |
|||
}, |
|||
// 表单重置 |
|||
reset() { |
|||
this.form = { |
|||
|
|||
}; |
|||
this.resetForm("form"); |
|||
}, |
|||
/** 搜索按钮操作 */ |
|||
handleQuery() { |
|||
this.queryParams.pageNum = 1; |
|||
this.getList(); |
|||
}, |
|||
/** 重置按钮操作 */ |
|||
resetQuery() { |
|||
this.resetForm("queryForm"); |
|||
this.handleQuery(); |
|||
}, |
|||
// 多选框选中数据 |
|||
handleSelectionChange(selection) { |
|||
this.ids = selection.map(item => item.id) |
|||
this.single = selection.length !== 1 |
|||
this.multiple = !selection.length |
|||
}, |
|||
/** 新增按钮操作 */ |
|||
handleAdd() { |
|||
this.reset(); |
|||
this.open = true; |
|||
this.title = "添加钱包"; |
|||
|
|||
}, |
|||
/** 修改按钮操作 */ |
|||
handleUpdate(row) { |
|||
this.reset(); |
|||
const id = row.id || this.ids |
|||
getCoinAddress(id).then(response => { |
|||
this.form = response.data; |
|||
this.openSetting = true; |
|||
this.title = "修改钱包"; |
|||
}); |
|||
}, |
|||
/** 提交按钮 */ |
|||
submitForm(type) { |
|||
this.$refs[type].validate(valid => { |
|||
if (valid) { |
|||
this.form.channelType=this.form.payType.split('-')[1]; |
|||
this.form.payType=this.form.payType.split('-')[0]; |
|||
if (this.form.id != null) { |
|||
updateCoinAddress(this.form).then(response => { |
|||
this.msgSuccess("设置成功"); |
|||
this.openSetting = false; |
|||
this.getList(); |
|||
}); |
|||
} else { |
|||
addCoinAddress(this.form).then(response => { |
|||
this.msgSuccess("新增成功"); |
|||
this.open = false; |
|||
this.getList(); |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
}, |
|||
/** 清除按钮操作 */ |
|||
handleKill(row) { |
|||
const ids = row.id || this.ids; |
|||
this.$confirm('是否确认清除钱包编号为"' + ids + '"的数据项?', "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}).then(function () { |
|||
return clear({ |
|||
address: row.address, |
|||
payType: row.payType |
|||
}); |
|||
}).then(() => { |
|||
this.getList(); |
|||
this.msgSuccess("清除成功"); |
|||
}) |
|||
}, |
|||
|
|||
|
|||
/** 删除按钮操作 */ |
|||
handleDelete(row) { |
|||
const ids = row.id || this.ids; |
|||
this.$confirm('是否确认删除钱包编号为"' + ids + '"的数据项?', "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}).then(function () { |
|||
return delCoinAddress(ids); |
|||
}).then(() => { |
|||
this.getList(); |
|||
this.msgSuccess("删除成功"); |
|||
}) |
|||
}, |
|||
/** 导出按钮操作 */ |
|||
handleExport() { |
|||
const queryParams = this.queryParams; |
|||
this.$confirm('是否确认导出所有钱包数据项?', "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}).then(function () { |
|||
return exportCoinAddress(queryParams); |
|||
}).then(response => { |
|||
this.download(response.msg); |
|||
}) |
|||
} |
|||
} |
|||
}; |
|||
</script> |
@ -1,273 +0,0 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">挂号详情</div> |
|||
</div> |
|||
</div> |
|||
<div class="detailCon m20"> |
|||
<div class="top"> |
|||
患者信息 |
|||
</div> |
|||
<div class="bottom"> |
|||
<div class="bottomFlex"> |
|||
<div class="item"> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
患者姓名 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
证件类型 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
微信昵称 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
就诊人地址 |
|||
</div> |
|||
<div class="val"> |
|||
北京市朝阳区**路**号**小区 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
就诊卡号 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
证件号码 |
|||
</div> |
|||
<div class="val"> |
|||
371890199507070909 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
手机号码 |
|||
</div> |
|||
<div class="val"> |
|||
15678900988 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
患者头像 |
|||
</div> |
|||
<div class="val"> |
|||
<el-avatar :size="size" :src="circleUrl"></el-avatar> |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
关系 |
|||
</div> |
|||
<div class="val"> |
|||
本人 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="detailCon m20"> |
|||
<div class="top"> |
|||
预约信息 |
|||
</div> |
|||
<div class="bottom"> |
|||
<div class="bottomFlex"> |
|||
<div class="item"> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
患者姓名 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
证件类型 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
微信昵称 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
就诊人地址 |
|||
</div> |
|||
<div class="val"> |
|||
北京市朝阳区**路**号**小区 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
就诊卡号 |
|||
</div> |
|||
<div class="val"> |
|||
赖尚荣 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
证件号码 |
|||
</div> |
|||
<div class="val"> |
|||
371890199507070909 |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
手机号码 |
|||
</div> |
|||
<div class="val"> |
|||
15678900988 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="item"> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
患者头像 |
|||
</div> |
|||
<div class="val"> |
|||
<el-avatar :size="size" :src="circleUrl"></el-avatar> |
|||
</div> |
|||
</div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
关系 |
|||
</div> |
|||
<div class="val"> |
|||
本人 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div> |
|||
<div class="valCon flex m20"> |
|||
<div class="label"> |
|||
挂号备注 |
|||
</div> |
|||
<div class="val"> |
|||
<el-input placeholder="请输入内容" v-model="input" clearable size="medium"> |
|||
</el-input> |
|||
</div> |
|||
</div> |
|||
<div class="btnCon"> |
|||
<el-button type="primary" size="medium">保存</el-button> |
|||
<el-button plain size="medium">取消</el-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
export default { |
|||
name: "detail", |
|||
components: { |
|||
|
|||
}, |
|||
data() { |
|||
return { |
|||
circleUrl: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png", |
|||
squareUrl: "https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png", |
|||
sizeList: ["large", "medium", "small"], |
|||
size:'large', |
|||
input: '' |
|||
}; |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
|
|||
|
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.btnCon{ |
|||
margin-left: 140px; |
|||
} |
|||
::v-deep .el-input--medium .el-input__inner { |
|||
height: 45px; |
|||
line-height: 45px; |
|||
width: 560px; |
|||
} |
|||
|
|||
.detailCon { |
|||
background: #fff; |
|||
-webkit-box-shadow: 4px 4px 40px rgb(0 0 0 / 5%); |
|||
box-shadow: 4px 4px 40px rgb(0 0 0 / 5%); |
|||
border-color: rgba(0, 0, 0, 0.05); |
|||
border-radius: 12px; |
|||
|
|||
.top { |
|||
background: #F2F2F2; |
|||
color: #006EFF; |
|||
font-size: 18px; |
|||
padding: 20px; |
|||
} |
|||
|
|||
.bottomFlex { |
|||
display: flex; |
|||
} |
|||
|
|||
.bottom { |
|||
|
|||
.item { |
|||
margin-right: 150px; |
|||
} |
|||
|
|||
padding: 40px; |
|||
|
|||
.label { |
|||
color: #999; |
|||
width: 80px; |
|||
margin-right: 60px; |
|||
} |
|||
|
|||
.val {} |
|||
|
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,643 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">{{ $route.meta.title }}</div> |
|||
</div> |
|||
<el-row :gutter="10" class="mb8"> |
|||
|
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
|||
</el-row> |
|||
</div> |
|||
<div class="bg"> |
|||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="96px" |
|||
class="flex form" style="padding:0 20px"> |
|||
<el-form-item label="批次号" prop="batchNo"> |
|||
<el-input size="medium" v-model="queryParams.batchNo" placeholder="请输入批次号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="商户订单号" prop="outTradeNo"> |
|||
<el-input size="medium" v-model="queryParams.outTradeNo" placeholder="请输入商户订单号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="平台订单号" prop="noOrder"> |
|||
<el-input size="medium" v-model="queryParams.noOrder" placeholder="请输入平台订单号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="商户名称" prop="storeName"> |
|||
<el-input size="medium" v-model="queryParams.storeName" placeholder="请输入商户名称" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="开户名" prop="acctName"> |
|||
<el-input size="medium" v-model="queryParams.acctName" placeholder="请输入开户名" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="银行地址" prop="acctId"> |
|||
<el-input size="medium" v-model="queryParams.acctId" placeholder="请输入银行地址" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="身份证号码" prop="certId"> |
|||
<el-input size="medium" v-model="queryParams.certId" placeholder="请输入身份证号码" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="代付状态" prop="orderStatus"> |
|||
<el-select v-model="queryParams.orderStatus" placeholder="请选择代付状态" size="medium"> |
|||
<el-option v-for="dict in dict.type.payment_status" :key="dict.value" :label="dict.label" |
|||
:value="dict.value" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="入金渠道" prop="channelType"> |
|||
<el-select v-model="queryParams.channelType" placeholder="请选择入金渠道" clearable size="medium"> |
|||
<el-option v-for="(item, i) in userLevType" :key="i" :label="item.channelName" |
|||
:value="item.payChannel"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="出金渠道" prop="outChannel"> |
|||
<el-select v-model="queryParams.outChannel" placeholder="请选择出金渠道" clearable size="medium"> |
|||
<el-option v-for="(item, i) in userLevType" :key="i" :label="item.channelName" |
|||
:value="item.payChannel"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="是否发起代付" prop="isPayment"> |
|||
<el-select v-model="queryParams.isPayment" placeholder="请选择是否发起代付" size="medium"> |
|||
<el-option v-for="dict in dict.type.yes_no" :key="dict.value" :label="dict.label" |
|||
:value="dict.value" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="用户类型" prop="userType"> |
|||
<el-select v-model="queryParams.userType" placeholder="请选择用户类型" size="medium"> |
|||
<el-option v-for="dict in typeCon" :key="dict.value" :label="dict.label" :value="dict.value" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="订单来源" prop="sourceType"> |
|||
<el-select v-model="queryParams.sourceType" placeholder="请选择订单来源" size="medium"> |
|||
<el-option v-for="dict in dict.type.source_type" :key="dict.value" :label="dict.label" |
|||
:value="dict.value" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="代付时间"> |
|||
<el-date-picker v-model="dateRange" style="width: 240px;border-color: #E6F1FF;" |
|||
value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" |
|||
end-placeholder="结束日期" :picker-options="pickerOptions" :unlink-panels="true"></el-date-picker> |
|||
</el-form-item> |
|||
|
|||
<el-form-item> |
|||
<div class="searchTop flexBet" style="align-items: center;"> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<el-button type="primary" icon="" size="medium" @click="handleQuery">搜索</el-button> |
|||
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery">重置</el-button> |
|||
</el-row> |
|||
|
|||
<el-row :gutter="10" class="mb8" style="margin-left:20px"> |
|||
<el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="" size="medium" @click="handleExport" |
|||
v-hasPermi="['record:platform_payment_coin_export']">导出</el-button> |
|||
</el-col> |
|||
<!-- <el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="" size="medium" @click="handleSay" |
|||
v-hasPermi="['record:platform_payment_audit_save']">审核</el-button> |
|||
</el-col> --> |
|||
</el-row> |
|||
</div> |
|||
|
|||
</el-form-item> |
|||
|
|||
|
|||
|
|||
</el-form> |
|||
<el-table stripe v-loading="loading" :data="infoList"> |
|||
<!-- <el-table-column type="selection" width="55" align="center" :selectable="selectable" /> @selection-change="handleSelectionChange" --> |
|||
<el-table-column :label="'批次号\n渠道订单号'" align="center" prop="storeNo" min-width="230"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.batchNo }}<br /> |
|||
{{ scope.row.transactionId }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'商户订单号\n平台订单号'" align="center" prop="storeNo" min-width="180"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.outTradeNo }}<br /> |
|||
{{ scope.row.noOrder }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column :label="'开户名\n身份证号'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.acctName }}<br /> |
|||
{{ scope.row.certId }} |
|||
</template> |
|||
</el-table-column> --> |
|||
<el-table-column label="用户类型" align="center" prop="userType" min-width="120"> |
|||
<template slot-scope="scope"> |
|||
<el-tag :type=" |
|||
scope.row.userType == 'store' |
|||
? 'success' : 'primary' |
|||
"> |
|||
{{ scope.row.userType == 'store' ? '商户' : '代理商' }} |
|||
</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="'币种名称'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.bankName }} |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column :label="'收款地址'" align="center" prop="storeNo" min-width="180"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.acctId }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'代付金额\n代付手续费'" align="center" prop="storeNo"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.tranAmt }}<br /> |
|||
{{ scope.row.tranFee }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'代付状态\n是否发起'" align="center" prop="storeNo"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.orderStatusName }}<br /> |
|||
{{ scope.row.isPayment == 'yes' ? '已发起' : '未发起' }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'对公对私\n出款账号'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.flagCard == 'private_account' ? "对私" : '对公' }}<br /> |
|||
{{ scope.row.accountNo }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'入金渠道\n出金渠道'" align="center" prop="storeNo" min-width="120"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.payChannelName }}<br /> |
|||
{{ scope.row.outChannelName }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'商户名称\n代付时间'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.storeName }}<br /> |
|||
{{ scope.row.createTime }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'订单来源'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.sourceType == 's_manual' ? '手工提单' : 'API下发' }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="代付信息" align="center" prop="orderMsg" /> |
|||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" |
|||
min-width="80"> |
|||
<template slot-scope="scope"> |
|||
<el-button v-if="scope.row.orderStatus == 'processing' || scope.row.orderStatus == 'processreview'" |
|||
size="small" type="text" style="color: #006EFF;" @click="handleOrder(scope.row)" |
|||
v-hasPermi="['record:platform_payment_coin_handle']">手工处理</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" |
|||
:limit.sync="queryParams.pageSize" @pagination="getList" /> |
|||
</div> |
|||
|
|||
<!-- 处理当前代付订单 --> |
|||
<el-dialog v-dialogDrag :close-on-click-modal="false" title="信息" :visible.sync="isShowDetail" width="23%" |
|||
append-to-body> |
|||
<div class="m20">确认要处理当前代付订单?</div> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="115px"> |
|||
<el-form-item label="交易凭证hash" prop="txId"> |
|||
<el-input v-model="form.txId" placeholder="请输入交易凭证hash" /> |
|||
</el-form-item> |
|||
<el-form-item label="出账地址" prop="fromAddress"> |
|||
<el-input v-model="form.fromAddress" placeholder="请输入出账地址" /> |
|||
</el-form-item> |
|||
<el-form-item label="验证码" prop="googleCode"> |
|||
<el-input v-model="form.googleCode" placeholder="请输入谷歌动态验证码" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-button type="primary" icon="" size="small" @click="submitForm('processsuccess')">置为成功</el-button> |
|||
<el-button plain size="small" @click="submitForm('processfailed')">置为取消</el-button> |
|||
<el-button plain size="small" @click="cancel">取消</el-button> |
|||
</el-dialog> |
|||
|
|||
<!-- 审核 --> |
|||
<el-dialog v-dialogDrag title="代付审核" :visible.sync="isShowJudege" width="600px" append-to-body |
|||
:close-on-click-modal="false" :before-close="cancel"> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> |
|||
<el-form-item label="审核状态" prop="auditStatus"> |
|||
<el-radio-group v-model="form.auditStatus" @change="getValue"> |
|||
<el-radio v-for="(item, i) in statusOptions" :key="i" :value="item.label" |
|||
:label="item.value">{{ item.label }}</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
<el-form-item label="谷歌验证码" prop="googleCode"> |
|||
<el-input v-model="form.googleCode" placeholder="请输入谷歌动态验证码" /> |
|||
</el-form-item> |
|||
<el-form-item label="驳回原因" prop="rejectReason" v-if="form.auditStatus == 'processreject'"> |
|||
<el-input v-model="form.rejectReason" placeholder="请输入驳回原因" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="primary" @click="submitForm('judge')">确 定</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { common_api, platform_payment_list } from "@/api/form"; |
|||
|
|||
export default { |
|||
name: "PkAdWeiList", |
|||
dicts: ['pay_status', 'source_type', 'yes_no', 'payment_status'], |
|||
data() { |
|||
return { |
|||
typeCon: [ |
|||
{ |
|||
label: '商户', |
|||
value: 'store', |
|||
}, |
|||
{ |
|||
label: '代理商', |
|||
value: 'agent', |
|||
}, |
|||
], |
|||
statusOptions: [ |
|||
{ |
|||
label: '通过', |
|||
value: 'processing', |
|||
}, |
|||
{ |
|||
label: '驳回', |
|||
value: 'processreject', |
|||
}, |
|||
], |
|||
detailData: {}, |
|||
isShowDetail: false, |
|||
isShowJudege: false, |
|||
pickerOptions: { |
|||
shortcuts: [ |
|||
{ |
|||
text: '最近一天', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近三天', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 3); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近一周', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近一个月', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近三个月', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 3); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近半年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 6); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近一年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 12); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近两年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 24); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近三年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 36); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
] |
|||
}, |
|||
userLevType: [ |
|||
|
|||
], |
|||
sortLevType: [], |
|||
// 选中数组 |
|||
ids: [], |
|||
// 非单个禁用 |
|||
single: true, |
|||
// 非多个禁用 |
|||
multiple: true, |
|||
dateRange: [], |
|||
// 新增广告图片地址 |
|||
imageUrl: "", |
|||
// 遮罩层 |
|||
loading: true, |
|||
// 导出遮罩层 |
|||
exportLoading: false, |
|||
// 选中数组 |
|||
ids: [], |
|||
paymentIds: [], |
|||
// 非多个禁用 |
|||
multiple: true, |
|||
// 显示搜索条件 |
|||
showSearch: true, |
|||
// 总条数 |
|||
total: 0, |
|||
// 广告表格数据 |
|||
infoList: [], |
|||
// 弹出层标题 |
|||
title: "", |
|||
// 是否显示弹出层 |
|||
open: false, |
|||
// 查询参数 |
|||
queryParams: { |
|||
pageNum: 1, |
|||
pageSize: 20, |
|||
sourceType: null, |
|||
isPayment: null, |
|||
outChannel: null, |
|||
channelType: null, |
|||
orderStatus: null, |
|||
certId: null, |
|||
acctId: null, |
|||
acctName: null, |
|||
storeName: null, |
|||
noOrder: null, |
|||
outTradeNo: null, |
|||
batchNo: null, |
|||
userType: null, |
|||
|
|||
}, |
|||
|
|||
// 表单参数 |
|||
form: { |
|||
|
|||
}, |
|||
// 表单校验 |
|||
rules: { |
|||
// txId: [ |
|||
// { required: true, message: "请输入交易成功hash", trigger: "blur" }, |
|||
// ], |
|||
// fromAddress: [ |
|||
// { required: true, message: "请输入出账地址", trigger: "blur" }, |
|||
// ], |
|||
auditStatus: [ |
|||
{ required: true, message: "请选择审核状态", trigger: "blur" }, |
|||
], |
|||
googleCode: [ |
|||
{ required: true, message: "请输入谷歌动态验证码", trigger: "blur" }, |
|||
], |
|||
rejectReason: [ |
|||
{ required: true, message: "请输入驳回原因", trigger: "blur" }, |
|||
], |
|||
} |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
this.init(); |
|||
|
|||
}, |
|||
methods: { |
|||
getValue(e) { |
|||
this.$forceUpdate() |
|||
}, |
|||
selectable(row, rowIndex) { |
|||
//索引是从0开始,条件1是指只有第2行数据不被禁用 |
|||
if (row.orderStatus == 'processreview') { |
|||
return true; //不禁用 |
|||
} else { |
|||
return false; //禁用 |
|||
} |
|||
}, |
|||
/** 手工处理 */ |
|||
handleOrder(row) { |
|||
this.reset() |
|||
this.detailData = row |
|||
this.isShowDetail = true |
|||
}, |
|||
// 审核 |
|||
handleSay() { |
|||
if (!this.paymentIds.length) { |
|||
this.$message.error('请选择要审核的数据') |
|||
return; |
|||
} |
|||
this.isShowJudege = true |
|||
this.form.auditStatus = 'processing' |
|||
}, |
|||
init() { |
|||
common_api.payChannelAll().then((response) => { |
|||
this.userLevType = response.data |
|||
}); |
|||
common_api.payTypeAll().then((response) => { |
|||
this.sortLevType = response.data |
|||
}); |
|||
}, |
|||
/** 导出按钮操作 */ |
|||
handleExport() { |
|||
const queryParams = this.queryParams; |
|||
this.$confirm("是否确认导出代付流水?", "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning", |
|||
}) |
|||
.then(function () { |
|||
return platform_payment_list.uexport(queryParams); |
|||
}) |
|||
.then((response) => { |
|||
this.download(response.msg); |
|||
this.queryParams.pageNum = 1; |
|||
this.queryParams.pageSize = 20; |
|||
}); |
|||
}, |
|||
// 多选框选中数据 |
|||
handleSelectionChange(selection) { |
|||
this.ids = selection.map(item => item.storeId) |
|||
this.paymentIds = selection.map(item => item.batchNo) |
|||
this.single = selection.length != 1 |
|||
this.multiple = !selection.length |
|||
}, |
|||
getList() { |
|||
this.loading = true; |
|||
platform_payment_list |
|||
.ulistInfo(this.addSESDateRange(this.queryParams, this.dateRange)) |
|||
.then((response) => { |
|||
this.infoList = response.rows; |
|||
this.total = Number(response.total); |
|||
this.loading = false; |
|||
}); |
|||
}, |
|||
// 取消按钮 |
|||
cancel() { |
|||
this.open = false; |
|||
this.isShowDetail = false; |
|||
this.isShowJudege = false |
|||
this.reset(); |
|||
}, |
|||
// 表单重置 |
|||
reset() { |
|||
this.form = {}; |
|||
this.resetForm("form"); |
|||
}, |
|||
/** 搜索按钮操作 */ |
|||
handleQuery() { |
|||
this.queryParams.pageNum = 1; |
|||
this.getList(); |
|||
}, |
|||
/** 重置按钮操作 */ |
|||
resetQuery() { |
|||
this.dateRange = []; |
|||
this.resetForm("queryForm"); |
|||
this.handleQuery(); |
|||
}, |
|||
/** 新增按钮操作 */ |
|||
handleAdd() { |
|||
this.reset(); |
|||
this.open = true; |
|||
this.title = "添加广告位信息"; |
|||
}, |
|||
/** 修改按钮操作 */ |
|||
handleUpdate(row) { |
|||
this.reset(); |
|||
const id = row.id || this.ids; |
|||
pkUserInfo.getInfo(id).then((response) => { |
|||
this.form = response.data; |
|||
this.open = true; |
|||
this.title = "修改广告位信息"; |
|||
}); |
|||
}, |
|||
/** 提交按钮 */ |
|||
submitForm(type) { |
|||
if (!this.form.googleCode) { |
|||
this.$message.error('请输入谷歌动态验证码') |
|||
return; |
|||
} |
|||
if (type == 'processsuccess' && !this.form.txId) { |
|||
this.$message.error('请输入交易凭证hash') |
|||
return; |
|||
} |
|||
if (type == 'processsuccess' && !this.form.fromAddress) { |
|||
this.$message.error('请输入出账地址') |
|||
return; |
|||
} |
|||
|
|||
this.$refs["form"].validate((valid) => { |
|||
if (valid) { |
|||
if (type == 'judge') { |
|||
const loading = this.$loading({ |
|||
lock: true, |
|||
text: `正在审核`, |
|||
spinner: "el-icon-loading", |
|||
background: "rgba(0, 0, 0, 0.7)", |
|||
}); |
|||
this.form.paymentIds = this.paymentIds.join(',') |
|||
platform_payment_list.platform_payment_audit_save(this.form).then((response) => { |
|||
loading.close(); |
|||
this.isShowJudege = false; |
|||
this.msgSuccess("审核成功"); |
|||
this.getList(); |
|||
}).catch(() => { |
|||
loading.close(); |
|||
this.isShowJudege = false; |
|||
}) |
|||
} else { |
|||
const loading = this.$loading({ |
|||
lock: true, |
|||
text: `正在手动处理`, |
|||
spinner: "el-icon-loading", |
|||
background: "rgba(0, 0, 0, 0.7)", |
|||
}); |
|||
let form = { |
|||
id: this.detailData.id, |
|||
status: type, |
|||
googleCode: this.form.googleCode, |
|||
fromAddress: this.form.fromAddress, |
|||
txId: this.form.txId, |
|||
} |
|||
platform_payment_list.platform_payment_coin_handle(form).then((response) => { |
|||
loading.close(); |
|||
this.isShowDetail = false; |
|||
this.msgSuccess("处理成功"); |
|||
this.getList(); |
|||
}).catch(() => { |
|||
loading.close(); |
|||
this.isShowDetail = false; |
|||
}) |
|||
} |
|||
|
|||
} |
|||
}); |
|||
}, |
|||
|
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped lang="scss"> |
|||
::v-deep .el-dialog__body { |
|||
padding: 20px 20px; |
|||
} |
|||
|
|||
::v-deep .el-dialog__headerbtn { |
|||
top: 10px; |
|||
} |
|||
|
|||
::v-deep .el-dialog__header { |
|||
background: #F8F8F8; |
|||
padding: 8px; |
|||
|
|||
.el-dialog__title { |
|||
font-size: 14px; |
|||
} |
|||
} |
|||
|
|||
::v-deep .el-dialog:not(.is-fullscreen) { |
|||
margin-top: 33vh !important; |
|||
} |
|||
</style> |
@ -0,0 +1,747 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">{{ $route.meta.title }}</div> |
|||
</div> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
|||
</el-row> |
|||
</div> |
|||
<div class="bg"> |
|||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="86px" |
|||
class="flex form" style="padding:0 20px"> |
|||
<el-form-item label="商户订单号" prop="outTradeNo"> |
|||
<el-input size="medium" v-model="queryParams.outTradeNo" placeholder="请输入商户订单号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="平台订单号" prop="orderNo"> |
|||
<el-input size="medium" v-model="queryParams.orderNo" placeholder="请输入平台订单号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="交易hash" prop="transactionId"> |
|||
<el-input size="medium" v-model="queryParams.transactionId" placeholder="请输入交易hash" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="支付商户号" prop="mchId"> |
|||
<el-input size="medium" v-model="queryParams.mchId" placeholder="请输入支付商户号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> --> |
|||
<!-- <el-form-item label="支付商户名" prop="mchName"> |
|||
<el-input size="medium" v-model="queryParams.mchName" placeholder="请输入支付商户名" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> --> |
|||
<el-form-item label="商户名称" prop="storeName"> |
|||
<el-input size="medium" v-model="queryParams.storeName" placeholder="请输入商户名称" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<!-- <el-form-item label="商户编号" prop="storeNo"> |
|||
<el-input size="medium" v-model="queryParams.storeNo" placeholder="请输入商户编号" |
|||
@keyup.enter.native="handleQuery" style="width: 215px;border-color: #E6F1FF;" /> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="订单状态" prop="orderStatus"> |
|||
<el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" size="medium"> |
|||
<el-option v-for="dict in dict.type.pay_status" :key="dict.value" :label="dict.label" |
|||
:value="dict.value" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="结算状态" prop="settleStatus"> |
|||
<el-select v-model="queryParams.settleStatus" placeholder="请选择结算状态" clearable size="medium"> |
|||
<el-option v-for="(item, i) in settleStatusCon" :key="i" :label="item.label" |
|||
:value="item.value"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="支付渠道" prop="channelType"> |
|||
<el-select v-model="queryParams.channelType" placeholder="请选择支付渠道" clearable size="medium"> |
|||
<el-option v-for="(item, i) in userLevType" :key="i" :label="item.channelName" |
|||
:value="item.payChannel"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="支付类型" prop="payType"> |
|||
<el-select v-model="queryParams.payType" placeholder="请选择支付类型" clearable size="medium"> |
|||
<el-option v-for="(item, i) in sortLevType" :key="i" :label="item.typeName" |
|||
:value="item.payType"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="交易时间"> |
|||
<el-date-picker v-model="dateRange" style="width: 240px;border-color: #E6F1FF;" |
|||
value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" |
|||
end-placeholder="结束日期" :picker-options="pickerOptions" :unlink-panels="true"></el-date-picker> |
|||
</el-form-item> |
|||
|
|||
<el-form-item> |
|||
<div class="searchTop flexBet" style="align-items: center;"> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<el-button type="primary" icon="" size="medium" @click="handleQuery">搜索</el-button> |
|||
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery">重置</el-button> |
|||
</el-row> |
|||
|
|||
<el-row :gutter="10" class="mb8" style="margin-left:20px"> |
|||
<el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="" size="medium" @click="handleExport" |
|||
v-hasPermi="['order:rechargeRecord:exportCoin']">导出</el-button> |
|||
</el-col> |
|||
<!-- <el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="" size="medium" @click="handleSay" :disabled="single" |
|||
v-hasPermi="['order:rechargeRecord:reissueNotice']">补发通知</el-button> |
|||
</el-col> --> |
|||
</el-row> |
|||
</div> |
|||
|
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table stripe v-loading="loading" :data="infoList"> |
|||
<!-- <el-table-column type="selection" width="55" align="center" /> @selection-change="handleSelectionChange" --> |
|||
<el-table-column :label="'交易时间\n结算时间'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.createTime }}<br /> |
|||
{{ scope.row.storeSettleTime }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'交易状态\n结算状态'" align="center" prop="storeNo" min-width="120"> |
|||
<template slot-scope="scope"> |
|||
<el-tag :type=" |
|||
scope.row.orderStatus == 'pay_unpaid' ? 'warning' : scope.row.orderStatus == 'pay_success' ? 'success' : |
|||
scope.row.orderStatus == 'pay_failure' ? 'danger' : scope.row.orderStatus == 'pay_processing' ? 'warning' : 'primary' |
|||
"> |
|||
{{ scope.row.orderStatus == 'pay_unpaid' ? '未支付' : scope.row.orderStatus == 'pay_success' ? |
|||
'支付成功' : |
|||
scope.row.orderStatus == 'pay_failure' ? '支付失败' : scope.row.orderStatus == |
|||
'pay_processing' ? '支付处理中' : '已关闭' }} |
|||
</el-tag> |
|||
<br /> |
|||
<el-tag :type=" |
|||
scope.row.storeSettle == 'yes' ? 'success' : scope.row.storeSettle == 'no' || !scope.row.storeSettle ? 'danger' : |
|||
scope.row.storeSettle == 'error' ? 'warning' : 'primary' |
|||
"> |
|||
{{ scope.row.storeSettle == 'yes' ? '已结算' : scope.row.storeSettle == 'no' || |
|||
!scope.row.storeSettle ? '未结算' : |
|||
scope.row.storeSettle == 'error' ? '结算失败' : '部分结算' }} |
|||
</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'商户订单号\n平台订单号'" align="center" prop="storeNo" min-width="160"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.outTradeNo }}<br /> |
|||
{{ scope.row.orderNo }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="交易hash" align="center" prop="transactionId" min-width="150" /> |
|||
<el-table-column :label="'商户名称\n商户编号'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.storeName }}<br /> |
|||
{{ scope.row.storeNo }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'商户名\n商户号'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.mchName }}<br /> |
|||
{{ scope.row.mchId }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column :label="'商户姓名\n商户手机'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.name }}<br /> |
|||
{{ scope.row.mobile }} |
|||
</template> |
|||
</el-table-column> --> |
|||
<el-table-column :label="'交易金额\n实付金额\n到账金额'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.tranAmt }}<br /> |
|||
{{ scope.row.payAmt }}<br /> |
|||
{{ scope.row.realAmt }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'手续费率(%)\n通道费率(%)'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ NumberMul(scope.row.rate, 100) }}%<br /> |
|||
{{ NumberMul(scope.row.channelRate, 100) }}% |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column :label="'渠道类型\n支付类型'" align="center" prop="storeNo" min-width="150"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.channelType }}<br /> |
|||
{{ scope.row.cardType == 0 ? '借记卡' : '贷记卡' }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column label="商户类型" align="center" prop="divideType" /> --> |
|||
<!-- <el-table-column label="订单描述" align="center" prop="orderMsg" /> --> |
|||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" |
|||
min-width="80"> |
|||
<template slot-scope="scope"> |
|||
<el-button size="small" type="text" style="color: #006EFF;" |
|||
@click="handleViewMy(scope.row)">详情</el-button> |
|||
|
|||
<el-button v-if="scope.row.orderStatus == 'pay_unpaid' || scope.row.orderStatus == 'pay_processing'" |
|||
size="small" type="text" style="color: #006EFF;" @click="handleOrder(scope.row)" |
|||
v-hasPermi="['order:rechargeRecord:payHandleCoin']">手工处理</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" |
|||
:limit.sync="queryParams.pageSize" @pagination="getList" /> |
|||
</div> |
|||
|
|||
<!-- 处理当前代付订单 --> |
|||
<el-dialog v-dialogDrag :close-on-click-modal="false" title="信息" :visible.sync="isShowDetail" width="23%" |
|||
append-to-body> |
|||
<div class="m20">确认要处理当前支付订单?</div> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="105px"> |
|||
<el-form-item label="hash" prop="hash"> |
|||
<el-input v-model="form.hash" placeholder="请输入hash" /> |
|||
</el-form-item> |
|||
<el-form-item label="出账地址" prop="fromAddress"> |
|||
<el-input v-model="form.fromAddress" placeholder="请输入出账地址" /> |
|||
</el-form-item> |
|||
<el-form-item label="验证码" prop="googleCode"> |
|||
<el-input v-model="form.googleCode" placeholder="请输入谷歌动态验证码" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-button type="primary" icon="" size="small" @click="submitForm('pay_success')">置为成功</el-button> |
|||
<el-button plain size="small" @click="submitForm('pay_failure')">置为取消</el-button> |
|||
<el-button plain size="small" @click="cancel">取消</el-button> |
|||
</el-dialog> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
<!-- 详情 --> |
|||
<el-dialog v-dialogDrag :close-on-click-modal="false" :title="detailTitle" :visible.sync="isShowDetailMy" |
|||
width="73%" append-to-body> |
|||
<el-form label-width="142px" :label-suffix="':'"> |
|||
<div class="card-detail flex"> |
|||
<div> |
|||
|
|||
<el-form-item label="平台订单号"> |
|||
{{ detailInfoList.orderNo }} |
|||
</el-form-item> |
|||
<el-form-item label='交易状态'> |
|||
<el-tag v-if="detailInfoList.orderStatus" :type=" |
|||
detailInfoList.orderStatus == 'pay_unpaid' ? 'warning' : detailInfoList.orderStatus == 'pay_success' ? 'success' : |
|||
detailInfoList.orderStatus == 'pay_failure' ? 'danger' : detailInfoList.orderStatus == 'pay_processing' ? 'warning' : 'primary' |
|||
"> |
|||
{{ detailInfoList.orderStatus == 'pay_unpaid' ? '未支付' : detailInfoList.orderStatus == |
|||
'pay_success' ? |
|||
'支付成功' : |
|||
detailInfoList.orderStatus == 'pay_failure' ? '支付失败' : detailInfoList.orderStatus == |
|||
'pay_processing' ? '支付处理中' : '已关闭' }} |
|||
</el-tag> |
|||
</el-form-item> |
|||
<el-form-item v-if="detailInfoList.sourceType" :label="'订单来源'"> |
|||
{{ detailInfoList.sourceType == 's_manual' ? '手工提单' : 'API下发' }} |
|||
</el-form-item> |
|||
<el-form-item label="商户id"> |
|||
{{ detailInfoList.storeId }} |
|||
</el-form-item> |
|||
<el-form-item label="商户订单号"> |
|||
{{ detailInfoList.outTradeNo }} |
|||
</el-form-item> |
|||
<el-form-item label="成功交易金额"> |
|||
{{ detailInfoList.payAmt }} |
|||
</el-form-item> |
|||
<el-form-item label="内充渠道"> |
|||
{{ detailInfoList.payChannelName }} |
|||
</el-form-item> |
|||
<el-form-item label="支付时间"> |
|||
{{ detailInfoList.payTime }} |
|||
</el-form-item> |
|||
<el-form-item label="支付类型"> |
|||
{{ detailInfoList.payTypeName }} |
|||
</el-form-item> |
|||
<!-- <el-form-item label="备注"> |
|||
{{ detailInfoList.attach }} |
|||
</el-form-item> --> |
|||
<el-form-item label="订单描述"> |
|||
{{ detailInfoList.orderMsg }} |
|||
</el-form-item> |
|||
<!-- <el-form-item label="keyId"> |
|||
{{ detailInfoList.keyId }} |
|||
</el-form-item> --> |
|||
</div> |
|||
<div> |
|||
<el-form-item label="通道手续费金额"> |
|||
{{ detailInfoList.poundageAmt }} |
|||
</el-form-item> |
|||
<el-form-item label="通道手续费率"> |
|||
{{ NumberMul(detailInfoList.poundageRate, 100) }}% |
|||
</el-form-item> |
|||
<el-form-item label="商户名称"> |
|||
{{ detailInfoList.storeName }} |
|||
</el-form-item> |
|||
<el-form-item label="商户编号"> |
|||
{{ detailInfoList.storeNo }} |
|||
</el-form-item> |
|||
<el-form-item :label="'结算状态'"> |
|||
<el-tag v-if="detailInfoList.storeSettle" :type=" |
|||
detailInfoList.storeSettle == 'yes' ? 'success' : detailInfoList.storeSettle == 'no' || !detailInfoList.storeSettle ? 'danger' : |
|||
detailInfoList.storeSettle == 'error' ? 'warning' : 'primary' |
|||
"> |
|||
{{ detailInfoList.storeSettle == 'yes' ? '已结算' : detailInfoList.storeSettle == 'no' || |
|||
!detailInfoList.storeSettle ? '未结算' : |
|||
detailInfoList.storeSettle == 'error' ? '结算失败' : '部分结算' }} |
|||
</el-tag> |
|||
</el-form-item> |
|||
<el-form-item label="结算时间"> |
|||
{{ detailInfoList.storeSettleTime }} |
|||
</el-form-item> |
|||
<el-form-item label="商户类型"> |
|||
<el-tag v-if="detailInfoList.storeType" :type=" |
|||
detailInfoList.storeType == 'my_store' |
|||
? 'success' |
|||
: detailInfoList.storeType == 'directly_under' ? 'primary' : 'danger' |
|||
"> |
|||
{{ detailInfoList.storeType == 'my_store' |
|||
? '代理自己商户' |
|||
: detailInfoList.storeType == 'directly_under' ? '平台直属商户' : '代理下级商户' }} |
|||
</el-tag> |
|||
</el-form-item> |
|||
<el-form-item label="变动金额"> |
|||
{{ detailInfoList.tranAmt }} |
|||
</el-form-item> |
|||
<el-form-item label="交易hash"> |
|||
{{ detailInfoList.transactionId }} |
|||
</el-form-item> |
|||
<el-form-item label="用户id"> |
|||
{{ detailInfoList.userId }} |
|||
</el-form-item> |
|||
<!-- <el-form-item label="version"> |
|||
{{ detailInfoList.version }} |
|||
</el-form-item> --> |
|||
|
|||
</div> |
|||
<div> |
|||
<el-form-item label="修改时间"> |
|||
{{ detailInfoList.updateTime }} |
|||
</el-form-item> |
|||
<el-form-item label="创建时间"> |
|||
{{ detailInfoList.createTime }} |
|||
</el-form-item> |
|||
<el-form-item label="商品名称"> |
|||
{{ detailInfoList.productName }} |
|||
</el-form-item> |
|||
<el-form-item label="手续费"> |
|||
{{ detailInfoList.rateAmt }} |
|||
</el-form-item> |
|||
<el-form-item label="充值金额"> |
|||
{{ detailInfoList.realAmt }} |
|||
</el-form-item> |
|||
<el-form-item label="签名方式"> |
|||
{{ detailInfoList.signType }} |
|||
</el-form-item> |
|||
<el-form-item label="银行编号"> |
|||
{{ detailInfoList.bankCode }} |
|||
</el-form-item> |
|||
<el-form-item label="银行ID"> |
|||
{{ detailInfoList.bankId }} |
|||
</el-form-item> |
|||
<el-form-item label="银行卡类型"> |
|||
<el-tag v-if="detailInfoList.cardType" :type=" |
|||
detailInfoList.cardType == 'debit_card' ? 'success' : 'primary' |
|||
"> |
|||
{{ detailInfoList.cardType == 'debit_card' ? '借记卡' : '贷记卡' }} |
|||
</el-tag> |
|||
</el-form-item> |
|||
<el-form-item label="渠道类型"> |
|||
{{ detailInfoList.channelType }} |
|||
</el-form-item> |
|||
<!-- <el-form-item label="charset"> |
|||
{{ detailInfoList.charset }} |
|||
</el-form-item> --> |
|||
</div> |
|||
<div> |
|||
<el-form-item label="商品描述"> |
|||
{{ detailInfoList.productDesc }} |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="费率"> |
|||
{{ NumberMul(detailInfoList.rate, 100) }}% |
|||
</el-form-item> |
|||
<el-form-item label="商户返回地址"> |
|||
{{ detailInfoList.backUrl }} |
|||
</el-form-item> |
|||
<el-form-item label="商户号"> |
|||
{{ detailInfoList.mchId }} |
|||
</el-form-item> |
|||
<el-form-item label="支付商户名"> |
|||
{{ detailInfoList.mchName }} |
|||
</el-form-item> |
|||
<el-form-item label="请求类型"> |
|||
{{ detailInfoList.mediaType }} |
|||
</el-form-item> |
|||
<el-form-item label="手机号码"> |
|||
{{ detailInfoList.mobile }} |
|||
</el-form-item> |
|||
<el-form-item label="用户名"> |
|||
{{ detailInfoList.name }} |
|||
</el-form-item> |
|||
<el-form-item label="二维码图片"> |
|||
<el-image style="width: 100px; height: 100px" v-if="detailInfoList.qrcodeImg" |
|||
:src="detailInfoList.qrcodeImg" @click="previewImage(detailInfoList.qrcodeImg)" |
|||
:preview-src-list="srcList"> |
|||
<div slot="placeholder"> |
|||
<div style="margin-top: 40px"> |
|||
加载中<i class="el-icon-loading" /> |
|||
</div> |
|||
</div> |
|||
</el-image> |
|||
|
|||
<el-image v-if="!detailInfoList.qrcodeImg" class="image-slot"> |
|||
<div slot="error"> |
|||
无 |
|||
</div> |
|||
</el-image> |
|||
|
|||
</el-form-item> |
|||
|
|||
<!-- <el-form-item label="二维码地址"> |
|||
{{ detailInfoList.qrcodeUrl }} |
|||
</el-form-item> --> |
|||
<el-form-item label="回调地址"> |
|||
{{ detailInfoList.notifyUrl }} |
|||
</el-form-item> |
|||
</div> |
|||
</div> |
|||
</el-form> |
|||
</el-dialog> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { common_api, payOrder } from "@/api/form"; |
|||
|
|||
export default { |
|||
name: "PkAdWeiList", |
|||
dicts: ['pay_status'], |
|||
data() { |
|||
return { |
|||
// 详情 |
|||
detailInfoList: { |
|||
rate: '', |
|||
poundageRate: '', |
|||
agentRate: '', |
|||
}, |
|||
pickerOptions: { |
|||
shortcuts: [ |
|||
{ |
|||
text: '最近一天', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近三天', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 3); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近一周', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近一个月', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近三个月', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 3); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近半年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 6); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近一年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 12); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近两年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 24); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
{ |
|||
text: '最近三年', |
|||
onClick(picker) { |
|||
const end = new Date(); |
|||
const start = new Date(); |
|||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30 * 36); |
|||
picker.$emit('pick', [start, end]); |
|||
} |
|||
}, |
|||
] |
|||
}, |
|||
userLevType: [ |
|||
|
|||
], |
|||
sortLevType: [], |
|||
|
|||
settleStatusCon: [ |
|||
{ |
|||
label: '已结算', |
|||
value: 'yes', |
|||
}, |
|||
{ |
|||
label: '未结算', |
|||
value: 'no', |
|||
}, { |
|||
label: '部分结算', |
|||
value: 'part', |
|||
}, |
|||
], |
|||
// 非单个禁用 |
|||
single: true, |
|||
// 非多个禁用 |
|||
multiple: true, |
|||
dateRange: [], |
|||
// 新增广告图片地址 |
|||
imageUrl: "", |
|||
// 遮罩层 |
|||
loading: true, |
|||
// 导出遮罩层 |
|||
exportLoading: false, |
|||
// 选中数组 |
|||
ids: [], |
|||
// 非单个禁用 |
|||
single: true, |
|||
// 非多个禁用 |
|||
multiple: true, |
|||
// 显示搜索条件 |
|||
showSearch: true, |
|||
// 总条数 |
|||
total: 0, |
|||
// 广告表格数据 |
|||
infoList: [], |
|||
// 弹出层标题 |
|||
title: "", |
|||
// 是否显示弹出层 |
|||
open: false, |
|||
// 查询参数 |
|||
queryParams: { |
|||
pageNum: 1, |
|||
pageSize: 20, |
|||
userId: null, |
|||
storeId: null, |
|||
storeNo: null, |
|||
outTradeNo: null, |
|||
orderNo: null, |
|||
transactionId: null, |
|||
mchId: null, |
|||
mchName: null, |
|||
orderStatus: null, |
|||
storeName: null, |
|||
settleStatus: null, |
|||
payType: null, |
|||
channelType: null, |
|||
}, |
|||
|
|||
// 表单参数 |
|||
form: {}, |
|||
// 表单校验 |
|||
rules: { |
|||
googleCode: [ |
|||
{ required: true, message: "请输入谷歌动态验证码", trigger: "blur" }, |
|||
], |
|||
}, |
|||
detailData: {}, |
|||
isShowDetail: false, |
|||
// 详情 |
|||
isShowDetailMy: false, |
|||
detailTitle: '', |
|||
// 预览 |
|||
srcList: ['https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg'], |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
this.init(); |
|||
}, |
|||
methods: { |
|||
// 预览图片 |
|||
previewImage(abUrl) { |
|||
this.srcList[0] = abUrl; |
|||
}, |
|||
// 查看详情 |
|||
handleViewMy(row) { |
|||
this.reset(); |
|||
this.detailInfoList = row; |
|||
this.isShowDetailMy = true; |
|||
this.detailTitle = "订单流水详情"; |
|||
}, |
|||
/** 手工处理 */ |
|||
handleOrder(row) { |
|||
this.reset() |
|||
this.detailData = row |
|||
this.isShowDetail = true |
|||
}, |
|||
// 通知 |
|||
handleSay() { |
|||
this.loading = true; |
|||
payOrder.reissueNotice(this.ids[0]).then((response) => { |
|||
if (response.code == 200) { |
|||
this.$message.success('补发成功') |
|||
this.loading = false; |
|||
} |
|||
}).catch(() => { |
|||
this.loading = false; |
|||
}); |
|||
}, |
|||
init() { |
|||
common_api.payChannelAll().then((response) => { |
|||
this.userLevType = response.data |
|||
}); |
|||
common_api.payTypeAll().then((response) => { |
|||
this.sortLevType = response.data |
|||
}); |
|||
}, |
|||
/** 导出按钮操作 */ |
|||
handleExport() { |
|||
const queryParams = this.queryParams; |
|||
this.$confirm("是否确认导出订单流水?", "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning", |
|||
}) |
|||
.then(function () { |
|||
return payOrder.exportCoin(queryParams); |
|||
}) |
|||
.then((response) => { |
|||
this.download(response.msg); |
|||
this.queryParams.pageNum = 1; |
|||
this.queryParams.pageSize = 20; |
|||
}); |
|||
}, |
|||
// 多选框选中数据 |
|||
handleSelectionChange(selection) { |
|||
this.ids = selection.map(item => item.keyId) |
|||
this.single = selection.length != 1 |
|||
this.multiple = !selection.length |
|||
}, |
|||
getList() { |
|||
this.loading = true; |
|||
payOrder |
|||
.urechargeRecord(this.addSESDateRange(this.queryParams, this.dateRange)) |
|||
.then((response) => { |
|||
this.infoList = response.rows; |
|||
this.total = Number(response.total); |
|||
this.loading = false; |
|||
}); |
|||
}, |
|||
// 取消按钮 |
|||
cancel() { |
|||
this.open = false; |
|||
this.isShowDetail = false |
|||
this.reset(); |
|||
}, |
|||
// 表单重置 |
|||
reset() { |
|||
this.form = {}; |
|||
this.resetForm("form"); |
|||
}, |
|||
/** 搜索按钮操作 */ |
|||
handleQuery() { |
|||
this.queryParams.pageNum = 1; |
|||
this.getList(); |
|||
}, |
|||
/** 重置按钮操作 */ |
|||
resetQuery() { |
|||
this.dateRange = []; |
|||
this.resetForm("queryForm"); |
|||
this.handleQuery(); |
|||
}, |
|||
/** 提交按钮 */ |
|||
submitForm(type) { |
|||
if (!this.form.googleCode) { |
|||
this.$message.error('请输入谷歌动态验证码') |
|||
return; |
|||
} |
|||
if (type == 'pay_success' && !this.form.hash) { |
|||
this.$message.error('请输入hash') |
|||
return; |
|||
} |
|||
if (type == 'pay_success' && !this.form.fromAddress) { |
|||
this.$message.error('请输入出账地址') |
|||
return; |
|||
} |
|||
this.$refs["form"].validate((valid) => { |
|||
if (valid) { |
|||
const loading = this.$loading({ |
|||
lock: true, |
|||
text: `正在手动处理`, |
|||
spinner: "el-icon-loading", |
|||
background: "rgba(0, 0, 0, 0.7)", |
|||
}); |
|||
let form = { |
|||
id: this.detailData.keyId, |
|||
status: type, |
|||
googleCode: this.form.googleCode, |
|||
hash: this.form.hash, |
|||
fromAddress: this.form.fromAddress |
|||
} |
|||
payOrder.payHandleCoin(form).then((response) => { |
|||
loading.close(); |
|||
this.isShowDetail = false; |
|||
this.msgSuccess("处理成功"); |
|||
this.getList(); |
|||
}).catch(() => { |
|||
loading.close(); |
|||
this.isShowDetail = false; |
|||
}) |
|||
|
|||
} |
|||
}); |
|||
}, |
|||
|
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
::v-deep .el-dialog:not(.is-fullscreen) { |
|||
margin-top: 10vh !important; |
|||
} |
|||
</style> |
@ -0,0 +1,305 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">{{ $route.meta.title }}</div> |
|||
</div> |
|||
</div> |
|||
<!-- v-loading="loading" --> |
|||
<div class="bg"> |
|||
<div class="bottom form controls"> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="140px"> |
|||
<el-form-item label="版本号" prop="version"> |
|||
<el-input v-model="form.version" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="字符集" prop="charset"> |
|||
<el-input v-model="form.charset" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="商户号" prop="spid"> |
|||
<el-input v-model="form.spid" placeholder="" style="width: 315px;border-color: #E6F1FF;" |
|||
v-hasPermi="['pay:test:query']" /> |
|||
</el-form-item> |
|||
<el-form-item label="签名key" prop="payKey"> |
|||
<el-input v-model="form.payKey" placeholder="" style="width: 315px;border-color: #E6F1FF;" |
|||
v-hasPermi="['pay:test:query']" /> |
|||
</el-form-item> |
|||
<el-form-item label="交易金额" prop="tranAmt"> |
|||
<el-input v-model="form.tranAmt" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="支付类型" prop="payType"> |
|||
<el-select v-model="form.payType" placeholder="请选择支付类型" clearable size="medium"> |
|||
<el-option v-for="(item, i) in sortLevType" :key="i" :label="item.typeName" |
|||
:value="item.payType" :disabled="true"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
|
|||
<el-form-item label="回调地址" prop="notifyUrl"> |
|||
<el-input v-model="form.notifyUrl" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="请求类型" prop="mediaType"> |
|||
<el-select v-model="form.mediaType" placeholder="请选择请求类型" clearable size="medium"> |
|||
<el-option v-for="(item, i) in list" :key="i" :label="item.label" |
|||
:value="item.value"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="签名类型" prop="signType"> |
|||
<el-input v-model="form.signType" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="签名" prop="req_data"> |
|||
<el-input v-model="form.req_data" type="textarea" :disabled="true" placeholder="" |
|||
style="width: 315px;border-color: #E6F1FF;" /> |
|||
<el-button type="primary" plain icon="" size="medium" style="color:#fff;margin-left:10px" |
|||
@click="handleSay" v-hasPermi="['pay:test:coinPaySign']">获取签名</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" plain icon="" size="medium" style="color:#fff;margin-left:10px" |
|||
@click="payCode">支付</el-button> |
|||
</el-form-item> |
|||
<el-form-item label="支付响应" prop="resp"> |
|||
<el-input type="textarea" v-model="resMsg" placeholder="" |
|||
style="width:80%;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<!-- <el-form-item> |
|||
<el-button type="primary" plain icon="" :disabled="!this.form.resp" size="medium" |
|||
style="color:#fff;margin-left:10px" @click="getCode">查看二维码</el-button> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<el-dialog v-dialogDrag title="二维码" :visible.sync="open" width="400px" append-to-body :close-on-click-modal="false"> |
|||
<div id="qrCode" ref="qrCodeDiv" class="flex" style="justify-content: center;" v-if="showCode"></div> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="primary" @click="cancel">确 定</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
payTest, |
|||
common_api |
|||
} from "@/api/form"; |
|||
import QRCode from 'qrcodejs2'; |
|||
export default { |
|||
name: "add", |
|||
|
|||
data() { |
|||
return { |
|||
// 返回信息 |
|||
resMsg: null, |
|||
|
|||
showCode: false, |
|||
rules: { |
|||
version: [ |
|||
{ required: true, message: "请输入版本号", trigger: "blur" }, |
|||
], |
|||
charset: [ |
|||
{ required: true, message: "请输入字符集", trigger: "blur" }, |
|||
], |
|||
spid: [ |
|||
{ required: true, message: "请输入商户号", trigger: "blur" }, |
|||
], |
|||
tranAmt: [ |
|||
{ required: true, message: "请输入交易金额", trigger: "blur" }, |
|||
], |
|||
payType: [ |
|||
{ required: true, message: "请选择支付类型", trigger: "blur" }, |
|||
], |
|||
productName: [ |
|||
{ required: true, message: "请输入商品名称", trigger: "blur" }, |
|||
], |
|||
productDesc: [ |
|||
{ required: true, message: "请输入商品描述", trigger: "blur" }, |
|||
], |
|||
attach: [ |
|||
{ required: true, message: "请输入保留字段", trigger: "blur" }, |
|||
], |
|||
notifyUrl: [ |
|||
{ required: true, message: "请输入回调地址", trigger: "blur" }, |
|||
], |
|||
mediaType: [ |
|||
{ required: true, message: "请选择请求类型", trigger: "blur" }, |
|||
], |
|||
}, |
|||
sortLevType: [], |
|||
|
|||
form: { |
|||
resp: null, |
|||
signType: 'MD5', |
|||
backUrl: '/admin/paytest/native', |
|||
notifyUrl: 'http://localhost:8082/pay/nativePayNotify2Store', |
|||
attach: 'test', |
|||
version: '2.0', |
|||
charset: 'UTF-8', |
|||
spid: null, |
|||
payKey: null, |
|||
tranAmt: 1, |
|||
payType: null, |
|||
productName: '商品', |
|||
productDesc: '商品描述', |
|||
req_data: null, |
|||
mediaType: null, |
|||
}, |
|||
list: [ |
|||
{ |
|||
label: 'JSON', |
|||
value: 'json', |
|||
}, |
|||
{ |
|||
label: 'XML', |
|||
value: 'xml', |
|||
} |
|||
], |
|||
radio: '', |
|||
// 遮罩层 |
|||
loading: false, |
|||
dialogVisible: false, |
|||
// 是否显示弹出层 |
|||
open: false, |
|||
|
|||
val: {}, |
|||
infoList: {}, |
|||
// 二维码对象 |
|||
qrcode: null, |
|||
}; |
|||
}, |
|||
|
|||
created() { |
|||
this.getList() |
|||
this.init(); |
|||
}, |
|||
methods: { |
|||
// 表单重置 |
|||
reset() { |
|||
this.form = {}; |
|||
this.resetForm("form"); |
|||
}, |
|||
cancel() { |
|||
this.open = false; |
|||
this.showCode = false; |
|||
}, |
|||
// 查看二维码 |
|||
getCode() { |
|||
this.open = true |
|||
this.showCode = true; |
|||
this.$nextTick(function () { |
|||
new QRCode(this.$refs.qrCodeDiv, { |
|||
text: this.form.resp, |
|||
width: 200, |
|||
height: 200, |
|||
colorDark: "#333333", //二维码颜色 |
|||
colorLight: "#ffffff", //二维码背景色 |
|||
correctLevel: QRCode.CorrectLevel.L//容错率,L/M/H |
|||
}) |
|||
|
|||
}) |
|||
|
|||
}, |
|||
// 代扣支付 |
|||
payCode() { |
|||
if (!this.form.req_data) { |
|||
this.$message.error('请先获取签名'); |
|||
return; |
|||
} |
|||
let form = { |
|||
reqData: this.form.req_data, |
|||
mediaType: this.form.mediaType, |
|||
} |
|||
payTest |
|||
.coinPay(form) |
|||
.then((response) => { |
|||
this.resMsg = response.msg |
|||
let s = JSON.parse(response.msg) |
|||
this.form.resp = s.codeImgUrl |
|||
}); |
|||
}, |
|||
//代扣支付签名 |
|||
handleSay() { |
|||
payTest |
|||
.coinPaySign(this.form) |
|||
.then((response) => { |
|||
this.form.req_data = response.msg |
|||
}); |
|||
}, |
|||
init() { |
|||
common_api.payTypeAll().then((response) => { |
|||
this.sortLevType = response.data |
|||
this.form.payType = this.sortLevType[0].payType |
|||
this.form.mediaType = 'json' |
|||
}); |
|||
}, |
|||
back() { |
|||
this.$router.go(-1) |
|||
}, |
|||
// 获取商户配置 |
|||
getList() { |
|||
this.loading = true; |
|||
payTest |
|||
.paytest() |
|||
.then((response) => { |
|||
// response.data.storeNo response.data.storeKey C1553225808762 127c01e48c11412aadb453cef8fac426 |
|||
this.form.spid = response.data.storeNo |
|||
this.form.payKey = response.data.storeKey |
|||
this.loading = false |
|||
}); |
|||
}, |
|||
/** 提交按钮 */ |
|||
// savePayConfig() { |
|||
// if (!this.infoList.googleCode) { |
|||
// this.$message.error("请填写谷歌动态验证码"); |
|||
// return; |
|||
// } |
|||
// this.loading = true |
|||
// this.infoList.storeId = this.val; |
|||
// this.infoList.id = this.infoList.id < 1 ? null : this.infoList.id; |
|||
// payAgentUser |
|||
// .updateStoreConfig(this.infoList) |
|||
// .then((response) => { |
|||
|
|||
// this.msgSuccess("编辑成功"); |
|||
// this.getList(this.val) |
|||
// this.loading = false; |
|||
// }) |
|||
// .catch((err) => { |
|||
// this.loading = false; |
|||
// }); |
|||
// }, |
|||
|
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
.dialog-footer { |
|||
margin-left: 130px; |
|||
} |
|||
|
|||
.bg { |
|||
padding: 0 0px 30px 0px !important; |
|||
} |
|||
|
|||
.bottom { |
|||
padding: 30px |
|||
} |
|||
|
|||
.top { |
|||
background: #F2F2F2; |
|||
color: #006EFF; |
|||
font-size: 18px; |
|||
padding: 20px; |
|||
} |
|||
</style> |
|||
|
|||
<style></style> |
|||
|
@ -0,0 +1,280 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">{{ $route.meta.title }}</div> |
|||
</div> |
|||
</div> |
|||
<!-- v-loading="loading" --> |
|||
<div class="bg"> |
|||
<div class="bottom form controls"> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="140px"> |
|||
<el-form-item label="版本号" prop="version"> |
|||
<el-input v-model="form.version" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="字符集" prop="charset"> |
|||
<el-input v-model="form.charset" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="商户号" prop="spid"> |
|||
<el-input v-model="form.spid" placeholder="" style="width: 315px;border-color: #E6F1FF;" v-hasPermi="['pay:test:query']" /> |
|||
</el-form-item> |
|||
<el-form-item label="签名key" prop="payKey"> |
|||
<el-input v-model="form.payKey" placeholder="" style="width: 315px;border-color: #E6F1FF;" v-hasPermi="['pay:test:query']" /> |
|||
</el-form-item> |
|||
<el-form-item label="交易金额" prop="tranAmt"> |
|||
<el-input v-model="form.tranAmt" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
|
|||
<!-- <el-form-item label="收款人姓名" prop="acctName"> |
|||
<el-input v-model="form.acctName" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="收款人账号" prop="acctId"> |
|||
<el-input v-model="form.acctId" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="手机号码" prop="mobile"> |
|||
<el-input v-model="form.mobile" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="支行联行号" prop="bankSettleNo"> |
|||
<el-input v-model="form.bankSettleNo" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="银行名称" prop="bankSettleNo"> |
|||
<el-input v-model="form.bankName" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="出款账户编号" prop="accountNo"> |
|||
<el-input v-model="form.accountNo" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="保留字段" prop="attach"> |
|||
<el-input v-model="form.attach" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="address" prop="address"> |
|||
<el-input v-model="form.address" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="回调地址" prop="notifyUrl"> |
|||
<el-input v-model="form.notifyUrl" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="签名类型" prop="signType"> |
|||
<el-input v-model="form.signType" placeholder="" style="width: 315px;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
<el-form-item label="请求类型" prop="mediaType"> |
|||
<el-select v-model="form.mediaType" placeholder="请选择请求类型" clearable size="medium"> |
|||
<el-option v-for="(item, i) in list" :key="i" :label="item.label" |
|||
:value="item.value"></el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="签名" prop="req_data"> |
|||
<el-input v-model="form.req_data" type="textarea" :disabled="true" placeholder="" |
|||
style="width: 315px;border-color: #E6F1FF;" /> |
|||
<el-button type="primary" plain icon="" size="medium" style="color:#fff;margin-left:10px" |
|||
@click="handleSay" v-hasPermi="['pay:test:paymentSign']">获取签名</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" plain icon="" size="medium" style="color:#fff;margin-left:10px" |
|||
@click="payCode">支付</el-button> |
|||
</el-form-item> |
|||
<el-form-item label="代付响应" prop="resp"> |
|||
<el-input type="textarea" v-model="form.resp" placeholder="" |
|||
style="width:80%;border-color: #E6F1FF;" /> |
|||
</el-form-item> |
|||
|
|||
</el-form> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
payTest, |
|||
common_api |
|||
} from "@/api/form"; |
|||
export default { |
|||
name: "add", |
|||
|
|||
data() { |
|||
var checkPhone = (rule, value, callback) => { |
|||
let reg = /^1[345789]\d{9}$/ |
|||
if (!reg.test(value)) { |
|||
callback(new Error('请输入11位手机号')) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
return { |
|||
sortLevType: [], |
|||
form: { |
|||
resp: null, |
|||
signType: 'MD5', |
|||
backUrl: '/admin/paytest/native', |
|||
notifyUrl: 'http://localhost:8082/pay/nativePayNotify2Store', |
|||
attach: '', |
|||
version: '2.0', |
|||
charset: 'UTF-8', |
|||
spid: null, |
|||
payKey: null, |
|||
tranAmt: 1, |
|||
productName: '商品', |
|||
productDesc: '商品描述', |
|||
req_data: null, |
|||
mediaType: null, |
|||
}, |
|||
list: [ |
|||
{ |
|||
label: 'JSON', |
|||
value: 'json', |
|||
}, |
|||
{ |
|||
label: 'XML', |
|||
value: 'xml', |
|||
} |
|||
], |
|||
radio: '', |
|||
// 遮罩层 |
|||
loading: false, |
|||
dialogVisible: false, |
|||
// 是否显示弹出层 |
|||
open: false, |
|||
rules: { |
|||
address: [ |
|||
{ required: true, message: "请输入address", trigger: "blur" }, |
|||
], |
|||
version: [ |
|||
{ required: true, message: "请输入版本号", trigger: "blur" }, |
|||
], |
|||
charset: [ |
|||
{ required: true, message: "请输入字符集", trigger: "blur" }, |
|||
], |
|||
spid: [ |
|||
{ required: true, message: "请输入商户号", trigger: "blur" }, |
|||
], |
|||
tranAmt: [ |
|||
{ required: true, message: "请输入交易金额", trigger: "blur" }, |
|||
], |
|||
acctId: [ |
|||
{ required: true, message: "请输入收款人账号", trigger: "blur" }, |
|||
], |
|||
|
|||
accountNo: [ |
|||
{ required: true, message: "请输入出款账户编号", trigger: "blur" }, |
|||
], |
|||
|
|||
notifyUrl: [ |
|||
{ required: true, message: "请输入回调地址", trigger: "blur" }, |
|||
], |
|||
mediaType: [ |
|||
{ required: true, message: "请选择请求类型", trigger: "blur" }, |
|||
], |
|||
}, |
|||
val: {}, |
|||
infoList: {}, |
|||
}; |
|||
}, |
|||
|
|||
created() { |
|||
this.getList() |
|||
this.init(); |
|||
}, |
|||
methods: { |
|||
// 代付支付 |
|||
payCode() { |
|||
if (!this.form.req_data) { |
|||
this.$message.error('请先获取签名'); |
|||
return; |
|||
} |
|||
let form = { |
|||
reqData: this.form.req_data, |
|||
mediaType: this.form.mediaType, |
|||
} |
|||
payTest |
|||
.coinpayment(form) |
|||
.then((response) => { |
|||
this.form.resp = response.msg |
|||
}); |
|||
}, |
|||
//代付支付签名 |
|||
handleSay() { |
|||
if(!this.form.address){ |
|||
this.$message.error('请输入address') |
|||
return; |
|||
} |
|||
payTest |
|||
.coinPaymentSign(this.form) |
|||
.then((response) => { |
|||
this.form.req_data = response |
|||
}); |
|||
}, |
|||
init() { |
|||
this.form.mediaType = 'json' |
|||
}, |
|||
back() { |
|||
this.$router.go(-1) |
|||
}, |
|||
// 获取商户配置 |
|||
getList() { |
|||
this.loading = true; |
|||
payTest |
|||
.paytest() |
|||
.then((response) => { |
|||
// response.data.storeNo response.data.storeKey C1553225808762 127c01e48c11412aadb453cef8fac426 |
|||
this.form.spid = response.data.storeNo |
|||
this.form.payKey = response.data.storeKey |
|||
this.loading = false |
|||
}); |
|||
}, |
|||
/** 提交按钮 */ |
|||
savePayConfig() { |
|||
if (!this.infoList.googleCode) { |
|||
this.$message.error("请填写谷歌动态验证码"); |
|||
return; |
|||
} |
|||
this.loading = true |
|||
this.infoList.storeId = this.val; |
|||
this.infoList.id = this.infoList.id < 1 ? null : this.infoList.id; |
|||
payAgentUser |
|||
.updateStoreConfig(this.infoList) |
|||
.then((response) => { |
|||
|
|||
this.msgSuccess("编辑成功"); |
|||
this.getList(this.val) |
|||
this.loading = false; |
|||
}) |
|||
.catch((err) => { |
|||
this.loading = false; |
|||
}); |
|||
}, |
|||
|
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
.dialog-footer { |
|||
margin-left: 130px; |
|||
} |
|||
|
|||
.bg { |
|||
padding: 0 0px 30px 0px !important; |
|||
} |
|||
|
|||
.bottom { |
|||
padding: 30px |
|||
} |
|||
|
|||
.top { |
|||
background: #F2F2F2; |
|||
color: #006EFF; |
|||
font-size: 18px; |
|||
padding: 20px; |
|||
} |
|||
</style> |
|||
|
|||
<style></style> |
|||
|
@ -0,0 +1,311 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
|
|||
<div class="flexBet searchTop"> |
|||
<div class="title flex m20"> |
|||
<div class="bar"></div> |
|||
<div class="text">{{ $route.meta.title }}</div> |
|||
</div> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<!-- <el-col :span="1.5"> |
|||
<el-button |
|||
type="primary" |
|||
plain |
|||
icon="el-icon-plus" |
|||
size="medium" |
|||
@click="handleAdd" |
|||
v-hasPermi="['tron:tronUsdtSync:add']" |
|||
>新增</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button |
|||
type="success" |
|||
plain |
|||
icon="el-icon-edit" |
|||
size="medium" |
|||
:disabled="single" |
|||
@click="handleUpdate" |
|||
v-hasPermi="['tron:tronUsdtSync:edit']" |
|||
>修改</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button |
|||
type="danger" |
|||
plain |
|||
icon="el-icon-delete" |
|||
size="medium" |
|||
:disabled="multiple" |
|||
@click="handleDelete" |
|||
v-hasPermi="['tron:tronUsdtSync:remove']" |
|||
>删除</el-button> |
|||
</el-col> --> |
|||
<el-col :span="1.5"> |
|||
<el-button type="warning" plain icon="el-icon-download" size="medium" @click="handleExport" |
|||
v-hasPermi="['tron:tronUsdtSync:export']">导出</el-button> |
|||
</el-col> |
|||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
|||
</el-row> |
|||
</div> |
|||
<div class="bg"> |
|||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="108px" |
|||
class="flex form" style="padding:0 20px"> |
|||
<!-- <el-form-item label="数量" prop="number"> |
|||
<el-input |
|||
v-model="queryParams.number" |
|||
placeholder="请输入数量" |
|||
clearable |
|||
size="medium" |
|||
@keyup.enter.native="handleQuery" |
|||
/> |
|||
</el-form-item> --> |
|||
<el-form-item label="对应业务单号" prop="orderNo"> |
|||
<el-input v-model="queryParams.orderNo" placeholder="请输入对应业务单号" clearable size="medium" |
|||
@keyup.enter.native="handleQuery" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="发送地址" prop="fromAddress"> |
|||
<el-input v-model="queryParams.fromAddress" placeholder="请输入发送地址" clearable size="medium" |
|||
@keyup.enter.native="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item label="接收地址" prop="toAddress"> |
|||
<el-input v-model="queryParams.toAddress" placeholder="请输入接收地址" clearable size="medium" |
|||
@keyup.enter.native="handleQuery" /> |
|||
</el-form-item> |
|||
|
|||
<el-form-item> |
|||
<el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">搜索</el-button> |
|||
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
|
|||
|
|||
|
|||
<el-table v-loading="loading" :data="tronUsdtSyncList"> |
|||
<!-- <el-table-column type="selection" width="55" align="center" @selection-change="handleSelectionChange"/> --> |
|||
<el-table-column label="txid" align="center" prop="txid" /> |
|||
<el-table-column label="对应业务单号" align="center" prop="orderNo" /> |
|||
<el-table-column label="发送地址" align="center" prop="fromAddress" /> |
|||
<el-table-column label="接收地址" align="center" prop="toAddress" /> |
|||
<el-table-column label="数量" align="center" prop="number" /> |
|||
<el-table-column label="创建时间" align="center" prop="createTime" /> |
|||
<el-table-column label="更新时间" align="center" prop="updateTime" /> |
|||
|
|||
|
|||
<!-- <el-table-column label="操作" align="center" class-name="medium-padding fixed-width"> |
|||
<template slot-scope="scope"> |
|||
<el-button |
|||
size="medium" |
|||
type="text" |
|||
icon="el-icon-edit" |
|||
@click="handleUpdate(scope.row)" |
|||
v-hasPermi="['tron:tronUsdtSync:edit']" |
|||
>修改</el-button> |
|||
<el-button |
|||
size="medium" |
|||
type="text" |
|||
icon="el-icon-delete" |
|||
@click="handleDelete(scope.row)" |
|||
v-hasPermi="['tron:tronUsdtSync:remove']" |
|||
>删除</el-button> |
|||
</template> |
|||
</el-table-column> --> |
|||
</el-table> |
|||
|
|||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" |
|||
@pagination="getList" /> |
|||
</div> |
|||
|
|||
<!-- 添加或修改波场USDT同步对话框 --> |
|||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
|||
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
|||
<el-form-item label="数量" prop="number"> |
|||
<el-input v-model="form.number" placeholder="请输入数量" /> |
|||
</el-form-item> |
|||
<el-form-item label="发送地址" prop="fromAddress"> |
|||
<el-input v-model="form.fromAddress" placeholder="请输入发送地址" /> |
|||
</el-form-item> |
|||
<el-form-item label="接收地址" prop="toAddress"> |
|||
<el-input v-model="form.toAddress" placeholder="请输入接收地址" /> |
|||
</el-form-item> |
|||
<el-form-item label="对应业务单号" prop="orderNo"> |
|||
<el-input v-model="form.orderNo" placeholder="请输入对应业务单号" /> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker clearable size="medium" v-model="form.createTime" type="date" value-format="yyyy-MM-dd" |
|||
placeholder="选择创建时间"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="primary" @click="submitForm">确 定</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { listTronUsdtSync, getTronUsdtSync, delTronUsdtSync, addTronUsdtSync, updateTronUsdtSync, exportTronUsdtSync } from "@/api/tron/tronUsdtSync"; |
|||
|
|||
export default { |
|||
name: "TronUsdtSync", |
|||
components: { |
|||
}, |
|||
data() { |
|||
return { |
|||
// 遮罩层 |
|||
loading: true, |
|||
// 选中数组 |
|||
ids: [], |
|||
// 非单个禁用 |
|||
single: true, |
|||
// 非多个禁用 |
|||
multiple: true, |
|||
// 显示搜索条件 |
|||
showSearch: true, |
|||
// 总条数 |
|||
total: 0, |
|||
// 波场USDT同步表格数据 |
|||
tronUsdtSyncList: [], |
|||
// 弹出层标题 |
|||
title: "", |
|||
// 是否显示弹出层 |
|||
open: false, |
|||
// 查询参数 |
|||
queryParams: { |
|||
pageNum: 1, |
|||
pageSize: 10, |
|||
number: null, |
|||
fromAddress: null, |
|||
toAddress: null, |
|||
orderNo: null, |
|||
}, |
|||
// 表单参数 |
|||
form: {}, |
|||
// 表单校验 |
|||
rules: { |
|||
number: [ |
|||
{ required: true, message: "数量不能为空", trigger: "blur" } |
|||
], |
|||
fromAddress: [ |
|||
{ required: true, message: "发送地址不能为空", trigger: "blur" } |
|||
], |
|||
toAddress: [ |
|||
{ required: true, message: "接收地址不能为空", trigger: "blur" } |
|||
], |
|||
} |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getList(); |
|||
}, |
|||
methods: { |
|||
/** 查询波场USDT同步列表 */ |
|||
getList() { |
|||
this.loading = true; |
|||
listTronUsdtSync(this.queryParams).then(response => { |
|||
this.tronUsdtSyncList = response.rows; |
|||
this.total = Number(response.total); |
|||
this.loading = false; |
|||
}); |
|||
}, |
|||
// 取消按钮 |
|||
cancel() { |
|||
this.open = false; |
|||
this.reset(); |
|||
}, |
|||
// 表单重置 |
|||
reset() { |
|||
this.form = { |
|||
txid: null, |
|||
number: null, |
|||
fromAddress: null, |
|||
toAddress: null, |
|||
orderNo: null, |
|||
updateTime: null, |
|||
createTime: null |
|||
}; |
|||
this.resetForm("form"); |
|||
}, |
|||
/** 搜索按钮操作 */ |
|||
handleQuery() { |
|||
this.queryParams.pageNum = 1; |
|||
this.getList(); |
|||
}, |
|||
/** 重置按钮操作 */ |
|||
resetQuery() { |
|||
this.resetForm("queryForm"); |
|||
this.handleQuery(); |
|||
}, |
|||
// 多选框选中数据 |
|||
handleSelectionChange(selection) { |
|||
this.ids = selection.map(item => item.txid) |
|||
this.single = selection.length !== 1 |
|||
this.multiple = !selection.length |
|||
}, |
|||
/** 新增按钮操作 */ |
|||
handleAdd() { |
|||
this.reset(); |
|||
this.open = true; |
|||
this.title = "添加波场USDT同步"; |
|||
}, |
|||
/** 修改按钮操作 */ |
|||
handleUpdate(row) { |
|||
this.reset(); |
|||
const txid = row.txid || this.ids |
|||
getTronUsdtSync(txid).then(response => { |
|||
this.form = response.data; |
|||
this.open = true; |
|||
this.title = "修改波场USDT同步"; |
|||
}); |
|||
}, |
|||
/** 提交按钮 */ |
|||
submitForm() { |
|||
this.$refs["form"].validate(valid => { |
|||
if (valid) { |
|||
if (this.form.txid != null) { |
|||
updateTronUsdtSync(this.form).then(response => { |
|||
this.msgSuccess("修改成功"); |
|||
this.open = false; |
|||
this.getList(); |
|||
}); |
|||
} else { |
|||
addTronUsdtSync(this.form).then(response => { |
|||
this.msgSuccess("新增成功"); |
|||
this.open = false; |
|||
this.getList(); |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
}, |
|||
/** 删除按钮操作 */ |
|||
handleDelete(row) { |
|||
const txids = row.txid || this.ids; |
|||
this.$confirm('是否确认删除波场USDT同步编号为"' + txids + '"的数据项?', "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}).then(function () { |
|||
return delTronUsdtSync(txids); |
|||
}).then(() => { |
|||
this.getList(); |
|||
this.msgSuccess("删除成功"); |
|||
}) |
|||
}, |
|||
/** 导出按钮操作 */ |
|||
handleExport() { |
|||
const queryParams = this.queryParams; |
|||
this.$confirm('是否确认导出所有波场USDT同步数据项?', "警告", { |
|||
confirmButtonText: "确定", |
|||
cancelButtonText: "取消", |
|||
type: "warning" |
|||
}).then(function () { |
|||
return exportTronUsdtSync(queryParams); |
|||
}).then(response => { |
|||
this.download(response.msg); |
|||
}) |
|||
} |
|||
} |
|||
}; |
|||
</script> |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue