<!DOCTYPE html>
<html>
<head>
<title>财务渠道维护-映射</title>
<#include "/header.html">
</head>
<style>
.hintslist .hint {
padding: 4px 2px;
}
.hintslist .hint:hover {
background-color: #1E90FF;
color: #FFF;
cursor: pointer;
}
</style>
<body>
<div id="rrapp" v-cloak>
<div v-show="showList">
<div class="grid-btn">
<div class="form-group col-sm-2">
<select class="selectpicker show-tick form-control" v-model="q.payType" data-live-search="true">
<option value="">收付方式</option>
<option v-for="payType in payTypes" :value="payType.code" >{{payType.name}}</option>
</select>
</div>
<div class="form-group col-sm-2">
<select class="selectpicker show-tick form-control" v-model="q.cardType" data-live-search="true">
<option value="">卡种</option>
<option v-for="cardType in cardTypes" :value="cardType.code" >{{cardType.name}}</option>
</select>
</div>
<a class="btn btn-default" @click="query">查询</a>
<#if shiro.hasPermission("channel:emergPayChannel:save")>
<a class="btn btn-primary" @click="save"><i class="fa fa-plus"></i> 新增</a>
</#if>
<#if shiro.hasPermission("channel:emergPayChannel:update")>
<a class="btn btn-primary" @click="update"><i class="fa fa-pencil-square-o"></i> 修改</a>
</#if>
<#if shiro.hasPermission("channel:emergPayChannel:delete")>
<a class="btn btn-primary" @click="del"><i class="fa fa-trash-o"></i> 删除</a>
</#if>
<#if shiro.hasPermission("channel:emergPayChannel:export")>
<a class="btn btn-primary" style="float: right" @click="exportToExcel"><i class="glyphicon glyphicon-export"></i> 导出</a>
</#if>
</div>
<table id="jqGrid"></table>
<div id="jqGridPager"></div>
</div>
<div v-show="!showList" class="panel panel-default">
<div class="panel-heading">{{title}}</div>
<form class="form-horizontal" style="width: 100%">
<div class="form-group" style="width: 45%;display: inline-block;">
<div class="col-sm-2 control-label">收付方式</div>
<div class="col-sm-10">
<select class="selectpicker show-tick form-control" style="width: 90%;display: inline" @change="getPayChannelInfos(emergPayChannel.payType)" v-model="emergPayChannel.payType" data-live-search="true">
<option v-for="payType in payTypes" :value="payType.code" >{{payType.name}}</option>
</select>
<label><span style="color: red; display: inline">*</span></label>
</div>
</div>
<div class="form-group" style="width: 45%;display: inline-block;">
<div class="col-sm-2 control-label">卡种</div>
<div class="col-sm-10">
<select class="selectpicker show-tick form-control" style="width: 90%;display: inline" v-model="emergPayChannel.cardType" data-live-search="true">
<option v-for="cardType in cardTypes" :value="cardType.code" >{{cardType.name}}</option>
</select>
<label><span style="color: red; display: inline">*</span></label>
</div>
</div>
<div class="form-group">
<table style="border-collapse: separate;border-spacing: 10px;text-align: right;">
<tr v-for="(item, index) in emergPayChannels">
<td style="width: 5%">选择银行</td>
<td id="searchBank" style="width: 10%">
<input type="text" v-model="item.bankName" readonly class="form-control" @click="getHintsList(index)"/>
<div style="position: absolute; margin-top: 5px;width: 28%" v-if="item.showHintsBox">
<input type="text" class="form-control" @click="getHintsList(index)" v-model="item.keyword" @blur="closeHintsBox(index)" @keyup="whenInput($event,index)" ref="keyword" placeholder="搜索" />
<div style="background: white;border: 1px #808080 solid;-moz-box-shadow: 0 0 5px #606c84;-webkit-box-shadow: 0 0 5px #606c84;box-shadow: 0 0 5px #606c84">
<ul class="hintslist" style="list-style: none;max-height: 200px;overflow-y: auto">
<li style="text-align: left" v-for="(bankType, i) in hints" ref="hint" class="hint" @mousedown="fillInput(index, i)" v-cloak>{{bankType.name}}</li>
</ul>
</div>
</div>
</td>
<td style="width: 5%">选择盘片</td>
<td style="width: 10%">
<select id="payChannelInfo" class="selectpicker show-tick form-control" v-model="item.paychannelId" data-live-search="true">
<option v-for="payChannelInfo in payChannelInfos" :value="payChannelInfo.paychannelId" >{{payChannelInfo.paychannelName}}</option>
</select>
</td>
<td style="width: 5%">单笔限额</td>
<td style="width: 10%">
<input class="form-control" type="text" v-model="item.singleLimit" placeholder="(元)"/>
</td>
<td id="trAdd" style="width: 2%"><a class="btn btn-primary" @click="trAdd()"> 新增</a></td>
<td id="trRemove" style="width: 2%"><a class="btn btn-danger" @click="trRemove(index)"> 删除</a></td>
</tr>
</table>
</div>
<div class="form-group">
<div class="col-sm-2 control-label"></div>
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
</div>
</form>
</div>
</div>
<script src="${request.contextPath}/statics/js/modules/channel/emergPayChannel.js?_${.now?long}"></script>
</body>
</html>
$(function () {
vm.getPayTypes();
vm.getCardTypes();
vm.getBankTypes();
$("#jqGrid").jqGrid({
url: baseURL + 'channel/emergPayChannel/list',
datatype: "json",
colModel: [
{label: 'ID', name: 'emergId', align: "center", sortable: false, hidden: true, width: 30, key: true},
{label: '收付方式', name: 'payTypeName', sortable: false, align: "center", width: 25},
{label: '卡种', name: 'cardTypeName', sortable: false, align: "center", width: 25},
{label: '盘片名称', name: 'paychannelName', sortable: false, align: "center", width: 40},
{label: '盘片编码', name: 'paychannelCode', sortable: false, align: "center", width: 25},
{label: 'SubCode', name: 'subcode', sortable: false, align: "center", width: 25},
{label: '银行名称', name: 'bankName', sortable: false, align: "center", width: 75},
{label: '单笔限额(元)', name: 'singleLimit', sortable: false, align: "center", width: 25,
formatter:'number',
formatoptions:{
thousandsSeparator:",",
decimalPlaces: 3
}
}
],
viewrecords: true,
height: 385,
rowNum: 10,
rowList: [10, 30, 50],
rownumbers: true,
rownumWidth: 25,
autowidth: true,
multiselect: true,
multiboxonly: true,
pager: "#jqGridPager",
jsonReader: {
root: "page.list",
page: "page.currPage",
total: "page.totalPage",
records: "page.totalCount"
},
prmNames: {
page: "page",
rows: "limit"
},
beforeRequest: function () {
$("thead th").css("text-align", "center");
},
gridComplete: function () {
$("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
}
});
});
var vm = new Vue({
el: '#rrapp',
data: {
q: {
payType: "",
cardType: ""
},
showList: true,
title: null,
payTypes: [],
cardTypes: [],
bankTypes: [],
payChannelInfos: [],
emergPayChannel: {},
emergPayChannels: [{index: 0}],
timer: null,
hints: [],
activeNo: -1
},
methods: {
trAdd: function () {
if (this.emergPayChannels[this.emergPayChannels.length - 1].bankCode == null || this.emergPayChannels[this.emergPayChannels.length - 1].paychannelId == null || this.emergPayChannels[this.emergPayChannels.length - 1].singleLimit == null) {
alert("请逐行添加");
return;
}
vm.emergPayChannels.push({
index: this.emergPayChannels.length,
keyword: "",
showHintsBox: false
});
},
trRemove: function (index) {
if (index === 0) {
alert("第一行无法删除");
return;
}
this.emergPayChannels.splice(index, 1);
for (var i in this.emergPayChannels) {
this.emergPayChannels[i].index = i;
}
},
query: function () {
vm.reload();
},
save: function () {
$("#trAdd").removeClass("hide");
$("#trRemove").removeClass("hide");
vm.showList = false;
vm.title = "新增";
vm.emergPayChannel = {};
vm.emergPayChannels = [{index: 0,keyword: "",showHintsBox: false}];
vm.payChannelInfos = [];
},
update: function () {
$("#trAdd").addClass("hide");
$("#trRemove").addClass("hide");
var emergId = getSelectedRow();
if (emergId == null) {
return;
}
vm.showList = false;
vm.title = "修改";
vm.getEmergPayChannel(emergId);
},
saveOrUpdate: function () {
for (var i = 0; i < vm.emergPayChannels.length; i++) {
if (!checkPositiveInteger(vm.emergPayChannels[i].singleLimit)) {
alert("单笔限额只能为正整数");
return false;
}
vm.emergPayChannels[i].cardType = vm.emergPayChannel.cardType;
vm.emergPayChannels[i].payType = vm.emergPayChannel.payType;
}
var url = vm.emergPayChannel.emergId == null ? "channel/emergPayChannel/save" : "channel/emergPayChannel/update";
var source = {};
if (vm.emergPayChannel.emergId == null) {
source = JSON.stringify(vm.emergPayChannels);
} else {
vm.emergPayChannel.paychannelId = vm.emergPayChannels[0].paychannelId;
vm.emergPayChannel.bankCode = vm.emergPayChannels[0].bankCode;
vm.emergPayChannel.singleLimit = vm.emergPayChannels[0].singleLimit;
source = JSON.stringify(vm.emergPayChannel);
}
$.ajax({
type: "POST",
url: baseURL + url,
contentType: "application/json",
data: source,
dataType: 'json',
success: function (r) {
if (r.code === 200) {
alert('操作成功', function () {
vm.reload();
});
} else {
alert(r.msg);
}
}
});
},
del: function () {
var emergIds = getSelectedRows();
if (emergIds == null) {
return;
}
confirm('确定要删除选中的记录?', function () {
$.ajax({
type: "POST",
url: baseURL + "channel/emergPayChannel/delete",
contentType: "application/json",
data: JSON.stringify(emergIds),
success: function (r) {
if (r.code == 200) {
alert('操作成功', function () {
vm.reload();
});
} else {
alert(r.msg);
}
}
});
});
},
getEmergPayChannel: function (emergId) {
$.ajax({
type: "POST",
url: baseURL + "channel/emergPayChannel/info/" + emergId,
contentType: "application/json",
async: false,
dataType: 'json',
success: function (r) {
if (r.code == 200) {
vm.emergPayChannels = [];
vm.emergPayChannels[0] = r.emergPayChannel;
vm.emergPayChannels[0].keyword = "";
vm.emergPayChannels[0].showHintsBox = false;
vm.emergPayChannel = r.emergPayChannel;
vm.getPayChannelInfos(r.emergPayChannel.payType);
} else {
alert(r.msg);
}
},
error: function () {
alert("请求出错");
}
});
},
getPayTypes: function () {
$.ajax({
type: "GET",
url: baseURL + "sys/dict/getTypes?type=PAY_TYPE",
contentType: "application/json",
async: false,
dataType: 'json',
success: function (r) {
if (r.code == 200) {
vm.payTypes = r.types;
} else {
alert(r.msg);
}
},
error: function () {
alert("请求出错");
}
});
},
getCardTypes: function () {
$.ajax({
type: "GET",
url: baseURL + "sys/dict/getTypes?type=CARD_TYPE",
contentType: "application/json",
async: false,
dataType: 'json',
success: function (r) {
if (r.code == 200) {
vm.cardTypes = r.types;
} else {
alert(r.msg);
}
},
error: function () {
alert("请求出错");
}
});
},
getBankTypes: function () {
$.ajax({
type: "GET",
url: baseURL + "channel/product/getBankInfo",
contentType: "application/json",
async: false,
dataType: 'json',
success: function (r) {
if (r.code == 200) {
vm.bankTypes = r.types;
} else {
alert(r.msg);
}
},
error: function () {
alert("请求出错");
}
});
},
getPayChannelInfos: function (payType) {
if (payType == "undefined" || payType == null) {
return;
}
$.ajax({
type: "GET",
url: baseURL + "channel/paychannel/getByPayType?payType=" + payType,
contentType: "application/json",
async: false,
dataType: 'json',
success: function (r) {
if (r.code == 200) {
vm.payChannelInfos = r.payChannelInfos;
} else {
alert(r.msg);
}
},
error: function () {
alert("请求出错");
}
});
},
exportToExcel: function () {
var colNames = $("#jqGrid").jqGrid('getGridParam', 'colNames');
var colModel = $("#jqGrid").jqGrid('getGridParam', 'colModel');
var headerName = "";
for (var i = 3; i < colNames.length; i++) {
headerName += colNames[i] + ",";
}
var headerFiled = "";
for (var i = 3; i < colModel.length; i++) {
headerFiled += colModel[i].name + ",";
}
var form = $("<form>");
form.attr('style', 'display:none');
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', baseURL + "channel/emergPayChannel/exportToExcel");
var input1 = $('<input>');
input1.attr('type', 'hidden');
input1.attr('name', 'payType');
input1.attr('value', vm.q.payType);
var input2 = $('<input>');
input2.attr('type', 'hidden');
input2.attr('name', 'cardType');
input2.attr('value', vm.q.cardType);
var input3 = $('<input>');
input3.attr('type', 'hidden');
input3.attr('name', 'headerName');
input3.attr('value', headerName);
var input4 = $('<input>');
input4.attr('type', 'hidden');
input4.attr('name', 'headerFiled');
input4.attr('value', headerFiled);
$('body').append(form);
form.append(input1);
form.append(input2);
form.append(input3);
form.append(input4);
form.submit();
form.remove();
},
reload: function () {
vm.showList = true;
$("#jqGrid").jqGrid('setGridParam', {
postData: {
'payType': vm.q.payType,
'cardType': vm.q.cardType
},
page: 1
}).trigger("reloadGrid");
},
whenInput: function ($event,index) {
var len = this.hints.length;
if ($event.keyCode == 40) {
if (this.activeNo >= len - 1) {
return;
}
this.activeNo++;
return;
}
if ($event.keyCode == 38) {
if (this.activeNo <= 0) {
return;
}
this.activeNo--;
return;
}
if ($event.keyCode == 13) {
this.fillInput(index,this.activeNo);
}
if ($event.keyCode !== 38 && $event.keyCode !== 40 && $event.keyCode !== 13) {
this.getHintsList(index);
}
},
getHintsList: function (index) {
var arr = [];
for (let i = 0; i < this.bankTypes.length; i++) {
var item = this.bankTypes[i];
if (item.name.indexOf(this.emergPayChannels[index].keyword) != -1) {
arr.push(item);
}
}
this.hints = arr;
this.emergPayChannels[index].showHintsBox = true;
this.$nextTick(function() {
this.$refs.keyword[0].focus();
})
},
fillInput: function (i, j) {
this.emergPayChannels[i].keyword = this.hints[j].name;
this.emergPayChannels[i].bankCode = this.hints[j].type;
this.emergPayChannels[i].bankName = this.hints[j].name;
this.closeHintsBox(i);
},
closeHintsBox: function (i) {
setTimeout(function () {
vm.hints = [];
vm.emergPayChannels[i].showHintsBox = false;
vm.emergPayChannels[i].keyword = "";
vm.activeNo = -1;
}, 80)
}
},
watch: {
activeNo: function (val, oldVal) {
if (val != -1) {
for (var i = 0; i < this.hints.length; i++) {
this.$refs.hint[i].style.backgroundColor = "#FFF";
this.$refs.hint[i].style.color = "#000";
}
this.$refs.hint[val].style.backgroundColor = "#1E90FF";
this.$refs.hint[val].style.color = "#FFF";
}
}
}
});