搬迁代码【第七版】

This commit is contained in:
liaozetao
2023-09-25 21:19:27 +08:00
parent a7093cf926
commit 01f7b4da7f
38 changed files with 12956 additions and 0 deletions

View File

@@ -0,0 +1,287 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<form action="" id="searchForm" method="POST">
<div class="col-sm-12">
<div class="col-sm-4">
<label for="timeBegin" class="qry_col control-label">日期</label>
<input type="text" name="timeBegin" id="timeBegin" class="input-sm" placeholder="起始时间">
- <input type="text" name="timeEnd" id="timeEnd" class="input-sm" placeholder="结束时间">
</div>
<label for="erbanNo" class="qry_col control-label">66</label>
<div class="col-sm-2">
<input type="text" name="erbanNo" id="erbanNo" class="input-sm" placeholder="">
</div>
</div>
</form>
<button class="btn btn-primary" id="searchBtn">筛选</button>
<div class="tips">因数据量庞大默认不会显示每天的结果默认只展示平台总收益情况请先选择时间范围再搜索</div>
<div class="dataCount">
<p>
<span>抽奖记录总数</span>
<span id="countNum"></span>
</p>
<p>
<span>用户投入金币总数</span>
<span id="userPay"></span>
</p>
<p>
<span>总平台总价值</span>
<span id="platformNum"></span>
</p>
<p>
<span>总实际总价值</span>
<span id="actualNum"></span>
</p>
<p>
<span>用户获得礼物中金币数</span>
<span id="giftNum"></span>
</p>
<p>
<span>用户获得非礼物总金币数</span>
<span id="notGiftNum"></span>
</p>
<p>
<span>用户获得实物总数</span>
<span id="realGiftNum"></span>
</p>
</div>
</div>
<div id="table"></div>
</section>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PlatformPrizeDataAdminDayView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
var picker1 = $('#timeBegin').datetimepicker({
format: 'yyyy-mm-dd',
todayBtn: true,
autoclose: true,
minView: 'month',
endDate: new Date()
});
var picker2 = $('#timeEnd').datetimepicker({
format: 'yyyy-mm-dd',
todayBtn: true,
autoclose: true,
minView: 'month',
endDate: new Date()
});
var $timeBegin = '', $timeEnd = '';
var main = {
init: function () {
this.eventRegister();
this.valueChange();
},
eventRegister: function () {
picker1.on('changeDate', function () {
var date = $('#timeBegin').datetimepicker('getDate');
picker2.datetimepicker('setStartDate', date);
});
picker2.on('changeDate', function () {
var date = $('#timeEnd').datetimepicker('getDate');
picker1.datetimepicker('setEndDate', date);
});
$('#searchBtn').on('click', function () {
var $dataCount = $('.dataCount');
// var $startDate = $('#timeBegin').val().replace(/\//g,'-');
var $startDate;
if ($('#timeBegin').val() == "" || $('#timeBegin').val() == 'undefined') {
$startDate = '';
} else {
/*var arr = $('#timeBegin').val().split('/');
var length = arr.length;
var $startDate = arr[length-1] +'-' + arr[0] + '-' + arr[length - 2];*/
$startDate = $('#timeBegin').val();
}
var $endDate;
if ($('#timeEnd').val() == '' || $('#timeEnd').val() == 'undefined') {
$endDate = $startDate;
} else {
/*var arr2 = $('#timeEnd').val().split('/');
var length2 = arr2.length;
var $endDate = arr2[length2-1] + '-' + arr2[0] + '-' + arr2[length2-2];*/
$endDate = $('#timeEnd').val();
}
if ($startDate == '') {
$timeBegin = '';
$timeEnd = '';
} else {
$timeBegin = $startDate + ' 00:00:00';
$timeEnd = $endDate + ' 23:59:59';
}
$.post('/admin/linearlyPool/data/platform/totalDays', {
erbanNo: $('#erbanNo').val(),
startDate: $timeBegin,
endDate: $timeEnd,
}, function (res) {
console.log(res);
if (res.code == 200) {
var data = res.data;
$dataCount.find('#countNum').html(data.countNum);
$dataCount.find('#userPay').html(data.userTotalPay);
$dataCount.find('#platformNum').html(data.totalPlatformValue);
$dataCount.find('#actualNum').html(data.totalActualValue);
$dataCount.find('#giftNum').html(data.totalGiftActualValue);
$dataCount.find('#notGiftNum').html(data.totalNotGiftActualValue);
$dataCount.find('#realGiftNum').html(data.totalRealGiftActualValue);
// TableHelper.doRefresh('#table');
tableRefresh();
} else {
console.log('数据错误,导致加载失败,' + res.code);
}
})
});
$('#table').on('click', '#details', function () {
console.log($(this).data('id'));
});
},
valueChange: function () {
var $dataCount = $('.dataCount');
$.post('/admin/linearlyPool/data/platform/totalDays', {
erbanNo: $('#erbanNo').val(),
startDate: $timeBegin,
endDate: $timeEnd,
}, function (res) {
console.log(res);
if (res.code == 200) {
var data = res.data;
$dataCount.find('#countNum').html(data.countNum);
$dataCount.find('#userPay').html(data.userTotalPay);
$dataCount.find('#platformNum').html(data.totalPlatformValue);
$dataCount.find('#actualNum').html(data.totalActualValue);
$dataCount.find('#giftNum').html(data.totalGiftActualValue);
$dataCount.find('#notGiftNum').html(data.totalNotGiftActualValue);
$dataCount.find('#realGiftNum').html(data.totalRealGiftActualValue);
TableHelper.doRefresh('#table');
} else {
console.log('数据错误,导致加载失败,' + res.code);
}
})
}
};
main.init();
function tableRefresh() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{
field: 'createTime', title: '日期', align: 'center', valign: 'middle', width: '20%', formatter: function (val, rows, index) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd')
} else {
return '-';
}
}
},
{ field: 'countNum', title: '抽奖记录数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'userTotalPay', title: '用户投入金币数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalPlatformValue', title: '总平台价值', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalActualValue', title: '总实际价值', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalGiftActualValue', title: '用户获得礼物金币数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalNotGiftActualValue', title: '用户获得非礼物金币数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalRealGiftActualValue', title: '用户获得实物', align: 'center', valign: 'middle', width: '10%' },
// {field: '', title: '操作', align: 'center', valign: 'middle', width: '10%',formatter: function(val,row,index) {
// var key = row.createTime;
// return '<button class="btn btn-primary btn-sm" id="details" data-id="' + key + '">查看详情</button>';
// }}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
startDate: $timeBegin,
endDate: $timeEnd,
erbanNo: $('#erbanNo').val(),
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/linearlyPool/data/platform/listDays',
onLoadSuccess: function () {
console.log('load success');
},
onLOadError: function () {
console.log('load fail');
}
});
}
})
}
},
};
</script>
<style scoped>
.dataCount {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 10px;
}
.dataCount>p {
padding: 5px;
border-radius: 5px;
background: #ccc;
margin-right: 10px;
}
.tips {
color: red;
font-size: 14px;
}
.qry_col {
float: left;
}</style>

View File

@@ -0,0 +1,288 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<form action="" id="searchForm" method="POST">
<div class="col-sm-12">
<div class="col-sm-4">
<label for="timeBegin" class="qry_col control-label">日期</label>
<input type="text" name="timeBegin" id="timeBegin" class="input-sm" placeholder="起始时间">
- <input type="text" name="timeEnd" id="timeEnd" class="input-sm" placeholder="结束时间">
</div>
<label for="erbanNo" class="qry_col control-label">66</label>
<div class="col-sm-2">
<input type="text" name="erbanNo" id="erbanNo" class="input-sm" placeholder="">
</div>
</div>
</form>
<button class="btn btn-primary" id="searchBtn">筛选</button>
<div class="tips">因数据量庞大默认不会显示每天的结果默认只展示平台总收益情况请先选择时间范围再搜索</div>
<div class="dataCount">
<p>
<span>抽奖记录总数</span>
<span id="countNum"></span>
</p>
<p>
<span>用户投入金币总数</span>
<span id="userPay"></span>
</p>
<p>
<span>总平台总价值</span>
<span id="platformNum"></span>
</p>
<p>
<span>总实际总价值</span>
<span id="actualNum"></span>
</p>
<p>
<span>用户获得礼物中金币数</span>
<span id="giftNum"></span>
</p>
<p>
<span>用户获得非礼物总金币数</span>
<span id="notGiftNum"></span>
</p>
<p>
<span>用户获得实物总数</span>
<span id="realGiftNum"></span>
</p>
</div>
</div>
<div id="table"></div>
</section>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PlatformPrizeDataAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
var picker1 = $('#timeBegin').datetimepicker({
format: 'yyyy-mm-dd',
todayBtn: true,
autoclose: true,
minView: 'month',
endDate: new Date()
});
var picker2 = $('#timeEnd').datetimepicker({
format: 'yyyy-mm-dd',
todayBtn: true,
autoclose: true,
minView: 'month',
endDate: new Date()
});
var $timeBegin = '', $timeEnd = '';
var main = {
init: function () {
this.eventRegister();
this.valueChange();
},
eventRegister: function () {
picker1.on('changeDate', function () {
var date = $('#timeBegin').datetimepicker('getDate');
picker2.datetimepicker('setStartDate', date);
});
picker2.on('changeDate', function () {
var date = $('#timeEnd').datetimepicker('getDate');
picker1.datetimepicker('setEndDate', date);
});
$('#searchBtn').on('click', function () {
var $dataCount = $('.dataCount');
// var $startDate = $('#timeBegin').val().replace(/\//g,'-');
var $startDate;
if ($('#timeBegin').val() == "" || $('#timeBegin').val() == 'undefined') {
$startDate = '';
} else {
/*var arr = $('#timeBegin').val().split('/');
var length = arr.length;
var $startDate = arr[length-1] +'-' + arr[0] + '-' + arr[length - 2];*/
$startDate = $('#timeBegin').val();
}
var $endDate;
if ($('#timeEnd').val() == '' || $('#timeEnd').val() == 'undefined') {
$endDate = $startDate;
} else {
/*var arr2 = $('#timeEnd').val().split('/');
var length2 = arr2.length;
var $endDate = arr2[length2-1] + '-' + arr2[0] + '-' + arr2[length2-2];*/
$endDate = $('#timeEnd').val();
}
if ($startDate == '') {
$timeBegin = '';
$timeEnd = '';
} else {
$timeBegin = $startDate + ' 00:00:00';
$timeEnd = $endDate + ' 23:59:59';
}
$.post('/admin/linearlyPool/data/platform/total', {
erbanNo: $('#erbanNo').val(),
startDate: $timeBegin,
endDate: $timeEnd,
}, function (res) {
console.log(res);
if (res.code == 200) {
var data = res.data;
$dataCount.find('#countNum').html(data.countNum);
$dataCount.find('#userPay').html(data.userTotalPay);
$dataCount.find('#platformNum').html(data.totalPlatformValue);
$dataCount.find('#actualNum').html(data.totalActualValue);
$dataCount.find('#giftNum').html(data.totalGiftActualValue);
$dataCount.find('#notGiftNum').html(data.totalNotGiftActualValue);
$dataCount.find('#realGiftNum').html(data.totalRealGiftActualValue);
// TableHelper.doRefresh('#table');
tableRefresh();
} else {
console.log('数据错误,导致加载失败,' + res.code);
}
})
});
$('#table').on('click', '#details', function () {
console.log($(this).data('id'));
});
},
valueChange: function () {
var $dataCount = $('.dataCount');
$.post('/admin/linearlyPool/data/platform/total', {
erbanNo: $('#erbanNo').val(),
startDate: $timeBegin,
endDate: $timeEnd,
}, function (res) {
console.log(res);
if (res.code == 200) {
var data = res.data;
$dataCount.find('#countNum').html(data.countNum);
$dataCount.find('#userPay').html(data.userTotalPay);
$dataCount.find('#platformNum').html(data.totalPlatformValue);
$dataCount.find('#actualNum').html(data.totalActualValue);
$dataCount.find('#giftNum').html(data.totalGiftActualValue);
$dataCount.find('#notGiftNum').html(data.totalNotGiftActualValue);
$dataCount.find('#realGiftNum').html(data.totalRealGiftActualValue);
TableHelper.doRefresh('#table');
} else {
console.log('数据错误,导致加载失败,' + res.code);
}
})
}
};
main.init();
function tableRefresh() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{
field: 'createTime', title: '日期', align: 'center', valign: 'middle', width: '20%', formatter: function (val, rows, index) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd')
} else {
return '-';
}
}
},
{ field: 'countNum', title: '抽奖记录数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'userTotalPay', title: '用户投入金币数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalPlatformValue', title: '总平台价值', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalActualValue', title: '总实际价值', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalGiftActualValue', title: '用户获得礼物金币数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalNotGiftActualValue', title: '用户获得非礼物金币数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalRealGiftActualValue', title: '用户获得实物', align: 'center', valign: 'middle', width: '10%' },
// {field: '', title: '操作', align: 'center', valign: 'middle', width: '10%',formatter: function(val,row,index) {
// var key = row.createTime;
// return '<button class="btn btn-primary btn-sm" id="details" data-id="' + key + '">查看详情</button>';
// }}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
startDate: $timeBegin,
endDate: $timeEnd,
erbanNo: $('#erbanNo').val(),
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/linearlyPool/data/platform/list',
onLoadSuccess: function () {
console.log('load success');
},
onLOadError: function () {
console.log('load fail');
}
});
}
})
}
},
};
</script>
<style scoped>
.dataCount {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 10px;
}
.dataCount>p {
padding: 5px;
border-radius: 5px;
background: #ccc;
margin-right: 10px;
}
.tips {
color: red;
font-size: 14px;
}
.qry_col {
float: left;
}
</style>

View File

@@ -0,0 +1,922 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div class="header-section">
<div class="pool-line-name">常规线</div>
<div class="dataCount">
<p>
<span>奖池线包含组数</span>
<span id="baseLineGroupCount"></span>
</p>
<p>
<span>奖池线礼物数</span>
<span id="baseLinePrizeCount"></span>
</p>
<p>
<span>总礼物价值</span>
<span id="baseLinePrizeValue"></span>
</p>
<p>
<span>单线比</span>
<span id="baseLinePrizeRate"></span>
</p>
<p>
<button class="btn btn-primary js-deploy">发布</button>
</p>
</div>
</div>
<div class="group-table-section">
<div class="prize-group-wrapper js-normal-prize-group-wrapper">
<div class="header-wrapper">
<div class="title">普通礼物组</div>
<div class="right-content js-no-editing">
<div class="undeploy js-deploy-status">未发布</div>
<div class="action-btn-wrap"><button class="btn btn-primary js-edit-group"
data-pool-type="1">编辑</button></div>
</div>
<div class="right-content right-content-edit js-editing">
<div class="action-btn-wrap">
<button class="btn btn-primary js-add-prize" data-pool-type="1">新增</button>
<button class="btn btn-danger js-save-edit" data-pool-type="1">保存</button>
<button class="btn btn-default js-cancel-edit" data-pool-type="1">取消</button>
</div>
</div>
</div>
<div class="data-wrapper">
<div>
<span>礼物个数</span>
<span class="js-prize-total-count"></span>
</div>
<div>
<span>礼物价值</span>
<span class="js-prize-total-value"></span>
</div>
</div>
<table class="prize-group-table table table-hover table-striped">
<tr>
<th>名称</th>
<th>平台价值</th>
<th>个数</th>
<th>总价值</th>
<th>核算概率</th>
<th>展示概率</th>
</tr>
<!-- <tr>-->
<!-- <td>糖果</td>-->
<!-- <td>1</td>-->
<!-- <td>123</td>-->
<!-- <td>21333</td>-->
<!-- <td>21.223%</td>-->
<!-- <td>21.221%</td>-->
<!-- </tr>-->
</table>
</div>
<div class="prize-group-wrapper js-senior-prize-group-wrapper">
<div class="header-wrapper">
<div class="title">高级礼物组</div>
<div class="right-content js-no-editing">
<div class="undeploy js-deploy-status">未发布</div>
<div class="action-btn-wrap"><button class="btn btn-primary js-edit-group"
data-pool-type="2">编辑</button></div>
</div>
<div class="right-content right-content-edit js-editing">
<div class="action-btn-wrap">
<button class="btn btn-primary js-add-prize" data-pool-type="2">新增</button>
<button class="btn btn-danger js-save-edit" data-pool-type="2">保存</button>
<button class="btn btn-default js-cancel-edit" data-pool-type="2">取消</button>
</div>
</div>
</div>
<div class="data-wrapper">
<div>
<span>礼物个数</span>
<span class="js-prize-total-count"></span>
</div>
<div>
<span>礼物价值</span>
<span class="js-prize-total-value"></span>
</div>
</div>
<table class="prize-group-table table table-hover table-striped">
<tr>
<th>名称</th>
<th>平台价值</th>
<th>个数</th>
<th>总价值</th>
<th>核算概率</th>
<th>展示概率</th>
</tr>
<!-- <tr>-->
<!-- <td>糖果</td>-->
<!-- <td>1</td>-->
<!-- <td>123</td>-->
<!-- <td>21333</td>-->
<!-- <td>21.223%</td>-->
<!-- <td>21.221%</td>-->
<!-- </tr>-->
</table>
</div>
</div>
</section>
</div>
</section>
<!-- 添加弹窗 -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">x</span>
</button>
<h4 class="modal-title" id="addModalLabel">新增礼物</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="addForm">
<!-- 礼物组 -->
<div class="form-group">
<label for="" class="col-sm-3 control-label">礼物组</label>
<div class="col-sm-8">
<input type="hidden" id="prizePoolType" name="prizePoolType" disabled class=""
placeholder="">
<input type="text" id="prizePoolName" name="prizePoolName" disabled class="" placeholder="">
</div>
</div>
<!-- 选择奖品 -->
<div class="form-group">
<label for="" class="col-sm-3 control-label">选择奖品</label>
<div class="col-sm-8">
<select name="awardType" id="awardType" data-btn-class="btn btn-warning">
<!-- <option value=""></option> -->
</select>
<select name="awardChoose" id="awardChoose" data-btn-class="btn btn-warning">
<!-- <option value=""></option> -->
</select>
</div>
</div>
<!-- 奖品id -->
<div class="form-group">
<label for="" class="col-sm-3 control-label">奖品id</label>
<div class="col-sm-8">
<input type="text" id="addPrizeId" name="addPrizeId" disabled class="" placeholder="">
</div>
</div>
<!-- 奖品个数 -->
<div class="form-group">
<label for="" class="col-sm-3 control-label">奖品个数</label>
<div class="col-sm-8">
<input type="text" id="jackpotNumber" name="jackpotNumber" class=" validate[required]"
placeholder="单行输入">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-default" type="button" id="addCancel">取消</button>
<button class="btn btn-primary" type="button" id="addSave">保存</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="tipModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">提示信息</h4>
</div>
<div class="modal-body" id="tipMsg"></div>
</div>
</div>
</div>
<div class="modal fade" id="deployConfirmModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">本次奖池线发布</h4>
</div>
<div class="modal-body">
<div>期望值 <span id="deployedPrizeRate"></span> 变为 <span id="currPrizeRate"></span></div>
<div>当前奖池线: <span id="currPoolLineId"></span></div>
<div>生效奖池线: <span id="activePoolLineId"></span></div>
<div>确认发布?</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" type="button" id="deployCancel">取消发布</button>
<button class="btn btn-primary" type="button" id="deployConfirm">确认发布</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PoolItemAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
const POOL_TYPE = {
normal: 1,
senior: 2,
}
const POOL_NAME = {
1: '普通礼物组',
2: '高级礼物组',
}
// 展示概率的属性名
const SHOWRATE_FIELD_NAME = "showRatio";
const PRIZE_NUM_FIELD_NAME = "prizeNum";
const RATE_SCALE = 1000;
var prizeMap = {};
var typeObj = {};
function calculateStatisticsDatas(normalPrizeItems, seniorPrizeItems) {
let normalPrizeCount = 0;
let normalPrizeTotalValue = 0;
normalPrizeItems.forEach(item => {
normalPrizeCount += item.prizeNum;
normalPrizeTotalValue += item.prizeNum * item.platformValue
})
let seniorPrizeCount = 0;
let seniorPrizeTotalValue = 0;
seniorPrizeItems.forEach(item => {
seniorPrizeCount += item.prizeNum;
seniorPrizeTotalValue += item.prizeNum * item.platformValue
})
const totalPrizeCount = normalPrizeCount * seniorPrizeCount + seniorPrizeCount;
const totalPrizeValue = normalPrizeTotalValue * seniorPrizeCount + seniorPrizeTotalValue;
let prizeRate = 0;
if (totalPrizeCount != 0) {
prizeRate = parseFloat(totalPrizeValue) / (totalPrizeCount * 10)
}
return {
normalPrizeCount,
normalPrizeTotalValue,
seniorPrizeCount,
seniorPrizeTotalValue,
totalPrizeCount,
totalPrizeValue,
prizeRate,
};
}
function renderStatisticsDatas(statisticsDatas) {
$('#baseLineGroupCount').text(statisticsDatas.seniorPrizeCount);
$('#baseLinePrizeCount').text(statisticsDatas.totalPrizeCount);
$('#baseLinePrizeValue').text(statisticsDatas.totalPrizeValue);
$('#baseLinePrizeRate').text(statisticsDatas.prizeRate.toFixed(4));
}
function changeDateValue(poolType, propName, idx, inputValue) {
let prizeGroup;
if (poolType == POOL_TYPE.normal) {
prizeGroup = editingNormalPrizeGroup;
} else if (poolType == POOL_TYPE.senior) {
prizeGroup = editingSeniorPrizeGroup;
} else {
throw Error("unkonw prize pool type")
}
if (SHOWRATE_FIELD_NAME == propName) {
inputValue = (parseFloat(inputValue) * RATE_SCALE).toFixed(0);
} else if (PRIZE_NUM_FIELD_NAME == propName) {
inputValue = parseInt(inputValue);
}
prizeGroup.prizeItems[idx][propName] = inputValue;
// prizeGroup.isUndeploy = true;
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
seniorPrizeGroup: editingSeniorPrizeGroup,
})
}
function inputChanged(e) {
const propName = $(e.target).attr("name");
const idx = $(e.target).attr("data-idx");
const poolType = $(e.target).attr("data-pool-type");
const inputValue = e.target.value;
console.debug("input change", e, propName, idx, poolType, inputValue);
changeDateValue(poolType, propName, idx, inputValue);
}
function removePirzeItem(e) {
const idx = $(e.target).attr("data-idx");
const poolType = $(e.target).attr("data-pool-type");
let prizeList = editingNormalPrizeGroup.prizeItems;
if (poolType == POOL_TYPE.senior) {
prizeList = editingSeniorPrizeGroup.prizeItems;
}
if (prizeList.length == 1) {
$('#tipMsg').text('奖池中至少要有一个奖品');
$('#tipModal').modal('show');
return;
}
if (confirm("你确定要从奖池中移除该奖品吗?")) {
prizeList.splice(idx, 1);
console.debug("removePirzeItem prizeList", prizeList)
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
seniorPrizeGroup: editingSeniorPrizeGroup,
});
}
}
function renderPrizeGroup(poolType, prizeGroup, statisticsDatas, isEdit) {
let wrapperClassName = '.js-normal-prize-group-wrapper';
let totalPrizeCount = statisticsDatas.normalPrizeCount;
let totalPrizeValue = statisticsDatas.normalPrizeTotalValue;
if (poolType == POOL_TYPE.senior) {
wrapperClassName = '.js-senior-prize-group-wrapper';
totalPrizeCount = statisticsDatas.seniorPrizeCount;
totalPrizeValue = statisticsDatas.seniorPrizeTotalValue;
}
console.debug("wrapperClassName", wrapperClassName);
$(`${wrapperClassName} .js-prize-total-count`).text(totalPrizeCount);
$(`${wrapperClassName} .js-prize-total-value`).text(totalPrizeValue);
if (isEdit) {
console.debug("show editing action btns")
$(`${wrapperClassName} .js-no-editing`).hide();
$(`${wrapperClassName} .js-editing`).show();
} else {
console.debug("hide editing action btns")
$(`${wrapperClassName} .js-no-editing`).show();
$(`${wrapperClassName} .js-editing`).hide();
if (prizeGroup.isUndeploy) {
$(`${wrapperClassName} .js-deploy-status`).show();
} else {
$(`${wrapperClassName} .js-deploy-status`).hide();
}
}
const groupTableDom = $(`${wrapperClassName} .prize-group-table`);
$(`${wrapperClassName} .prize-group-table input`).unbind("change");
$(`${wrapperClassName} .prize-group-table .js-remove-item`).unbind("click");
groupTableDom.html("<thead><tr>\n" +
" <th>名称</th>\n" +
" <th>平台价值</th>\n" +
" <th>个数</th>\n" +
" <th>总价值</th>\n" +
" <th>核算概率</th>\n" +
// " <th>展示概率</th>\n" +
" </tr></thead>");
const prizeItems = prizeGroup.prizeItems;
groupTableDom.append("<tbody>")
prizeItems.forEach((item, idx) => {
let accountingRate = 0
if (poolType == POOL_TYPE.normal) {
// 普通礼物组核算概率 = 该礼物的个数*奖池线包含组数/礼物线总礼物数
accountingRate = parseFloat(item.prizeNum) * statisticsDatas.seniorPrizeCount / statisticsDatas.totalPrizeCount * 100;
} else if (poolType == POOL_TYPE.senior) {
// 高级礼物组核算概率 = 该礼物的个数/礼物线总礼物数
accountingRate = parseFloat(item.prizeNum) / statisticsDatas.totalPrizeCount * 100;
}
const tds = [];
if (isEdit) {
tds.push(`<td><i class="glyphicon glyphicon-remove js-remove-item" data-idx="${idx}" data-pool-type="${poolType}"></i>${item.prizeName}</td>`);
} else {
tds.push(`<td>${item.prizeName}</td>`)
}
tds.push(`<td>${item.platformValue}</td>`);
if (isEdit) {
tds.push(`<td><input name="prizeNum" data-idx="${idx}" data-pool-type="${poolType}" value="${item.prizeNum}"></td>`)
} else {
tds.push(`<td>${item.prizeNum}</td>`)
}
tds.push(`<td>${item.prizeNum * item.platformValue}</td>`);
tds.push(`<td>${accountingRate.toFixed(3)}%</td>`);
// if (isEdit) {
// let disabled = false
// if (poolType == POOL_TYPE.normal && idx == 0) {
// disabled = true;
// }
// tds.push(`<td><input ${disabled ? "disabled" : ""} name="showRatio" data-idx="${idx}" data-pool-type="${poolType}" value="${parseFloat(item.showRatio)/RATE_SCALE.toFixed(3)}">%</td>`)
// } else {
// tds.push(`<td>${parseFloat(item.showRatio)/RATE_SCALE.toFixed(3)}%</td>`)
// }
let row = `<tr>${tds.join()}</tr>`;
groupTableDom.append(row);
})
groupTableDom.append("</tbody>")
// 注册输入框变更事件
$(`${wrapperClassName} .prize-group-table input`).bind('change', inputChanged);
// 注册删除事件
$(`${wrapperClassName} .prize-group-table .js-remove-item`).bind("click", removePirzeItem);
}
let normalPrizeGroupCache;
let seniorPrizeGroupCache;
let deployedNormalPrizes;
let deployedSeniorPrizes;
let statisticsDatas;
let deployedStatisticsDatas;
let editingNormalPrizeGroup;
let currentPoolLineId;
let maxLineId;
let editingSeniorPrizeGroup;
let isNormalPrizeEditing = false;
let isSeniorPrizeEditing = false;
function renderPageWhenInit(groupData) {
const normalPrizeGroup = groupData.normalPrizeGroup;
const seniorPrizeGroup = groupData.seniorPrizeGroup;
normalPrizeGroupCache = normalPrizeGroup;
seniorPrizeGroupCache = seniorPrizeGroup;
deployedNormalPrizes = groupData.deployedNormalPrizes
deployedSeniorPrizes = groupData.deployedSeniorPrizes
currentPoolLineId = groupData.currentPoolLineId
maxLineId = groupData.maxLineId
editingNormalPrizeGroup = null;
editingSeniorPrizeGroup = null;
isNormalPrizeEditing = false;
isSeniorPrizeEditing = false;
statisticsDatas = calculateStatisticsDatas(normalPrizeGroup.prizeItems, seniorPrizeGroup.prizeItems);
deployedStatisticsDatas = calculateStatisticsDatas(deployedNormalPrizes, deployedSeniorPrizes);
renderStatisticsDatas(statisticsDatas);
renderPrizeGroup(POOL_TYPE.normal, normalPrizeGroup, statisticsDatas, false)
renderPrizeGroup(POOL_TYPE.senior, seniorPrizeGroup, statisticsDatas, false)
}
function getPageInfo() {
$.get('/admin/linearlyPool/getPrizeGroupsInfo', {
}, function (res) {
console.log(res);
const data = res.data;
renderPageWhenInit(data);
})
}
getPageInfo();
function deepClone(o) {
// 判断如果不是引用类型,直接返回数据即可
if (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean' || typeof o === 'undefined') {
return o
} else if (Array.isArray(o)) { // 如果是数组,则定义一个新数组,完成复制后返回
// 注意这里判断数组不能用typeof因为typeof Array 返回的是object
console.log(typeof []) // --> object
var _arr = []
o.forEach(item => { _arr.push(deepClone(item)) })
return _arr
} else if (typeof o === 'object') {
var _o = {}
for (let key in o) {
_o[key] = deepClone(o[key])
}
return _o
}
}
$('.js-edit-group').on('click', function () {
const poolType = $(this).attr('data-pool-type');
// 进入编辑状态,则使用深度拷贝复制2组数据
if (!editingNormalPrizeGroup || editingNormalPrizeGroup == null) {
editingNormalPrizeGroup = deepClone(normalPrizeGroupCache);
}
if (!editingSeniorPrizeGroup || editingSeniorPrizeGroup == null) {
editingSeniorPrizeGroup = deepClone(seniorPrizeGroupCache);
}
let prizeGroup;
if (poolType == POOL_TYPE.normal) {
prizeGroup = editingNormalPrizeGroup;
isNormalPrizeEditing = true;
} else if (poolType == POOL_TYPE.senior) {
prizeGroup = editingSeniorPrizeGroup;
isSeniorPrizeEditing = true;
} else {
throw Error("unkonw prize pool type")
}
const statisticsDatasCopy = deepClone(statisticsDatas)
renderPrizeGroup(poolType, prizeGroup, statisticsDatasCopy, true)
});
function reRenderPage(groupData) {
console.debug("reRenderPage groupData", groupData)
const normalPrizeGroup = groupData.normalPrizeGroup;
const seniorPrizeGroup = groupData.seniorPrizeGroup;
statisticsDatas = calculateStatisticsDatas(normalPrizeGroup.prizeItems, seniorPrizeGroup.prizeItems);
renderStatisticsDatas(statisticsDatas);
renderPrizeGroup(POOL_TYPE.normal, normalPrizeGroup, statisticsDatas, isNormalPrizeEditing)
renderPrizeGroup(POOL_TYPE.senior, seniorPrizeGroup, statisticsDatas, isSeniorPrizeEditing)
}
$('.js-cancel-edit').on('click', function () {
const poolType = $(this).attr('data-pool-type');
console.debug("js-cancel-edit ", poolType, normalPrizeGroupCache, seniorPrizeGroupCache);
let normalPrizeGroup = normalPrizeGroupCache;
if (isNormalPrizeEditing && poolType != POOL_TYPE.normal) {
// 普通组在编辑,并且当前取消编辑的不是普通组,则使用编辑中的数据来重新渲染页面
normalPrizeGroup = editingNormalPrizeGroup;
}
let seniorPrizeGroup = seniorPrizeGroupCache;
if (isSeniorPrizeEditing && poolType != POOL_TYPE.senior) {
seniorPrizeGroup = editingSeniorPrizeGroup;
}
if (poolType == POOL_TYPE.normal) {
editingNormalPrizeGroup = null;
isNormalPrizeEditing = false;
} else if (poolType == POOL_TYPE.senior) {
editingSeniorPrizeGroup = null;
isSeniorPrizeEditing = false;
}
reRenderPage({
normalPrizeGroup,
seniorPrizeGroup,
})
});
$('.js-save-edit').on('click', function () {
const poolType = $(this).attr('data-pool-type');
let prizeGroup;
if (poolType == POOL_TYPE.normal) {
// 普通组在编辑,并且当前取消编辑的不是普通组,则使用编辑中的数据来重新渲染页面
prizeGroup = editingNormalPrizeGroup;
isNormalPrizeEditing = false;
} else if (poolType == POOL_TYPE.senior) {
prizeGroup = editingSeniorPrizeGroup;
isSeniorPrizeEditing = false;
} else {
throw Error("unkonw prize pool type")
}
if (!prizeGroup.isUndeploy) {
// 不是未发布状态的,则要将prizeItem的id清除掉
const prizeItems = prizeGroup.prizeItems;
prizeItems.forEach((item, idx) => {
item.id = null;
});
}
console.debug("js-save-edit prizeGroup", prizeGroup);
$.ajax({
type: "post",
url: "/admin/linearlyPool/saveDraft",
data: JSON.stringify({
poolItems: prizeGroup.prizeItems,
prizePoolType: poolType,
}),
dataType: "json",
contentType: 'application/json',
success: function (json) {
if (json.success) {
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
getPageInfo();
} else {
$("#tipMsg").text("保存失败." + json.message);
$("#tipModal").modal('show');
}
}
});
});
function getDataFormBack() {
$.get('/admin/prize/total/list', {}, function (res) {
if (res.code == 200) {
// console.log(res);
for (var i = 0; i < res.data.length; i++) {
// id对象存储
var id = '' + res.data[i].id;
prizeMap[id] = res.data[i];
// Type对象存储
var type = '' + res.data[i].prizeType;
console.log(type);
if (!typeObj[type]) {
typeObj[type] = [];
}
typeObj[type].push(res.data[i]);
}
console.log(prizeMap, typeObj);
}
});
}
getDataFormBack();
function clearModal() {
$('#addForm').find('input[type=text],select,input[type=hidden]').each(function () {
$(this).val('');
});
$('#editForm').find('input[type=text],select,input[type=hidden]').each(function () {
$(this).val('');
});
}
// 添加按钮事件
$('.js-add-prize').on('click', function () {
$('#awardType').find('option').remove();
const poolType = $(this).attr('data-pool-type');
for (var key in typeObj) {
var $prizeType = '';
switch (key) {
case '8':
$prizeType = '谢谢参与';
break;
case '1':
$prizeType = '金币';
break;
case '2':
$prizeType = '礼物';
break;
case '3':
$prizeType = '座驾';
break;
case '4':
$prizeType = '头饰';
break;
case '5':
$prizeType = '背景';
break;
case '6':
$prizeType = '实体奖品';
break;
case '7':
$prizeType = '靓号';
break;
case '15':
$prizeType = '虚拟货币';
break;
}
var str = '<option value=' + key + '>' + $prizeType + '</option>';
$('#awardType').append(str);
}
clearModal();
$('#prizePoolType').val(poolType);
$('#prizePoolName').val(POOL_NAME[poolType]);
$('#addModal').modal('show');
});
// select监听事件
$('#addModal').find('#awardType').on('change', function () {
$('#awardChoose').find('option').remove();
var key = $(this).val();
console.log(key);
// var str = '<option></option>';
// $('#awardChoose').append(str);
var str;
for (var i in typeObj[key]) {
str = '<option value=' + typeObj[key][i].id + '>' + typeObj[key][i].prizeName + '</option>';
$('#awardChoose').append(str);
}
$('#addPrizeId').val(typeObj[key][0].id);
});
// select监听事件
$('#addModal').find('#awardChoose').on('change', function (e) {
const chosenPrizeId = $(this).val()
// console.debug("awardChoose change", e, chosenPrizeId)
$('#addPrizeId').val(chosenPrizeId);
});
// 保存按钮事件
$('#addSave').on('click', function () {
const chosenPrizeId = $('#awardChoose').val()
const poolType = parseInt($('#prizePoolType').val());
const currAllPrizeItems = [...editingNormalPrizeGroup.prizeItems, ...editingSeniorPrizeGroup.prizeItems];
for (let i = 0; i < currAllPrizeItems.length; i++) {
const exsistsPrize = currAllPrizeItems[i];
if (exsistsPrize.prizeId == chosenPrizeId) {
$('#tipMsg').text('所选的奖品已添加到奖池中,不能重复添加');
$('#tipModal').modal('show');
return;
}
}
const prize = prizeMap[chosenPrizeId];
const newPoolItem = {
prizeId: parseInt(chosenPrizeId),
prizeName: prize.prizeName,
prizeNum: parseInt($('#jackpotNumber').val()),
prizePoolType: poolType,
prizeType: prize.prizeType,
platformValue: prize.platformValue,
showRatio: 0,
}
let prizeList = editingNormalPrizeGroup.prizeItems;
if (poolType == POOL_TYPE.senior) {
prizeList = editingSeniorPrizeGroup.prizeItems;
}
// 按平台价值递增排序
let insertIdx = prizeList.length;
for (let i = 0; i < prizeList.length; i++) {
const exsistsPrize = prizeList[i];
if (newPoolItem.platformValue < exsistsPrize.platformValue) {
insertIdx = i;
break;
}
}
prizeList.splice(insertIdx, 0, newPoolItem);
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
seniorPrizeGroup: editingSeniorPrizeGroup,
});
$('#addModal').modal('hide');
});
$('#addCancel').on('click', function () {
$('#addModal').modal('hide');
});
// 发布
$('.js-deploy').on('click', function () {
if (isSeniorPrizeEditing || isNormalPrizeEditing) {
$('#tipMsg').text('当前有礼物组未报错,请先保存礼物组后再尝试发布');
$('#tipModal').modal('show');
return;
}
if (!normalPrizeGroupCache.isUndeploy && !seniorPrizeGroupCache.isUndeploy) {
$('#tipMsg').text('没有待发布的修改');
$('#tipModal').modal('show');
return;
}
console.debug('js-deploy data', normalPrizeGroupCache, seniorPrizeGroupCache)
if ((normalPrizeGroupCache.prizeItems.length <= 0) ||
(seniorPrizeGroupCache.prizeItems.length <= 0)) {
$('#tipMsg').text('所有的礼物组都必须至少添加一个奖品');
$('#tipModal').modal('show');
return;
}
$('#deployedPrizeRate').text(deployedStatisticsDatas.prizeRate.toFixed(4));
$('#currPrizeRate').text(statisticsDatas.prizeRate.toFixed(4));
$('#currPoolLineId').text(currentPoolLineId);
$('#activePoolLineId').text(maxLineId + 1);
$('#deployConfirmModal').modal('show');
})
$('#deployCancel').on('click', function () {
$('#deployConfirmModal').modal('hide');
})
$('#deployConfirm').on('click', function () {
$.ajax({
type: "post",
url: "/admin/linearlyPool/deploy",
dataType: "json",
contentType: 'application/json',
success: function (json) {
if (json.success) {
$("#tipMsg").text("发布成功.当前奖池线: " + json.data.currentPoolLineId + ". 生效奖池线: " + json.data.willActiveLineId);
$("#tipModal").modal('show');
getPageInfo();
} else {
$("#tipMsg").text(json.message);
$("#tipModal").modal('show');
}
}
});
$('#deployConfirmModal').modal('hide');
})
})
}
},
};
</script>
<style scoped>
.pool-line-name {
font-size: 20px;
}
.dataCount {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 10px;
}
.dataCount>p {
padding: 5px;
border-radius: 5px;
/*background: #ccc;*/
margin-right: 20px;
}
.tips {
color: red;
font-size: 14px;
}
.qry_col {
float: left;
}
.group-table-section {
display: flex;
width: 100%;
}
.group-table-section .prize-group-wrapper {
width: 50%;
}
.prize-group-wrapper .header-wrapper {
display: flex;
justify-content: space-between;
max-width: 512px;
}
.prize-group-wrapper .header-wrapper .title {
font-size: 20px;
}
.prize-group-wrapper .header-wrapper .right-content {
display: flex;
justify-content: flex-start;
}
.prize-group-wrapper .header-wrapper .right-content.right-content-edit {
display: none;
}
.prize-group-wrapper .header-wrapper .action-btn-wrap button:not(last-child) {
margin-right: 10px;
}
.prize-group-wrapper .header-wrapper .right-content .undeploy {
color: red;
margin-right: 10px;
}
.prize-group-wrapper .data-wrapper {
display: flex;
margin-top: 12px;
}
.prize-group-wrapper .data-wrapper div {
margin-right: 20px;
}
.prize-group-wrapper .prize-group-table {
margin-top: 12px;
margin-right: 10px;
max-width: 1024px;
}
.prize-group-wrapper .prize-group-table .glyphicon-remove {
color: red;
cursor: pointer;
}
#deployConfirmModal .modal-body {
display: flex;
flex-direction: column;
align-items: center;
}
#deployConfirmModal .modal-body #currPrizeRate {
color: red;
}
#deployConfirmModal .modal-body div:first-child {
margin-bottom: 10px;
}
#deployConfirmModal .modal-body div:last-child {
margin-top: 10px;
}</style>

View File

@@ -0,0 +1,523 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div class="header-section">
<div class="pool-line-name">常规线</div>
<!-- <div class="dataCount">-->
<!-- <p>-->
<!-- <span>奖池线包含组数</span>-->
<!-- <span id="baseLineGroupCount"></span>-->
<!-- </p>-->
<!-- <p>-->
<!-- <span>奖池线礼物数</span>-->
<!-- <span id="baseLinePrizeCount"></span>-->
<!-- </p>-->
<!-- <p>-->
<!-- <span>总礼物价值</span>-->
<!-- <span id="baseLinePrizeValue"></span>-->
<!-- </p>-->
<!-- <p>-->
<!-- <span>单线比</span>-->
<!-- <span id="baseLinePrizeRate"></span>-->
<!-- </p>-->
<!-- </div>-->
</div>
<div class="group-table-section">
<div class="prize-group-wrapper js-prize-group-wrapper">
<div class="header-wrapper">
<div class="right-content js-no-editing">
<div class="action-btn-wrap">
<button class="btn btn-primary js-edit-group">编辑</button>
</div>
</div>
<div class="right-content right-content-edit js-editing">
<div class="action-btn-wrap">
<button class="btn btn-primary js-save-edit">保存</button>
<button class="btn btn-default js-cancel-edit">取消</button>
<button class="btn btn-danger js-rest">一键重置为核算概率</button>
</div>
<div style="color: red">如果时第一次调整,请务必先重置成核算概率再进行调整</div>
</div>
</div>
<!-- <div class="data-wrapper">-->
<!-- <div>-->
<!-- <span>礼物个数</span>-->
<!-- <span class="js-prize-total-count"></span>-->
<!-- </div>-->
<!-- <div>-->
<!-- <span>礼物价值</span>-->
<!-- <span class="js-prize-total-value"></span>-->
<!-- </div>-->
<!-- </div>-->
<table class="prize-group-table table table-hover table-striped">
<tr>
<th>名称</th>
<th>平台价值</th>
<th>个数</th>
<th>总价值</th>
<th>奖池类型</th>
<th>核算概率</th>
<th>展示概率</th>
</tr>
<!-- <tr>-->
<!-- <td>糖果</td>-->
<!-- <td>1</td>-->
<!-- <td>123</td>-->
<!-- <td>21333</td>-->
<!-- <td>21.223%</td>-->
<!-- <td>21.221%</td>-->
<!-- </tr>-->
</table>
</div>
</div>
</section>
</div>
</section>
<div class="modal fade" id="tipModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">提示信息</h4>
</div>
<div class="modal-body" id="tipMsg"></div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PoolItemShowratioAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
let prizeGroup;
let editingSeniorPrizeGroup;
let editingNormalPrizeGroup;
const POOL_TYPE = {
normal: 1,
senior: 2,
}
const POOL_NAME = {
1: '普通礼物组',
2: '高级礼物组',
}
// 展示概率的属性名
const SHOWRATE_FIELD_NAME = "showRatio";
const PRIZE_NUM_FIELD_NAME = "prizeNum";
const RATE_SCALE = 1000;
function calculateStatisticsDatas(prizeItems) {
let normalPrizeCount = 0;
let normalPrizeTotalValue = 0;
let seniorPrizeCount = 0;
let seniorPrizeTotalValue = 0;
prizeItems.forEach(item => {
switch (item.prizePoolType) {
case POOL_TYPE.normal:
normalPrizeCount += item.prizeNum;
normalPrizeTotalValue += item.platformValue
break;
case POOL_TYPE.senior:
seniorPrizeCount += item.prizeNum;
seniorPrizeTotalValue += item.platformValue
break;
default:
break;
}
});
const totalPrizeCount = normalPrizeCount * seniorPrizeCount + seniorPrizeCount;
const totalPrizeValue = normalPrizeTotalValue * seniorPrizeCount + seniorPrizeTotalValue;
let prizeRate = 0;
if (totalPrizeCount != 0) {
prizeRate = parseFloat(totalPrizeValue) / totalPrizeCount * 10
}
return {
normalPrizeCount,
normalPrizeTotalValue,
seniorPrizeCount,
seniorPrizeTotalValue,
totalPrizeCount,
totalPrizeValue,
prizeRate,
};
}
function renderStatisticsDatas(statisticsDatas) {
$('#baseLineGroupCount').text(statisticsDatas.seniorPrizeCount);
$('#baseLinePrizeCount').text(statisticsDatas.totalPrizeCount);
$('#baseLinePrizeValue').text(statisticsDatas.totalPrizeValue);
$('#baseLinePrizeRate').text(statisticsDatas.prizeRate.toFixed(4));
}
function changeDateValue(propName, idx, inputValue) {
if (SHOWRATE_FIELD_NAME == propName) {
inputValue = (parseFloat(inputValue) * RATE_SCALE).toFixed(0);
} else if (PRIZE_NUM_FIELD_NAME == propName) {
inputValue = parseInt(inputValue);
}
prizeGroup.prizeItems[idx][propName] = inputValue;
// prizeGroup.isUndeploy = true;
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
seniorPrizeGroup: editingSeniorPrizeGroup,
})
}
function showRatioChanged(e) {
const idx = $(e.target).attr("data-idx");
const inputValue = (parseFloat(e.target.value) * RATE_SCALE).toFixed(0);
console.debug("input change", e, idx, inputValue);
const oldValue = editingPoolItems[idx].showRatio;
const diff = inputValue - oldValue;
const firstItemRatio = editingPoolItems[0].showRatio;
if (firstItemRatio - diff < 0) {
// 修改的展示率的差值从第一个奖品的展示率中扣除,如果不够扣,则提示错误
$("#tipMsg").text("全部展示概率之和不能大于100%.如果时第一次调整,请先重置成核算概率再进行调整");
$("#tipModal").modal('show');
return;
}
editingPoolItems[0].showRatio = firstItemRatio - diff;
editingPoolItems[idx].showRatio = inputValue;
reRenderPage(editingPoolItems);
}
function removePirzeItem(e) {
const idx = $(e.target).attr("data-idx");
const poolType = $(e.target).attr("data-pool-type");
let prizeList = editingNormalPrizeGroup.prizeItems;
if (poolType == POOL_TYPE.senior) {
prizeList = editingSeniorPrizeGroup.prizeItems;
}
if (prizeList.length == 1) {
$('#tipMsg').text('奖池中至少要有一个奖品');
$('#tipModal').modal('show');
return;
}
prizeList.splice(idx, 1);
console.debug("removePirzeItem prizeList", prizeList)
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
seniorPrizeGroup: editingSeniorPrizeGroup,
});
}
function renderPrizeGroup(prizeItems, statisticsDatas, isEdit) {
console.debug('renderPrizeGroup', prizeItems)
let wrapperClassName = '.js-prize-group-wrapper';
if (isEdit) {
console.debug("show editing action btns")
$(`${wrapperClassName} .js-no-editing`).hide();
$(`${wrapperClassName} .js-editing`).show();
} else {
console.debug("hide editing action btns")
$(`${wrapperClassName} .js-no-editing`).show();
$(`${wrapperClassName} .js-editing`).hide();
}
const groupTableDom = $(`${wrapperClassName} .prize-group-table`);
$(`${wrapperClassName} .prize-group-table .js-showratio-input`).unbind("change");
groupTableDom.html("<thead><tr>\n" +
" <th>名称</th>\n" +
" <th>平台价值</th>\n" +
" <th>个数</th>\n" +
" <th>总价值</th>\n" +
" <th>奖池类型</th>\n" +
" <th>核算概率</th>\n" +
" <th>展示概率</th>\n" +
" </tr></thead>");
groupTableDom.append("<tbody>")
prizeItems.forEach((item, idx) => {
let accountingRate = 0
if (item.prizePoolType == POOL_TYPE.normal) {
// 普通礼物组核算概率 = 该礼物的个数*奖池线包含组数/礼物线总礼物数
accountingRate = parseFloat(item.prizeNum) * statisticsDatas.seniorPrizeCount / statisticsDatas.totalPrizeCount * 100;
} else if (item.prizePoolType == POOL_TYPE.senior) {
// 高级礼物组核算概率 = 该礼物的个数/礼物线总礼物数
accountingRate = parseFloat(item.prizeNum) / statisticsDatas.totalPrizeCount * 100;
}
const tds = [];
tds.push(`<td>${item.prizeName}</td>`)
tds.push(`<td>${item.platformValue}</td>`);
tds.push(`<td>${item.prizeNum}</td>`)
tds.push(`<td>${item.prizeNum * item.platformValue}</td>`);
tds.push(`<td>${POOL_NAME[item.prizePoolType]}</td>`);
tds.push(`<td>${accountingRate.toFixed(3)}%</td>`);
if (isEdit) {
let disabled = false
if (idx == 0) {
disabled = true;
}
tds.push(`<td><input class="js-showratio-input" ${disabled ? "disabled" : ""} name="showRatio" data-idx="${idx}" data-pool-type="${item.prizePoolType}" value="${(parseFloat(item.showRatio) / RATE_SCALE).toFixed(3)}">%</td>`)
} else {
tds.push(`<td>${parseFloat(item.showRatio) / RATE_SCALE.toFixed(3)}%</td>`)
}
let row = `<tr>${tds.join()}</tr>`;
groupTableDom.append(row);
})
groupTableDom.append("</tbody>")
// 注册输入框变更事件
$(`${wrapperClassName} .prize-group-table .js-showratio-input`).bind('change', showRatioChanged);
}
let orgPoolItems;
let statisticsDatas;
let editingPoolItems;
let isEditing = false;
function renderPageWhenInit(poolItems) {
orgPoolItems = poolItems;
editingPoolItems = null;
isEditing = false;
statisticsDatas = calculateStatisticsDatas(poolItems);
// renderStatisticsDatas(statisticsDatas);
renderPrizeGroup(poolItems, statisticsDatas, false)
}
function getPageInfo() {
$.get('/admin/linearlyPool/listDeployedPoolItems', {
}, function (res) {
console.log(res);
const data = res.data;
renderPageWhenInit(data);
})
}
getPageInfo();
function deepClone(o) {
// 判断如果不是引用类型,直接返回数据即可
if (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean' || typeof o === 'undefined') {
return o
} else if (Array.isArray(o)) { // 如果是数组,则定义一个新数组,完成复制后返回
// 注意这里判断数组不能用typeof因为typeof Array 返回的是object
console.log(typeof []) // --> object
var _arr = []
o.forEach(item => { _arr.push(deepClone(item)) })
return _arr
} else if (typeof o === 'object') {
var _o = {}
for (let key in o) {
_o[key] = deepClone(o[key])
}
return _o
}
}
$('.js-edit-group').on('click', function () {
// 进入编辑状态,则使用深度拷贝数据
if (!editingPoolItems || editingPoolItems == null) {
editingPoolItems = deepClone(orgPoolItems);
}
isEditing = true;
const statisticsDatasCopy = deepClone(statisticsDatas)
renderPrizeGroup(editingPoolItems, statisticsDatasCopy, true)
});
function reRenderPage(poolItems) {
console.debug("reRenderPage groupData", poolItems)
renderPrizeGroup(poolItems, statisticsDatas, isEditing)
}
$('.js-cancel-edit').on('click', function () {
console.debug("js-cancel-edit ", orgPoolItems);
editingPoolItems = null;
isEditing = false;
reRenderPage(orgPoolItems);
});
$('.js-rest').on('click', function () {
console.debug("js-cancel-edit ", editingPoolItems);
editingPoolItems.forEach((item, idx) => {
let accountingRate = 0
if (item.prizePoolType == POOL_TYPE.normal) {
// 普通礼物组核算概率 = 该礼物的个数*奖池线包含组数/礼物线总礼物数
accountingRate = parseFloat(item.prizeNum) * statisticsDatas.seniorPrizeCount / statisticsDatas.totalPrizeCount * 100;
} else if (item.prizePoolType == POOL_TYPE.senior) {
// 高级礼物组核算概率 = 该礼物的个数/礼物线总礼物数
accountingRate = parseFloat(item.prizeNum) / statisticsDatas.totalPrizeCount * 100;
}
item.showRatio = (accountingRate * RATE_SCALE).toFixed(0);
});
reRenderPage(editingPoolItems);
});
$('.js-save-edit').on('click', function () {
console.debug("js-save-edit prizeGroup", editingPoolItems);
let totalShowRatio = 0;
editingPoolItems.forEach((item, idx) => {
totalShowRatio += parseInt(item.showRatio);
});
if ((totalShowRatio / RATE_SCALE).toFixed(0) > 100) {
// 由于精度问题,求和后的数值忽略小数位的。
$('#tipMsg').text('总概率不能大于100');
$('#tipModal').modal('show');
return;
}
if (confirm("你确定要保存吗?")) {
$.ajax({
type: "post",
url: "/admin/linearlyPool/updateShowRatio",
data: JSON.stringify({
poolItems: editingPoolItems,
}),
dataType: "json",
contentType: 'application/json',
success: function (json) {
if (json.success) {
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
getPageInfo();
} else {
$("#tipMsg").text("保存失败." + json.message);
$("#tipModal").modal('show');
}
}
});
}
});
})
}
},
};
</script>
<style scoped>
.pool-line-name {
font-size: 20px;
}
.dataCount {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 10px;
}
.dataCount>p {
padding: 5px;
border-radius: 5px;
/*background: #ccc;*/
margin-right: 20px;
}
.tips {
color: red;
font-size: 14px;
}
.qry_col {
float: left;
}
.group-table-section {
display: flex;
width: 100%;
}
.group-table-section .prize-group-wrapper {
width: 50%;
}
.prize-group-wrapper .header-wrapper {
display: flex;
justify-content: space-between;
max-width: 512px;
}
.prize-group-wrapper .header-wrapper .title {
font-size: 20px;
}
.prize-group-wrapper .header-wrapper .right-content {
display: flex;
justify-content: flex-start;
}
.prize-group-wrapper .header-wrapper .right-content.right-content-edit {
display: none;
}
.prize-group-wrapper .header-wrapper .action-btn-wrap button:not(last-child) {
margin-right: 10px;
}
.prize-group-wrapper .header-wrapper .right-content .undeploy {
color: red;
margin-right: 10px;
}
.prize-group-wrapper .data-wrapper {
display: flex;
margin-top: 12px;
}
.prize-group-wrapper .data-wrapper div {
margin-right: 20px;
}
.prize-group-wrapper .prize-group-table {
margin-top: 12px;
margin-right: 10px;
max-width: 1024px;
}
.prize-group-wrapper .prize-group-table .glyphicon-remove {
color: red;
cursor: pointer;
}
#deployConfirmModal .modal-body {
display: flex;
flex-direction: column;
align-items: center;
}
#deployConfirmModal .modal-body #currPrizeRate {
color: red;
}
#deployConfirmModal .modal-body div:first-child {
margin-bottom: 10px;
}
#deployConfirmModal .modal-body div:last-child {
margin-top: 10px;
}
</style>

View File

@@ -0,0 +1,153 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="table"></div>
<div id="toolbar">
<div class="col-sm-12">
<div class="pull-left">
<form action="/admin/linearlyPool/data/export.action" id="searchForm" method="POST">
66<input type="text" id="msNo" name="msNo" class="input-sm" placeholder="请输入66号">
奖品名称<input type="text" id="prizeName" name="prizeName" class="input-sm"
placeholder="请输入奖品名称">
日期<input type="text" name="startDate" id="timeBegin" class="input-sm datetime"
placeholder="起始时间">
- <input type="text" name="endDate" id="timeEnd" class="input-sm datetime"
placeholder="结束时间">
</form>
</div>
<div class="pull-right">
&nbsp;&nbsp;&nbsp;&nbsp;<button id="searchBtn" class="btn btn-primary">筛选</button>
<button id="exportBtn" class="btn btn-primary">导出</button>
</div>
</div>
</div>
</section>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PrizeDrawRecordAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.datetime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
var main = {
init: function () {
this.eventRegister();
this.getDataFromBack();
},
eventRegister: function () {
// 筛选按钮点击事件
$('#searchBtn').on('click', function () {
TableHelper.doRefresh('#table');
});
$("#exportBtn").on('click', function () {
$("#searchForm").submit();
})
},
getDataFromBack: function () {
}
};
main.init();
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'lineId', title: '奖池线id', align: 'center', valign: 'middle', width: '10%' },
{ field: 'uid', title: 'uid', align: 'center', valign: 'middle', width: '10%' },
{ field: 'erbanNo', title: '66号', align: 'center', valign: 'middle', width: '10%' },
{ field: 'nick', title: '用户昵称', align: 'center', valign: 'middle', width: '10%' },
{ field: 'prizeName', title: '奖品名称', align: 'center', valign: 'middle', width: '10%' },
{
field: 'drawTime', title: '抽奖时间', align: 'center', valign: 'middle', width: '20%', formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '-';
}
}
},
{ field: 'platformValue', title: '平台价值', align: 'center', valign: 'middle', width: '10%' },
// {field: 'actualValue', title: '实际价值', align: 'center', valign: 'middle', width: '10%'},
{
field: 'prizePoolType', title: '礼物组类型', align: 'center', valign: 'middle', width: '10%', formatter: function (val, row, index) {
switch (row.prizePoolType) {
case 1:
return '普通礼物组';
case 2:
return '高级礼物组';
}
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
startDate: $('#timeBegin').val(),
endDate: $('#timeEnd').val(),
msNo: $('#msNo').val(),
prizeName: $("#prizeName").val()
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/linearlyPool/data/listDrawRecord',
onLOadSuccess: function () {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
})
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,161 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="table"></div>
<div id="toolbar">
<label class="source">
选择时间: <input type="text" name="startTime" id="startTime" class="input-sm">
<input type="text" id="endTime" name="endTime" class="input-sm">
</label>
<label class="source">
查询凭据<select name="source" id="source" class="input-sm">
<option value="1">66</option>
<option value="2">偏差范围</option>
</select>
</label>
<label class="msNo">
66<input type="text" placeholder="请输入草莓号" id="msNo" class="input-sm">
</label>
<label class="deviation">
偏差值 <input type="text" id="minDis" class="input-m"> - <input type="text" id="maxDis"
class="input-m">
</label>
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
</div>
</section>
</div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "UserPrizeDataAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
//searchHistory();
var whiteList = {};
searchHistory();
function searchHistory() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'uid', title: 'uid', align: 'center', valign: 'middle', width: '10%' },
{ field: 'erbanNo', title: '66号', align: 'center', valign: 'middle', width: '10%' },
{ field: 'nick', title: '昵称', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalPurchaseMoney', title: '历史抽奖充值总额', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalDrawMoney', title: '历史抽奖总额', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalPlatformValue', title: '历史获奖平台价值', align: 'center', valign: 'middle', width: '10%' },
{ field: 'totalActualValue', title: '历史获奖实际价值', align: 'center', valign: 'middle', width: '10%' },
{
field: 'deviation', title: '偏差值', align: 'center', valign: 'middle', width: '10%', formatter: function (val, row, index) {
if (val > 0) {
return '<span style="color:red">+' + val + '</span>';
} else {
return '<span style="color:green">' + val + '</span>';
}
}
},
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
msNo: $('#msNo').val(),
minDis: $('#minDis').val(),
maxDis: $('#maxDis').val(),
startTime: $("#startTime").val(),
endTime: $("#endTime").val()
};
console.log(param);
return param;
},
uniqueId: 'uid',
toolbar: '#toolbar',
url: '/admin/linearlyPool/data/user/statis/list',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
})
}
$('#source').on('change', function () {
var source = parseInt($(this).val());
if (source == 1) {
$('.msNo').show();
$('.deviation').hide();
} else {
$('.msNo').hide();
$('.deviation').show();
}
});
$('#btnSearch').on('click', function () {
var source = $('#source').val();
var msNo = $('#msNo').val();
var minDis = $('#minDis').val();
var maxDis = $('#maxDis').val();
if (source == 1 && msNo == '') {
$("#tipMsg").text("请输入66号");
$("#tipModal").modal('show');
return;
} else if (source == 2 && (minDis == '' || maxDis == '')) {
$("#tipMsg").text("请输入偏差值");
$("#tipModal").modal('show');
return;
}
searchHistory()
});
// 初始化时间选择器
$('#startTime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
})
$("#endTime").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
})
}
},
};
</script>
<style scoped>
.deviation {
display: none;
}
#toolbar label {
margin-right: 6px;
}</style>

View File

@@ -0,0 +1,308 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<div id="table"></div>
<div id="toolbar">
<form id="searchForm" action="/admin/short/link/export" method="get" target="_blank">
<div class="col-sm-12">
<label for="linkId" class="col-sm-2 control-label">短链id:</label>
<div class="col-sm-2">
<input type="text" class="form-control" name="linkId" id="linkId">
</div>
<label for="linkName" class="col-sm-2 control-label">短链名称:</label>
<div class="col-sm-2">
<input type="text" class="form-control" name="linkName" id="linkName">
</div>
</div>
</form>
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button id="btnExport" class="btn btn-default">
<i class="glyphicon glyphicon-Export"></i>导出
</button>
<button id="btnAdd" class="btn btn-default">
<i class="glyphicon glyphicon-plus-sign"></i>生成
</button>
</div>
</div>
</div>
</section>
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="modalLabel">生成短链</h4>
</div>
<div class="modal-body">
<form class="form-horizontal">
<input type="hidden" name="id" id="id" />
<div class="form-group">
<label for="name" class="col-sm-3 control-label">短链名称</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="name">
</div>
</div>
<div class="form-group">
<label for="type" class="col-sm-3 control-label">定向跳转</label>
<div class="col-sm-9">
<select name="type" id="type" class="form-control validate[required]">
<option value="0">应用商店</option>
<option value="1">自定义URL</option>
</select>
</div>
</div>
<div class="form-group">
<label for="customValue" class="col-sm-3 control-label">自定义</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="customValue">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="save">生成</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="tipModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">提示信息</h4>
</div>
<div class="modal-body" id="tipMsg"></div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { serverError } from '@/utils/maintainer';
export default {
name: "ShortLinkView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'id', title: '短链ID', align: 'center', width: '5%' },
{ field: 'name', title: '短链名称', align: 'center', width: '5%' },
{ field: 'url', title: '短链', align: 'center', width: '5%' },
{
field: 'qrcode',
title: '二维码图片',
align: 'center',
width: '5%',
formatter: function (val, row, index) {
return "<img src='" + val + "' width='40' height='40'>";
}
},
{
field: 'type',
title: '定向跳转',
align: 'center',
width: '5%',
formatter: function (val, row, index) {
var value = '';
if (val == 0) {
value = '应用商店';
} else {
value = '自定义URL<br/>' + row.customValue;
}
return value;
}
},
{ field: 'createTime', title: '生成时间', align: 'center', width: '5%' },
{ field: 'clickNum', title: '累计点击数', align: 'center', width: '5%' },
{ field: 'uvNum', title: '累计点击uv', align: 'center', width: '5%' },
{
field: 'id',
title: '操作',
align: 'center',
width: '5%',
valign: 'middle',
formatter: function (val, row, index) {
var value = '<button class="btn btn-sm btn-default opt-edit" data-index="' + index + '">编辑</button>';
if (row.isEnabled == 0) {
value += '<button class="btn btn-sm btn-default opt-enable" data-index="' + index + '">启用</button>';
} else if (row.isEnabled == 1) {
value += '<button class="btn btn-sm btn-default opt-expire" data-index="' + index + '">失效</button>';
}
return value;
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100],
search: false,
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
page: params.pageNumber,
pageSize: params.pageSize,
linkId: $('#linkId').val(),
linkName: $('#linkName').val(),
};
return param;
},
toolbar: '#toolbar',
url: '/admin/short/link/page',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
//导出功能
$("#btnExport").on('click', function () {
$("#searchForm").submit();
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
$('#btnAdd').on('click', function () {
$("#id").val('');
$("#name").val('');
$("#type").val('');
$("#customValue").val('');
$("#editModal").modal('show');
});
$('#table').on('click', '.opt-edit', function () {
const currentData = $('#table').bootstrapTable('getData')[$(this).data('index')];
$('#id').val(currentData.id);
$('#name').val(currentData.name);
$('#type').val(currentData.type);
$('#customValue').val(currentData.customValue);
$("#editModal").modal('show');
});
$("#save").click(function () {
const msg = '确定要保存吗?';
if (confirm(msg)) {
const data = {
id: $('#id').val(),
name: $('#name').val(),
type: $('#type').val(),
customValue: $('#customValue').val(),
}
$.ajax({
type: "post",
url: "/admin/short/link/save",
data: data,
dataType: "json",
success: function (json) {
if (json.success == 'true' || json.code == 200) {
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
$("#editModal").modal('hide');
} else {
$("#tipMsg").text("保存失败." + json.message);
$("#tipModal").modal('show');
$("#editModal").modal('hide');
}
}
});
}
});
// 失效
$('#table').on('click', '.opt-expire', function () {
const currentData = $('#table').bootstrapTable('getData')[$(this).data('index')];
var id = currentData.id;
const msg = '确定要失效吗?'
if (confirm(msg)) {
$.ajax({
type: "get",
url: "/admin/short/link/expire?linkId=" + id,
dataType: "json",
success: function (json) {
if (json.success == 'true' || json.code == 200) {
$("#tipMsg").text("操作成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("操作失败." + json.message);
$("#tipModal").modal('show');
}
},
error: function (e) {
serverError(e);
}
});
}
});
// 启用
$('#table').on('click', '.opt-enable', function () {
const currentData = $('#table').bootstrapTable('getData')[$(this).data('index')];
var id = currentData.id;
const msg = '确定要启用吗?'
if (confirm(msg)) {
$.ajax({
type: "get",
url: "/admin/short/link/enable?linkId=" + id,
dataType: "json",
success: function (json) {
if (json.success == 'true' || json.code == 200) {
$("#tipMsg").text("操作成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("操作失败." + json.message);
$("#tipModal").modal('show');
}
},
error: function (e) {
serverError(e);
}
});
}
});
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,469 @@
<template>
<div class="hover-mask">
<img src="" alt="">
</div>
<div class="toast"></div>
<audio src="" id="myAudio"></audio>
<div class="content">
<div class="box box-primary">
<div class="box-body">
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar"></div>
<form action="" id="searchForm" method="POST">
申请时间&nbsp;&nbsp;<input type="text" name="timeBegin" id="beginTime" class="input-sm" value=""
placeholder="开始">
&nbsp;&nbsp;<input type="text" name="timeEnd" id="endTime" class="input-sm" value=""
placeholder="结束">
uid&nbsp;&nbsp;<input type="text" name="userId" id="userId" placeholder="">
id <input type="text" name="userErBanNo" id="erbanNo" value="" placeholder="">
大技能 <select name="skillBig" id="skillBigType" data-btn-class="btn btn-warning">
<!-- <option value="全部技能">全部技能</option>
<option value="游戏陪玩">游戏陪玩</option>
<option value="电台主播">电台主播</option>
<option value="唱见主播">唱见主播</option>
<option value="声优主播">声优主播</option> -->
</select>
小技能<select name="skill" id="skillType">
</select>
</form>
<button class="btn btn-primary" style="margin-left: 10px" id="btnSearch">搜索</button>
<div id="table"></div>
</section>
</div>
</div>
</div>
</div>
<div class="modal fade" id="addRemark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="modalLabel">备注</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="addRemarks">
<input type="hidden" id="id">
<div class="form-group">
<textarea name="" id="remarks" cols="80" rows="10" placeholder="请填写相关备注"
style="margin-left: 20px; resize: none;"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="add">提交</button>
</div>
</div>
</div>
</div>
<!-- 播放音乐弹窗 -->
<!-- <div class="modal fade" id="playVoice" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true"></span></button>
<h4 class="modal-title" id="modalLabel">音乐播放</h4>
</div>
<div class="modal-body">
<p class="audio-seconds"></p>
<audio src="" id="myAudio" style="display: none;"></audio>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div> -->
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
var voiceClickStatus = 1;
var $audio = document.getElementById('myAudio');
export default {
name: "ApplyAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [{
field: 'uid',
title: 'uid',
align: 'center',
valign: 'middle',
width: '5%'
},
{
field: 'erbanNo',
title: 'id',
align: 'center',
valign: 'middle',
width: '5%'
},
{
field: 'nick',
title: '用户名',
align: 'center',
valign: 'middle',
width: '10%'
},
{
field: 'skillTagName',
title: '认证技能名称',
align: 'center',
valign: 'middle',
width: '5%'
},
{
field: 'applyVoice',
title: '认证录音',
align: 'center',
valign: 'middle',
width: '5%',
formatter: function (val, row, index) {
if (!val) {
return '无'
}
return '<button class="voice-play btn-warning btn-sm opt-undercarriage" data-id=" ' + row.id +
' " data-url="' + row.applyVoice + '">播放<span class="voice-seconds"></span></button>'
}
},
{
field: 'applyPicture',
title: '认证图片',
align: 'center',
valign: 'middle',
width: '25%',
formatter: function (val, row, index) {
if (!val) {
return '无'
}
if (!val.match(',')) {
return '<p style="width: 50px; height: 50px"><img style="width:100%; height: 100%; margin: 0 5px;" src=" ' +
val + '" alt=""></p>';
}
var arr = val.split(',');
var str = '';
for (var i = 0; i < arr.length; i++) {
str += '<p style="width: 50px; height: 50px; display: inline-block; margin: 0 5px;"><img style="width: 100%;height: 100%;" src=" ' + arr[i] +
'" alt=""></p>';
}
return str;
}
},
{
field: 'applyTime',
title: '申请时间',
align: 'center',
valign: 'middle',
width: '25%',
formatter: function (val, index, row) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
}
},
{
field: 'tmp',
title: '操作',
align: 'center',
valign: 'middle',
width: '20%',
formatter: function (val, row, index) {
return '<button class="veto btn-warning btn-sm opt-undercarriage" data-id=" ' + row.id +
' " >否决</button> <button class="pass btn-primary btn-sm opt-undercarriage" data-id="' + row
.id + '">通过</button>'
}
},
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'underfined',
queryParams: function queryParams(params) {
var beginTime = ($('#beginTime').val()) ? ($("#beginTime").val() + ' 00:00:00') : null;
var endTime = ($('#endTime').val()) ? ($('#endTime').val() + ' 23:59:59') : null;
var param = {
pageSize: params.pageSize,
currentPage: params.pageNumber,
startTime: beginTime,
endTime: endTime,
skillTagName: ($('#skillType').val()) ? $('#skillType').val() : null,
skillType: ($('#skillBigType').val()) ? $('#skillBigType').val() : null,
uid: ($('#userId').val()) ? $('#userId').val() : null,
id: ($('#erbanNo').val()) ? $('#erbanNo').val() : null
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
// method: 'POST',
url: '/admin/live/applyList',
onLoadSuccess: function () {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
var main = {
init: function () {
this.eventRegister();
this.getData();
},
eventRegister: function () {
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
$('#skillBigType').on('change', function () {
console.log($(this).val());
$.get('/admin/skill/getSkillByTypeId', {
typeId: $(this).val()
}, function (res) {
if (res.msg) {
console.log(res.msg);
}
var str = '<option value="">全部</option>';
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillName + '">' + res.rows[i].skillName +
'</option>'
}
$('#skillType').html(str);
})
});
// 播放录音
// $('#table').on('click', '.voice-play', function () {
// $audio.src = $(this).data('url');
// $audio.load();
// var audioTimes = $audio.duration;
// $(this).find('.voice-seconds').html('(' + audioTimes + 'S)');
// $audio.play();
// })
},
getData: function () {
$.get('/admin/skill/typeList', {}, function (res) {
if (res.msg) {
console.log(res.msg);
return;
}
var str = '<option value="">全部</option>';
var smallTag_default_num = res.rows[0].skillTypeId;
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillTypeId + '">' + res.rows[i].skillTypeName + '</option>'
}
console.log(smallTag_default_num);
$('#skillBigType').html(str);
$.get('/admin/skill/getSkillByTypeId', {
// typeId: smallTag_default_num
typeId: ''
}, function (res) {
if (res.msg) {
console.log(res.msg);
}
var str = '<option value="">全部</option>';
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillName + '">' + res.rows[i].skillName +
'</option>'
}
$('#skillType').html(str);
})
});
setTimeout(function () {
}, 500)
}
};
main.init();
// 事件编辑
var $timeBegin = $('#beginTime').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var $timeEnd = $('#endTime').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
});
$timeBegin.on('changeDate', function () {
var date = $('#beginTime').datepicker('getDate');
$timeEnd.datepicker('setStartDate', date);
});
$timeEnd.on('changeDate', function () {
var date = $('#endTime').datepicker('getDate');
$timeBegin.datepicker('setEndDate', date);
})
// 点击通过或否决按钮时的事件
$('#table').on('click', '.veto', function () {
var id = $(this).attr('data-id');
$('#addRemarks').find('textarea').val('');
$('#addRemark').data('edit-id', id);
$('#addRemark').data('edit-type', 1)
$('#addRemark').modal('show');
});
$('#table').on('click', '.pass', function () {
var id = $(this).attr('data-id');
$('#addRemarks').find('textarea').val('');
$('#addRemark').data('edit-id', id);
$('#addRemark').data('edit-type', 2)
$('#addRemark').modal('show');
})
// 移动到图片放大
$('#table').on('mouseover', 'img', function (e) {
e = event || window.event;
var x = e.clientX;
var y = e.clientY;
var _url = $(this).attr('src');
$('.hover-mask').find('img').attr('src', _url)
$('.hover-mask').css({
'top': (y + 15) + 'px',
'left': (x + 60) + 'px'
});
$('.hover-mask').show();
}).on('mouseout', 'img', function () {
$('.hover-mask').hide();
});
// 点击播放音频按钮
// 播放录音
$('#table').on('click', '.voice-play', function () {
if (!$(this).data('url').match('.com') || $(this).data('url').match('activity/tutu101')) {
$('.toast').html('音频不正确,请确认').fadeIn(30).fadeOut(3000);
return;
}
console.log($(this).data('url'));
$audio.src = $(this).data('url');
$audio.load();
var _that = $(this);
$audio.addEventListener('canplay', function () {
var audioTimes = Math.round($audio.duration);
_that.find('.voice-seconds').html('(' + audioTimes + 'S)');
$audio.play();
})
})
// 选择大技能后请求接口渲染小技能
// $('#skillType').on('change', function () {
// console.log($(this).val());
// $.post('', {
// skillType: $(this).val()
// }, function (res) {
// if (res.success) {
// var str = '';
// for (var i = 0; i < res.data.length; i++) {
// str += '<option value="' + (i + 1) + '">' + re.data[i].skillTagName + '</option>';
// }
// $('#smallSkillName').html(str);
// }
// })
// })
// 点击提交
$('.modal').on('click', '#add', function () {
var $id = $('#addRemark').data('edit-id');
var $content = $('.modal').find('textarea').val();
console.log($content);
var $status = $('#addRemark').data('edit-type');
if (!$content) {
$('.toast').html('没有填写备注').fadeIn(30).fadeOut(3000);
return;
}
$.post('/admin/live/updateLiveForApplyById', {
id: $id,
status: $status,
remark: $content
}, function (res) {
if (res.success) {
$('.toast').html('提交成功').fadeIn(30).fadeOut(3000, function () {
$('#addRemark').modal('hide')
TableHelper.doRefresh('#table');
});
} else {
$('.toast').html(res.message).fadeIn(30).fadeOut(3000);
}
})
});
})
}
},
};
</script>
<style scoped>
.hover-mask {
width: 500px;
height: 500px;
position: absolute;
left: 0;
top: 0;
display: none;
z-index: 100000;
}
.hover-mask img {
width: 100%;
height: 100%;
}
.toast {
width: 700px;
height: 60px;
background-color: black;
opacity: .7;
color: white;
text-align: center;
line-height: 60px;
border-radius: 25px;
position: fixed;
left: 50%;
top: 50%;
margin-left: -350px;
margin-top: -30px;
display: none;
z-index: 10000;
}
</style>

View File

@@ -0,0 +1,451 @@
<template>
<div class="hover-mask">
<img src="" alt="">
</div>
<div class="toast"></div>
<audio src="" id="myAudio"></audio>
<div class="content">
<div class="box">
<div class="box box-primary">
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<form action="" id="searchForm" method="POST">
申请时间<input type="text" name="timeBegin" id="beginTime" class="input-sm" value="">
<input type="text" name="timeEnd" id="endTime" class="input-sm" value="">
认证时间<input type="text" name="beginAuthentication" id="authenticationBegin" value=""
class="input-sm">
<input type="text" name="endAuthentication" id="authenticationEnd" value=""
class="input-sm">
uid <input type="text" name="userId" id="userId" value="">
id <input type="text" name="userErbanNo" id="userErbanNo" value="">
大技能<select name="skillBig" id="skillBigType" data-btn-class="btn btn-warning">
</select>
小技能 <select name="skill" id="skillType" data-btn-class="btn btn-warning">
<!-- <option value="1">全部技能</option>
<option value="2">游戏陪玩</option>
<option value="3">电台主播</option>
<option value="4">唱见主播</option>
<option value="5">声优主播</option> -->
</select>
状态 <select name="status" id="authenticationStatus" data-btn-class="btn btn-warning">
<option value="">全部</option>
<option value="1">已激活</option>
<option value="0">未激活</option>
</select>
</form>
<button class="btn btn-primary" style="margin-left: 10px" id="btnSearch">搜索</button>
</div>
<div id="table"></div>
</section>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
var $audio = document.getElementById('myAudio');
export default {
name: "IdentityAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [{
field: 'uid',
title: 'uid',
align: 'center',
valign: 'middle',
width: '5%'
}, {
field: 'erbanNo',
title: 'id',
align: 'center',
valign: 'middle',
width: '5%'
},
{
field: 'nick',
title: '用户名',
align: 'center',
valign: 'middle',
width: '5%'
},
{
field: 'skillTagName',
title: '认证技能',
align: 'center',
valign: 'middle',
width: '5%'
},
{
field: 'applyVoice',
title: '认证录音',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
if (!val) {
return '无'
}
return '<button class="voice-play btn-warning btn-sm opt-undercarriage" data-id="' + row.id +
'" data-url= "' + row.applyVoice + '">播放<span class="voice-seconds"></span></button>'
}
},
{
field: 'applyPicture',
title: '认证图片',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
if (!val) {
return '无'
}
if (!val.match(',')) {
return '<p style="width: 50px; height: 50px"><img style="width:100%; height: 100%; margin: 0 5px;" src=" ' +
val + '" alt=""></p>';
}
var arr = val.split(',');
var str = '';
for (var i = 0; i < arr.length; i++) {
str += '<p style="width: 50px; height: 50px; display: inline-block; margin: 0 5px;"><img style="width: 100%;height: 100%;" src=" ' + arr[i] +
'" alt=""></p>';
}
return str;
}
},
{
field: 'createTime',
title: '申请时间',
align: 'center',
valign: 'middle',
width: '20%',
formatter: function (val, row, index) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
}
},
{
field: 'applyTime',
title: '认证时间',
align: 'center',
valign: 'middle',
width: '20%',
formatter: function (val, row, index) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
}
},
{
field: 'valid',
title: '状态',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
var obj = {
0: '未激活',
1: '已激活'
};
return obj[row.valid];
}
},
{
field: 'tmp',
title: '操作',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
// 给状态渲染
if (row.valid == 1) {
return '<button id="abolish" class="abolish btn-warning btn-sm opt-undercarriage" data-id="' + row.id +
'">取消激活</button><button id="delete" class="delete btn-warning btn-sm opt-undercarriage" data-id="' + row
.id + '" style="margin-top: 5px;">删除</button>'
} else {
return '<button id="activate" class="activate btn-primary btn-sm opt-undercarriage" data-id="' + row.id + '">激活</button><button id="delete" class="delete btn-warning btn-sm opt-undercarriage" data-id="' + row.id + '" style="margin-top: 5px;">删除</button>'
}
// return '<button class="abolish btn-warning btn-sm opt-undercarriage" data-id="'+ row.id +'"></button><button class="delete btn-warning btn-sm opt-undercarriage" data-id="' + row.id + '">删除</button>';
}
},
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var beginTime = ($('#beginTime').val()) ? ($('#beginTime').val() + ' 00:00:00') : null;
var endTime = ($('#endTime').val()) ? ($('#endTime').val() + ' 23:59:59') : null;
var authenticationBegin = ($('#authenticationBegin').val()) ? ($('#authenticationBegin').val() +
' 00:00:00') : null;
var authenticationEnd = ($('#authenticationEnd').val()) ? ($('#authenticationEnd').val() + ' 23:59:59') :
null;
var _val = ($('#authenticationStatus').val()) ? $('#authenticationStatus').val() : null;
var param = {
uid: ($('#userId').val()) ? $('#userId').val() : null,
id: ($('#userErbanNo').val()) ? $('#userErbanNo').val() : null,
skillTagName: ($('#skillType').val()) ? $("#skillType").val() : null,
skillType: ($('#skillBigType').val()) ? $('#skillBigType').val() : null,
applyStartTime: beginTime,
applyEndTime: endTime,
approveStartTime: authenticationBegin,
approveEndTime: authenticationEnd,
currentPage: params.pageNumber,
pageSize: params.pageSize,
status: _val
}
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
// method: 'POST',
url: '/admin/live/getListForVerified',
onLoadSuccess: function () {
console.log('load success;');
},
onLoadError: function () {
console.log('load fail');
}
});
var main = {
init: function () {
this.eventRegister();
this.getData();
},
eventRegister: function () {
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
$('#skillBigType').on('change', function () {
console.log($(this).val());
$.get('/admin/skill/getSkillByTypeId', {
typeId: $(this).val()
}, function (res) {
if (res.msg) {
console.log(res.msg);
}
var str = '<option value="">全部</option>';
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillName + '">' + res.rows[i].skillName +
'</option>'
}
$('#skillType').html(str);
})
});
// 播放录音
$('#table').on('click', '.voice-play', function () {
if (!$(this).data('url').match('.com') || $(this).data('url').match('activity/tutu101')) {
$('.toast').html('音频不正确,请确认').fadeIn(30).fadeOut(3000);
return;
}
$audio.src = $(this).data('url');
$audio.load();
var _that = $(this);
$audio.addEventListener('canplay', function () {
var audioTimes = Math.round($audio.duration);
_that.find('.voice-seconds').html('(' + audioTimes + 'S)');
$audio.play();
})
})
// 取消激活
$('#table').on('click', '#abolish', function () {
$.post('/admin/live/updateLiveForApplyById', { id: $(this).data('id'), status: 3, remark: '' }, function (res) {
if (res.success) {
$('.toast').html('取消成功').fadeIn(30).fadeOut(3000, function () {
TableHelper.doRefresh('#table');
})
} else {
console.log('取消激活:', res.msg);
}
})
})
// 激活
$('#table').on('click', '#activate', function () {
$.post('/admin/live/updateLiveForApplyById', { id: $(this).data('id'), status: 4, remark: '' }, function (res) {
if (res.success) {
$('.toast').html('激活成功').fadeIn(30).fadeOut(3000, function () {
TableHelper.doRefresh('#table');
})
} else {
console.log('激活:', res.msg);
}
})
})
// 删除
$('#table').on('click', '#delete', function () {
$.post('/admin/live/updateLiveForApplyById', { id: $(this).data('id'), status: 5, remark: '' }, function (res) {
if (res.success) {
$('.toast').html('删除成功').fadeIn(30).fadeOut(3000, function () {
TableHelper.doRefresh('#table');
})
} else {
console.log('删除:', res.msg);
}
})
})
},
getData: function () {
$.get('/admin/skill/typeList', {}, function (res) {
if (res.msg) {
console.log(res.msg);
return;
}
var str = '<option value="">全部</option>';
var smallTag_default_num = res.rows[0].skillTypeId;
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillTypeId + '">' + res.rows[i].skillTypeName + '</option>'
}
$('#skillBigType').html(str);
$.get('/admin/skill/getSkillByTypeId', {
// typeId: smallTag_default_num
typeId: ''
}, function (res) {
if (res.msg) {
console.log(res.msg);
}
var str = '<option value="">全部</option>';
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillName + '">' + res.rows[i].skillName +
'</option>'
}
$('#skillType').html(str);
})
});
setTimeout(function () {
}, 100)
}
};
main.init();
// 事件编辑
var $timeBegin = $('#beginTime').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var $timeEnd = $('#endTime').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
})
var $authenticationBegin = $('#authenticationBegin').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
})
var $authenticationEnd = $('#authenticationEnd').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$timeBegin.on('changeDate', function () {
var date = $('#beginTime').datepicker('getDate');
$timeEnd.datepicker('setStartDate', date)
})
$timeEnd.on('changeDate', function () {
var date = $('#endTime').datepicker('getDate');
$timeBegin.datepicker('setEndDate', date);
})
$authenticationBegin.on('changeDate', function () {
var date = $('#authenticationBegin').datepicker('getDate');
$authenticationEnd.datepicker('setStartDate', date);
});
$authenticationEnd.on('changeDate', function () {
var date = $('#authenticationEnd').datePicker('getDate');
$authenticationBegin.datepicker('setEndDate', date);
})
// 移动到图片放大
$('#table').on('mouseover', 'img', function (e) {
e = event || window.event;
var x = e.clientX;
var y = e.clientY;
var _url = $(this).attr('src');
$('.hover-mask').find('img').attr('src', _url)
$('.hover-mask').css({
'top': (y + 15) + 'px',
'left': (x + 60) + 'px'
});
$('.hover-mask').show();
}).on('mouseout', 'img', function () {
$('.hover-mask').hide();
});
})
}
},
};
</script>
<style scoped>
input {
margin: 10px 5px;
}
.toast {
width: 700px;
height: 60px;
background-color: black;
opacity: .7;
color: white;
text-align: center;
line-height: 60px;
border-radius: 25px;
position: fixed;
left: 50%;
top: 50%;
margin-left: -350px;
margin-top: -30px;
display: none;
z-index: 10000;
}
.hover-mask {
width: 500px;
height: 500px;
position: absolute;
left: 0;
top: 0;
display: none;
z-index: 100000;
}
.hover-mask img {
width: 100%;
height: 100%;
}
</style>

View File

@@ -0,0 +1,428 @@
<template>
<div class="hover-mask">
<img src="" alt="">
</div>
<audio src="" id="myAudio"></audio>
<div class="toast"></div>
<div class="content">
<div class="box">
<div class="box box-primary">
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar"></div>
<form action="" id="searchForm" method="POST">
申请时间&nbsp;&nbsp;<input type="text" name="timeBegin" id="beginTime" class="input-sm" value="">
&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="timeEnd" id="endTime" class="input-sm"
value="">
&nbsp;&nbsp;操作时间&nbsp;&nbsp;<input type="text" name="tmpBeginTime" id="tmpBegin" value="">
&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="tmpEndTime" id="tmpEnd" value="">
&nbsp;&nbsp;操作记录&nbsp;&nbsp;<select name="tmpRecords" id="records"
data-btn0class="btn btn-warning">
<option value="">全部</option>
<option value="1">否决</option>
<option value="2">通过</option>
<option value="3">取消激活</option>
<option value="4">激活</option>
<option value="5">删除</option>
</select>
&nbsp;&nbsp;大技能&nbsp;&nbsp;<select name="skillBig" id="skillBigType"
data-btn-class="btn btn-warning">
</select>
&nbsp;&nbsp;小技能&nbsp;&nbsp;<select name="skill" id="skillType" data-btn-calss="btn btn-warning">
<!-- <option value="1">全部</option>
<option value="2">游戏陪玩</option>
<option value="3">电台主播</option>
<option value="4">唱见主播</option>
<option value="5">声优主播</option> -->
</select>
&nbsp;&nbsp;uid&nbsp;&nbsp;<input type="text" name="userId" id="userId">
&nbsp;&nbsp;id&nbsp;&nbsp;<input type="text" name="userErbanNo" id="userErbanNo">
&nbsp;&nbsp;操作人&nbsp;&nbsp;<input type="text" name="operator" id="operator">
</form>
<button class="btn btn-primary" id="btnSearch" style="margin-left: 10px;">搜索</button>
<div id="table"></div>
</section>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
var smallTag_default_num;
var $audio = document.getElementById('myAudio');
export default {
name: "OptRecordAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [{
field: 'uid',
title: 'uid',
width: '5%',
align: 'center',
valign: 'middle'
}, {
field: 'erbanNo',
title: 'id',
width: '5%',
align: 'center',
valign: 'middle'
},
{
field: 'nick',
title: '用户名',
width: '15%',
align: 'center',
valign: 'middle'
},
{
field: 'skillTagName',
title: '认证技能名称',
width: '5%',
align: 'center',
valign: 'middle'
},
{
field: 'applyVoice',
title: '认证录音',
width: '5%',
align: 'center',
valign: 'middle',
formatter: function (val, row, index) {
if (!val) {
return '无'
}
return '<button class="voice-play btn-warning btn-sm opt-undercarriage" data-id=" ' + row.id +
' " data-url="' + row.applyVoice +
'" style="text-align: center;">播放<span class="voice-seconds"></span></button>'
}
},
{
field: 'applyPicture',
title: '认证图片',
width: '20%',
align: 'center',
valign: 'middle',
formatter: function (val, index, row) {
if (!val) {
return '无'
}
if (!val.match(',')) {
return '<p style="width: 50px; height: 50px"><img style="width:100%; height: 100%; margin: 0 5px;" src=" ' +
val + '" alt=""></p>';
}
var arr = val.split(',');
var str = '';
for (var i = 0; i < arr.length; i++) {
str +=
'<p style="width: 50px; height: 50px; display: inline-block; margin: 0 5px;"><img style="width: 100%;height: 100%;" src=" ' +
arr[i] +
'" alt=""></p>';
}
return str;
}
},
{
field: 'applyTime',
title: '申请时间',
width: '10%',
align: 'center',
valign: 'middle',
formatter: function (val, row, index) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
}
},
{
field: 'dealTime',
title: '操作时间',
width: '10%',
align: 'center',
valign: 'middle',
formatter: function (val, row, index) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
}
},
{
field: 'result',
title: '操作记录',
width: '5%',
align: 'center',
valign: 'middle',
formatter: function (val, row, index) {
var obj = {
1: '否决',
2: '通过',
3: '取消激活',
4: '激活',
5: '删除'
};
return obj[row.result];
}
},
{
field: 'remark',
title: '备注',
width: '15%',
align: 'center',
valign: 'middle'
},
{
field: 'handler',
title: '操作人',
width: '5%',
align: 'center',
valign: 'middle'
},
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function (params) {
var beginTime = ($('#beginTime').val()) ? ($('#beginTime').val() + ' 00:00:00') : null;
var endTime = ($('#endTime').val()) ? ($('#endTime').val() + ' 23:59:59') : null;
var tmpBegin = ($('#tmpBegin').val()) ? ($('#tmpBegin').val() +
' 00:00:00') : null;
var tmpEnd = ($('#tmpEnd').val()) ? ($('#tmpEnd').val() + ' 23:59:59') : null;
var param = {
pageSize: params.pageSize,
currentPage: params.pageNumber,
applyStartTime: beginTime,
applyEndTime: endTime,
dealStartTime: tmpBegin,
dealEndTime: tmpEnd,
skillTagName: ($('#skillType').val()) ? $('#skillType').val() : null,
dealStatus: ($("#records").val()) ? $('#records').val() : null,
handler: ($('#operator').val()) ? $('#operator').val() : null,
uid: ($('#userId').val()) ? $('#userId').val() : null,
id: ($('#userErbanNo').val()) ? $('#userErbanNo').val() : null
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
// method: 'POST',
url: '/admin/live/applyLogList',
onLoadSuccess: function () {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
var main = {
init: function () {
this.eventRegister();
this.getData();
},
eventRegister: function () {
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
})
$('#skillBigType').on('change', function () {
console.log($(this).val());
$.get('/admin/skill/getSkillByTypeId', {
typeId: $(this).val()
}, function (res) {
if (res.msg) {
console.log(res.msg);
}
var str = '<option value="">全部</option>';
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillName + '">' + res.rows[i].skillName +
'</option>'
}
$('#skillType').html(str);
})
});
// 播放录音
$('#table').on('click', '.voice-play', function () {
if (!$(this).data('url').match('.com') || $(this).data('url').match('activity/tutu101')) {
$('.toast').html('音频不正确,请确认').fadeIn(30).fadeOut(3000);
return;
}
$audio.src = $(this).data('url');
$audio.load();
var _that = $(this);
$audio.addEventListener('canplay', function () {
var audioTimes = Math.round($audio.duration);
_that.find('.voice-seconds').html('(' + audioTimes + 'S)');
$audio.play();
})
})
// 移动到图片放大
$('#table').on('mouseover', 'img', function (e) {
e = event || window.event;
var x = e.clientX;
var y = e.clientY;
var _url = $(this).attr('src');
$('.hover-mask').find('img').attr('src', _url)
$('.hover-mask').css({
'top': (y + 15) + 'px',
'left': (x + 60) + 'px'
});
$('.hover-mask').show();
}).on('mouseout', 'img', function () {
$('.hover-mask').hide();
});
},
getData: function () {
$.get('/admin/skill/typeList', {}, function (res) {
if (res.msg) {
console.log(res.msg);
return;
}
var str = '<option value="">全部</option>';
smallTag_default_num = res.rows[0].skillTypeId;
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillTypeId + '">' + res.rows[i].skillTypeName +
'</option>'
}
$('#skillBigType').html(str);
$.get('/admin/skill/getSkillByTypeId', {
// typeId: smallTag_default_num
typeId: ''
}, function (res) {
if (res.msg) {
console.log(res.msg);
}
var str = '<option value="">全部</option>';
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillName + '">' + res.rows[i].skillName +
'</option>'
}
$('#skillType').html(str);
})
});
setTimeout(function () {
}, 500)
}
};
main.init();
// 事件编辑
var $timeBegin = $('#beginTime').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var $timeEnd = $('#endTime').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var $tmpBegin = $('#tmpBegin').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var $tmpEnd = $('#tmpEnd').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$timeBegin.on('changeDate', function () {
var date = $('#beginTime').datepicker('getDate');
$timeEnd.datepicker('setStartDate', date);
});
$timeEnd.on('changeDate', function () {
var date = $('#endTime').datepicker('getDate');
$timeBegin.datepicker('setStartDate', date);
});
$tmpBegin.on('changeDate', function () {
var date = $('#tmpBegin').datepicker('getDate');
$tmpEnd.datepicker('setStartDate', date);
});
$tmpEnd.on('changeDate', function () {
var date = $('#tmpEnd').datepicker('getDate');
$tmpBegin.datepicker('setStartDate', date);
});
})
}
},
};
</script>
<style scoped>
input {
margin: 10px 5px;
}
#searchForm {
display: inline-block;
}
#myAudio {
display: none;
}
.toast {
width: 700px;
height: 60px;
background-color: black;
opacity: .7;
color: white;
text-align: center;
line-height: 60px;
border-radius: 25px;
position: fixed;
left: 50%;
top: 50%;
margin-left: -350px;
margin-top: -30px;
display: none;
z-index: 10000;
}
.hover-mask {
width: 500px;
height: 500px;
position: absolute;
left: 0;
top: 0;
display: none;
z-index: 100000;
}
.hover-mask img {
width: 100%;
height: 100%;
}
</style>

View File

@@ -0,0 +1,782 @@
<template>
<div class="hover-mask">
<img src="" alt="">
</div>
<div class="toast"></div>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<div id="bigTag" class="tag-tab bg-aqua">大技能标签管理</div>
<div id="smallTag" class="tag-tab">小技能标签管理</div>
<button class="btn btn-primary" id="bigTagAddBtn">新增大标签</button>
<button class="btn btn-primary" id="smallTagAddBtn">新增小标签</button>
</div>
<div id="table"></div>
</section>
</div>
</div>
</section>
<!-- 新增大技能弹窗 -->
<div class="modal fade" id="addBigMark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">新增大技能</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="addBigTag">
大技能标签名称<input type="text" name="bigTagName" id="bigTagName" class="input-sm
">
<br />
功能(1:录音,2:图片)<input type="text" name="skillType" id="skillType" class="input-sm"
style="margin-top: 10px;">
</form>
</div>
<div class="modal-footer">
<button class="btn btn-warning" type="button" data-dismiss="modal">关闭</button>
<button class="btn btn-primary" type="button" id="addBigTagBtn">添加</button>
</div>
</div>
</div>
</div>
<!-- 编辑大技能标签弹窗 -->
<div class="modal fade" id="editBigMark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">编辑大技能标签</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="editBigTag">
<input type="hidden" id="editTypeId">
大技能标签名称<input type="text" name="newBigTagName" id="newBigTagName" class="input-sm">
<br />
功能(1:录音,2:图片)<input type="text" name="editSkillType" id="editSkillType" class="input-sm"
style="margin-top: 10px;">
</form>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-primary">关闭</button>
<button type="button" id="editBigBtn" class="btn btn-primary">修改</button>
</div>
</div>
</div>
</div>
<!-- 删除大技能标签弹窗 -->
<div class="modal fade" id="deleteBigMark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">删除大技能标签</h4>
</div>
<div class="modal-body" style="text-align: center;">
<p style="width: 200px; text-align: center;">删除当前大标签及包含的小标签用户数据将无法恢复</p>
<input type="hidden" id="deleteTypeId">
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-primary">关闭</button>
<button type="button" id="deleteBigBtn" class="btn btn-warning">删除</button>
</div>
</div>
</div>
</div>
<!-- 添加小技能标签弹窗 -->
<div class="modal fade" id="addSmallMark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="">新增小技能标签</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="addSmallTag">
大技能标签<select name="" id="addBigTagChoose" style="margin-bottom: 10px;"></select>
<br />
小技能标签<input type="text" id="smallTagName">
<br />
<label for="">小技能标签图片</label>
<div class="form-group" style="margin-left: 20px;">
<img src="" alt="" id="imgUrl" style="width: 90px;height: 90px;">
<input type="file" id="uploadFile" name="uploadFile"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<button class="btn btn-success" type="button" id="uploadBtn">上传</button>
<input type="hidden" id="prizeImgUrl" name="prizeImgUrl"
class="form-control validate[required]">
</div>
<label for="">游戏标签图片</label>
<div class="form-group" style="margin-left: 20px;">
<img src="" alt="" id="imgUrl2" style="width: 90px;height: 40px;">
<input type="file" id="uploadFile2" name="uploadFile"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<button class="btn btn-success" type="button" id="uploadBtn2">上传</button>
<input type="hidden" id="prizeImgUrl2" name="prizeImgUrl2"
class="form-control validate[required]">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-warning" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="addSmallBtn">添加</button>
</div>
</div>
</div>
</div>
<!-- 编辑小技能标签弹窗 -->
<div class="modal fade" id="editSmallMark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="">编辑小技能标签</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="editSmallTag">
<input type="hidden" id="editSmallTagId">
大技能标签<select name="" id="editBigTagChoose"></select>
<br>
小技能标签<input type="text" id="editSmallTagName">
<br>
<label for="">小技能标签图标</label>
<div class="form-group" style="margin-left: 20px;">
<img src="" alt="" id="editImgUrl" style="width: 90px;height: 90px;">
<input type="file" id="editUploadFile" name="uploadFile"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<button class="btn btn-success" type="button" id="editUploadBtn">重新上传</button>
<input type="hidden" id="editPrizeImgUrl" name="editPrizeImgUrl"
class="form-control validate[required]">
</div>
<label for="">游戏标签图片</label>
<div class="form-group" style="margin-left: 20px;">
<img src="" alt="" id="editImgUrl2" style="width: 90px;height: 40px;">
<input type="file" id="editUploadFile2" name="uploadFile"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<button class="btn btn-success" type="button" id="editUploadBtn2">重新上传</button>
<input type="hidden" id="editPrizeImgUrl2" name="editPrizeImgUrl2"
class="form-control validate[required]">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-warning" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="editSmallBtn">修改</button>
</div>
</div>
</div>
</div>
<!-- 删除小技能标签弹窗 -->
<div class="modal fade" id="deleteSmallMark" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-label="Close" class="close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="modalLabel">删除小技能标签</h4>
</div>
<div class="modal-body" style="text-align: center;">
<p style="width: 200px; text-align: center;">删除当前小标签技能用户数据将无法恢复</p>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-warning">关闭</button>
<button class="btn btn-primary" type="button" id="deleteSmallTagBtn">删除</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SkillTagAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
refreshBigTag();
renderBigType();
// refreshSmallTag();
var main = {
init: function () {
this.eventRegister();
},
eventRegister: function () {
$('.tag-tab').on('click', function () {
if ($(this).hasClass('bg-aqua')) {
return;
}
$(this).addClass('bg-aqua').siblings('.tag-tab').removeClass('bg-aqua');
var index = $(this).index();
if (index == 0) {
$('#bigTagAddBtn').show();
$('#smallTagAddBtn').hide();
refreshBigTag();
} else {
$('#smallTagAddBtn').show();
$('#bigTagAddBtn').hide();
refreshSmallTag();
}
});
// 大标签相关按钮功能
$('#bigTagAddBtn').on('click', function () {
$('#addBigMark').modal('show');
clearModal('#addBigTag');
});
$('#addBigMark #addBigTagBtn').on('click', function () {
var val = $('#bigTagName').val();
if (val.length > 4) {
$('.toast').html('字数超过4个请重新定义').fadeIn(30).fadeOut(3000);
return;
}
if (!val || !$('#addBigMark #skillType').val()) {
$('.toast').html('技能名或功能没有填写,请填写').fadeIn(30).fadeOut(3000);
return;
}
$.post('/admin/skill/addType', {
name: val,
uploadType: $('#addBigMark #skillType').val()
}, function (res) {
if (res.success) {
$('.toast').html('添加成功').fadeIn(30).fadeOut(3000);
$("#addBigMark").modal('hide');
refreshBigTag();
} else {
console.log('新增错误', res.msg);
}
})
});
$('#table').on('click', '.editTypeBtn', function () {
clearModal("#editBigTag");
$('#editBigMark').modal("show");
var id = parseInt($(this).data('id'));
var data = $('#table').bootstrapTable('getRowByUniqueId', id);
$('#editTypeId').val(id);
var name = data.skillTypeName;
$('#newBigTagName').val(name);
});
$('#editBigBtn').on('click', function () {
var id = $('#editTypeId').val();
var val = $('#newBigTagName').val();
if (val.length > 4) {
$('.toast').html('字数超过4个请重新定义').fadeIn(30).fadeOut(3000);
return;
}
if (!val || !$('#editBigMark #editSkillType').val()) {
$('toast').html('技能名或功能没有填写,请填写').fadeIn(30).fadeOut(3000);
return;
}
$.post('/admin/skill/updateSkillTypeInfo', {
id: id,
name: val,
uploadType: $('#editBigMark #editSkillType').val()
}, function (res) {
if (res.success) {
$('.toast').html('修改成功').fadeIn(30).fadeOut(3000);
$("#editBigMark").modal('hide');
refreshBigTag();
} else {
console.log('修改错误', res.msg);
}
})
});
$('#table').on('click', '.deleteTypeBtn', function () {
$('#deleteBigMark').modal("show");
var id = parseInt($(this).data('id'));
$('#deleteTypeId').val(id);
});
$('#deleteBigBtn').on('click', function () {
var id = $('#deleteTypeId').val();
$.post('/admin/skill/deleteType', {
skillTypeId: id
}, function (res) {
if (res.success) {
$('.toast').html('删除成功').fadeIn(30).fadeOut(3000);
$("#deleteBigMark").modal('hide');
refreshBigTag();
} else {
console.log('删除错误', res.msg);
}
})
});
// 新增小技能标签
$('#smallTagAddBtn').on('click', function () {
clearModal('#addSmallTag');
$('#addSmallMark').modal('show');
});
$('#addSmallBtn').on('click', function () {
var typeId = $('#addBigTagChoose').val();
var skillName = $("#smallTagName").val();
if (skillName.length > 5) {
$('.toast').html('字数超过5个请重新定义').fadeIn(30).fadeOut(3000);
return;
}
if (!skillName) {
$('.toast').html('技能名不能为空').fadeIn(30).fadeOut(3000);
return;
}
var skillPicture = $('#prizeImgUrl').val();
var skillTag = $('#prizeImgUrl2').val();
$.ajax({
type: 'post',
url: '/admin/skill/add',
data: {
typeId: typeId,
skillName: skillName,
skillPicture: skillPicture,
skillTag: skillTag
},
success: function (res) {
if (res.success) {
$('.toast').html('添加成功').fadeIn(30).fadeOut(3000);
$("#addSmallMark").modal('hide');
refreshSmallTag();
} else {
console.log('添加错误', res.msg);
}
}
})
});
$('#table').on('click', '.editSkillBtn', function () {
clearModal("#editSmallTag");
$('#editSmallMark').modal("show");
var id = parseInt($(this).data('id'));
var data = $('#table').bootstrapTable('getRowByUniqueId', id);
console.log(data);
$('#editSmallTagId').val(id);
$('#editBigTagChoose').val(data.skillType);
$('#editSmallTagName').val(data.skillName);
var skillPicUrl = data.skillPicture;
var skillTagUrl = data.skillTag;
$('#editImgUrl').attr('src', skillPicUrl);
$('#editPrizeImgUrl').val(skillPicUrl);
$('#editImgUrl2').attr("src", skillTagUrl);
$('#editPrizeImgUrl2').val(skillTagUrl);
});
$('#editSmallBtn').on('click', function () {
var id = $('#editSmallTagId').val();
var typeId = $('#editBigTagChoose').val();
var skillName = $("#editSmallTagName").val();
if (skillName.length > 5) {
$('.toast').html('字数超过5个请重新定义').fadeIn(30).fadeOut(3000);
return;
}
if (!skillName) {
$('.toast').html('技能名不能为空').fadeIn(30).fadeOut(3000);
return;
}
var skillPicture = $('#editPrizeImgUrl').val();
var skillTag = $('#editPrizeImgUrl2').val();
var paramData = {
id: id,
skillName: skillName,
skillPicture: skillPicture,
skillTag: skillTag,
skillType: typeId
};
$.ajax({
type: 'post',
url: '/admin/skill/updateSkillInfo',
data: {
request: JSON.stringify(paramData)
},
success: function (res) {
if (res.success) {
$('.toast').html('编辑成功').fadeIn(30).fadeOut(3000);
$("#editSmallMark").modal('hide');
refreshSmallTag();
} else {
console.log('添加错误', res.msg);
}
}
})
});
$('#uploadBtn').on('click', function () {
uploadFile('uploadFile', '#imgUrl', '#prizeImgUrl');
});
$('#uploadBtn2').on('click', function () {
uploadFile('uploadFile2', '#imgUrl2', '#prizeImgUrl2');
});
$('#editUploadBtn').on('click', function () {
uploadFile('editUploadFile', '#editImgUrl', '#editPrizeImgUrl');
});
$('#editUploadBtn2').on('click', function () {
uploadFile('editUploadFile2', '#editImgUrl2', '#editPrizeImgUrl2');
});
// 移动到图片放大
$('#table').on('mouseover', 'img', function (e) {
e = event || window.event;
var x = e.clientX;
var y = e.clientY;
var _url = $(this).attr('src');
$('.hover-mask').find('img').attr('src', _url)
$('.hover-mask').css({
'top': (y + 15) + 'px',
'left': (x + 60) + 'px'
});
$('.hover-mask').show();
}).on('mouseout', 'img', function () {
$('.hover-mask').hide();
});
}
};
main.init();
})
}
},
};
function refreshBigTag() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [{
field: 'skillTypeId',
title: '大标签id',
align: 'center',
valign: 'middle',
width: '20%'
},
{
field: 'skillTypeName',
title: '大技能标签',
align: 'center',
valign: 'middle',
width: '20%'
},
{
field: 'skillNameList',
title: '小技能标签',
align: 'center',
valign: 'middle',
width: '35%',
formatter: function (val, row, index) {
var str = val.join(',');
return str;
}
},
{
field: 'uploadType',
title: '功能(1:录音,2:图片)',
align: 'center',
valign: 'middle',
width: '5%',
},
{
field: 'tmp',
title: '操作',
align: 'center',
valign: 'middle',
width: '20%',
formatter: function (val, row, index) {
console.log(row);
var str = '<button class="btn btn-primary editTypeBtn" type="button" data-id="' + row.skillTypeId +
'">编辑</button>';
// '<button class="btn btn-warning deleteTypeBtn" type="button" data-id="' + row.skillTypeId + '">删除</button>'
return str;
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function (params) {
var param = {
pageSize: params.pageSize,
currentPage: params.pageNumber,
};
return param;
},
uniqueId: 'skillTypeId',
toolbar: '#toolbar',
url: '/admin/skill/typeList',
onLoadSuccess: function () {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
}
function refreshSmallTag() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [{
field: 'id',
title: 'id',
align: 'center',
valign: 'middle',
width: '15%'
},
{
field: 'skillName',
title: '小技能标签',
align: 'center',
valign: 'middle',
width: '25%'
},
{
field: 'skillPicture',
title: '技能图标',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
return "<img src='" + val + "' width='60' height='60'>";
}
},
{
field: 'skillTag',
title: '技能小图标',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
return "<img src='" + val + "' width='60' height='20'>";
}
},
{
field: 'createTime',
title: '创建时间',
align: 'center',
valign: 'middle',
width: '25%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{
field: 'tmp',
title: '操作',
align: 'center',
valign: 'middle',
width: '15%',
formatter: function (val, row, index) {
var str = '<button class="btn btn-primary editSkillBtn" type="button" data-id="' +
row.id +
'">编辑</button>';
// '<button class="btn btn-warning deleteSkillBtn" type="button" data-id="' +
// row.id + '">删除</button>'
return str;
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function (params) {
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
skillName: ''
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/skill/skillList',
onLoadSuccess: function () {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
}
function uploadFile($id, imgUrlEle, prizeImgEle) {
$.ajaxFileUpload({
fileElementId: $id,
url: '/admin/upload/img',
type: 'post',
dataType: 'json',
secureuri: false,
async: true,
success: function (json) {
if (json.path) {
if (json.path != '') {
$(imgUrlEle).attr('src', json.path);
$(prizeImgEle).val(json.path);
} else {
console.log('图片上传失败');
}
} else {
console.log(json);
}
},
error: function (data, status, e) {
console.log(e);
}
})
}
function clearModal(ele) {
$(ele).find('input[type=text],input[type=hidden],input[type=file]').each(function () {
$(this).val('');
});
$(ele).find('img').attr('src', '');
}
function renderBigType() {
$.get('/admin/skill/typeList', {}, function (res) {
if (res.msg) {
console.log(res.msg);
return;
}
var str = '';
var smallTag_default_num = res.rows[0].skillTypeId;
for (var i = 0; i < res.rows.length; i++) {
str += '<option value="' + res.rows[i].skillTypeId + '">' + res.rows[i].skillTypeName + '</option>'
}
$('#addBigTagChoose').html(str);
$('#editBigTagChoose').html(str);
});
}
</script>
<style scoped>
.toast {
width: 700px;
height: 60px;
background-color: black;
opacity: .7;
color: white;
text-align: center;
line-height: 60px;
border-radius: 25px;
position: fixed;
left: 50%;
top: 50%;
margin-left: -350px;
margin-top: -30px;
display: none;
z-index: 10000;
}
.addcolor {
width: 150px;
height: 50px;
border: 1px solid #999;
background-color: #999;
color: white;
text-align: center;
line-height: 50px;
display: inline-block;
cursor: pointer;
}
.defaultcolor {
width: 150px;
height: 50px;
border: 1px solid #999;
background-color: white;
color: black;
text-align: center;
line-height: 50px;
display: inline-block;
cursor: pointer;
}
.tag-tab {
text-align: center;
width: 130px;
border-radius: 4px;
border: 1px solid #000;
display: inline-block;
margin-right: 6px;
}
.bars {
width: 100%;
}
#smallTagAddBtn {
display: none;
}
.hover-mask {
width: 200px;
height: 200px;
position: absolute;
left: 0;
top: 0;
display: none;
z-index: 100000;
}
.hover-mask img {
width: 100%;
height: 100%;
}</style>

View File

@@ -0,0 +1,505 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<div id="toolbar">
<div class="col-sm-12">
福袋<select name="luckyBagId" id="qLuckyBagId">
</select>
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnAddModal" class="btn btn-sm btn-primary"><i
class="glyphicon glyphicon-plus"></i>新增</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-4">
<span>礼物种类</span>
<span class="total"></span>
</div>
<div class="col-sm-4">
<span>期望值</span>
<span class="expectValue"></span>
</div>
<div class="col-sm-4">
<span>福袋状态</span>
<span class="giftStatusStr"></span>
</div>
</div>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</section>
<!-- 增加弹框 -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="addModalLabel">增加福袋奖池</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="addModalForm">
<div class="form-group">
<label for="modal_luckyBagId" class="col-sm-3 control-label">福袋id<font color="red">*</font>
</label>
<div class="col-sm-9">
<select name="luckyBagId" id="modal_luckyBagId" class="form-control">
</select>
</div>
</div>
<div class="form-group">
<label for="modal_giftId" class="col-sm-3 control-label">礼物id<font color="red">*</font></label>
<div class="col-sm-9">
<input type="text" class="form-control" name="giftId" id="modal_giftId" placeholder="">
</div>
</div>
<div class="form-group">
<label for="modal_rate" class="col-sm-3 control-label">概率<font color="red">*</font></label>
<div class="col-sm-9">
<input type="text" class="form-control" name="rate" id="modal_rate"
placeholder="百分比最多3位小数默认礼物概率自动补全可不填">
</div>
</div>
<div class="form-group">
<label for="modal_prizeLevel" class="col-sm-3 control-label">奖品等级<font color="red">*</font>
</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="prizeLevel" id="modal_prizeLevel"
placeholder="">
</div>
</div>
<div class="form-group">
<label for="modal_defaultGift" class="col-sm-3 control-label">默认礼物<font color="red">*</font>
</label>
<div class="col-sm-9">
<select name="defaultGift" id="modal_defaultGift" class="form-control">
<option value="false"></option>
<option value="true"></option>
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="btnAddModalConfirm">确定</button>
</div>
</div>
</div>
</div>
<!-- 编辑弹框 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editModalLabel">编辑福袋奖池</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="addForm">
<input type="hidden" name="id" id="id" />
<input type="hidden" name="luckyBagId" id="luckyBagId" />
<div class="form-group">
<label for="giftId" class="col-sm-3 control-label">礼物id<font color="red">*</font></label>
<div class="col-sm-9">
<input type="text" class="form-control" name="giftId" id="giftId" placeholder="">
</div>
</div>
<div class="form-group">
<label for="rate" class="col-sm-3 control-label">概率<font color="red">*</font></label>
<div class="col-sm-9">
<input type="text" class="form-control" name="rate" id="rate"
placeholder="百分比最多3位小数默认礼物概率自动补全可不填">
</div>
</div>
<div class="form-group">
<label for="prizeLevel" class="col-sm-3 control-label">奖品等级<font color="red">*</font></label>
<div class="col-sm-9">
<input type="text" class="form-control" name="prizeLevel" id="prizeLevel" placeholder="">
</div>
</div>
<div class="form-group">
<label for="defaultGift" class="col-sm-3 control-label">默认礼物<font color="red">*</font></label>
<div class="col-sm-9">
<select name="defaultGift" id="defaultGift" class="form-control">
<option value="false"></option>
<option value="true"></option>
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="btnEditModalConfirm">确定</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "LuckyBagPoolView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getLuckyBagGift();
$('.datetime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'id', title: 'ID', align: 'center', width: '5%' },
{ field: 'luckyBagId', title: '福袋礼物ID', align: 'center', width: '5%' },
{ field: 'giftId', title: '子礼物ID', align: 'center', width: '5%' },
{ field: 'giftName', title: '子礼物名称', align: 'center', width: '5%' },
{
field: 'rate', title: '中奖率', align: 'center', width: '5%',
formatter: function (val, row, index) {
return val + '%';
}
},
{ field: 'prizeLevel', title: '奖品等级', align: 'center', width: '5%' },
{ field: 'giftValue', title: '平台价值(礼物价值)', align: 'center', width: '5%' },
{ field: 'expectValue', title: '期望值', align: 'center', width: '5%' },
{
field: 'defaultGift', title: '默认礼物', align: 'center', width: '5%',
formatter: function (val, row, index) {
return val ? "是" : "否";
}
},
{
field: 'id',
title: '操作',
align: 'center',
width: '10%',
formatter: function (val, row, index) {
return '<button id="btnEdit" name="btnEdit" class="btn btn-sm btn-success opt-edit" data-id=' + val + '>' +
'<i class="glyphicon glyphicon-edit"></i> 编辑</button>' +
'&nbsp;&nbsp;<button class="btn btn-sm btn-danger opt-remove" data-id=' + val +
'><i class="glyphicon glyphicon-remove"></i>删除</button>';
}
}
],
undefinedText: "0",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
page: params.pageNumber,
pageSize: params.pageSize,
luckyBagId: $('#qLuckyBagId').val(),
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/luckyBagPool/list.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
$('.total').html(res.data.total)
$('.expectValue').html(res.data.expectValue.toFixed(3))
$('.giftStatusStr').html(res.data.giftStatusStr)
request.success({
rows: res.data.rows,
total: res.data.total
});
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 添加打开弹窗
$("#btnAddModal").on('click', function () {
//清除数据
$('#addModal').find('input').val('');
$('#addModal').find('textarea').val('');
$('#addModal').modal('show');
});
// 添加
$("#btnAddModalConfirm").click(function () {
if ($("#addModalForm").validationEngine('validate')) {
$.ajax({
type: "post",
url: "/admin/luckyBagPool/save.action",
data: {
luckyBagId: $("#modal_luckyBagId").val(),
giftId: $("#modal_giftId").val(),
rate: $("#modal_rate").val(),
prizeLevel: $("#modal_prizeLevel").val(),
defaultGift: $("#modal_defaultGift").val(),
},
dataType: "json",
success: function (json) {
if (apiResult(json)) {
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
$("#addModal").modal('hide');
TableHelper.doRefresh('#table');
} else {
$("#tipMsg").text("保存失败." + json.data.msg);
$("#tipModal").modal('show');
$("#addModal").modal('hide');
}
},
error: function (req) {
serverError(req);
}
});
}
});
// 编辑
$("#btnEditModalConfirm").click(function () {
if ($("#editForm").validationEngine('validate')) {
$.ajax({
type: "post",
url: "/admin/luckyBagPool/save.action",
data: {
id: $("#id").val(),
luckyBagId: $("#luckyBagId").val(),
giftId: $("#giftId").val(),
rate: $("#rate").val(),
prizeLevel: $("#prizeLevel").val(),
defaultGift: $("#defaultGift").val(),
},
dataType: "json",
success: function (json) {
if (apiResult(json)) {
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
$("#editModal").modal('hide');
TableHelper.doRefresh('#table');
} else {
$("#tipMsg").text("保存失败." + json.data.msg);
$("#tipModal").modal('show');
$("#editModal").modal('hide');
}
},
error: function (req) {
serverError(req);
}
});
}
});
// 编辑获取信息
$("#table").on("click", '.opt-edit', function () {
var id = $(this).attr("data-id");
console.log(id);
$.ajax({
type: "get",
url: "/admin/luckyBagPool/get.action",
data: { id: id },
dataType: "json",
success: function (ret) {
if (apiResult(ret)) {
var json = ret.data;
$("#id").val(id);
$("#luckyBagId").val(json.luckyBagId);
$("#giftId").val(json.giftId);
$("#rate").val(json.rate);
$("#prizeLevel").val(json.prizeLevel);
if (json.defaultGift) {
$("#defaultGift").val("true");
} else {
$("#defaultGift").val("false");
}
// 打开编辑弹窗
$("#editModal").modal('show');
} else {
$("#tipMsg").text("获取信息出错");
$("#tipModal").modal('show');
}
},
error: function (req) {
serverError(req);
}
});
});
// 删除操作
$("#table").on("click", '.opt-remove', function () {
var id = $(this).attr("data-id");
console.log(id);
if (id === 'undefined') {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (confirm("你确认删除吗? 删除后不会恢复,请谨慎操作!")) {
$.ajax({
type: 'post',
url: "/admin/luckyBagPool/delete.action",
data: { id: id },
dataType: "json",
success: function (json) {
if (apiResult(json)) {
$("#tipMsg").text("删除成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
$("#editModal").modal('hide');
} else {
$("#tipMsg").text("删除失败");
$("#tipModal").modal('show');
$("#editModal").modal('hide');
}
},
error: function (req) {
serverError(req);
}
});
}
});
});
}
},
};
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
// 获取所有福袋礼物
function getLuckyBagGift() {
$.ajax({
type: "get",
url: "/admin/luckyBagPool/getPoolItem.action",
data: {
consumeType: 1,
giftType: 3,
},
dataType: "json",
async: false,
success: function (res) {
console.log(res);
if (res) {
var data = res.rows;
var options = [];
for (var i = 0, len = data.length; i < len; i++) {
var item = data[i];
//拼接成多个<option><option/>
options.push('<option value="' + item.giftId + '">' + item.giftName + '</option>')
}
$("#qLuckyBagId").html(options.join(' ')); //填充到select标签中
$("#modal_luckyBagId").html(options.join(' ')); //填充到select标签中
}
},
error: function () {
alert('查询福袋出错');
}
});
}
</script>
<style scoped>
.summary {
display: flex;
justify-content: flex-start;
align-items: center;
height: 50px;
}
.summary div {
margin-right: 20px;
display: flex;
justify-content: flex-between;
align-items: center;
height: 100%;
}</style>

View File

@@ -0,0 +1,190 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<div id="toolbar">
<form id="searchForm" action="/admin/luckyBagRecord/recordExport" method="get" target="_blank">
<div class="col-sm-10">
福袋<select name="luckyBagId" id="qLuckyBagId">
</select>
购买人平台号<input type="text" name="erbanNo" id="qErbanNo" class="input-sm" placeholder="" />
开出礼物名称<input type="text" name="giftName" id="qGiftName" class="input-sm" placeholder="" />
日期<input type="text" name="startDate" id="qStartDate" class="input-sm datetime" placeholder="">
- <input type="text" name="endDate" id="qEndDate" class="input-sm datetime" placeholder="">
</div>
</form>
<div class="col-sm-2">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "LuckyBagRecordView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getLuckyBagGift();
$('.datetime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'id', title: 'ID', align: 'center', width: '5%' },
{ field: 'luckyBagId', title: '福袋ID', align: 'center', width: '5%' },
{ field: 'erbanNo', title: '送礼人平台号', align: 'center', width: '5%' },
{ field: 'nick', title: '送礼人昵称', align: 'center', width: '5%' },
{ field: 'receiveErbanNo', title: '收礼人平台号', align: 'center', width: '5%' },
{ field: 'receiveNick', title: '收礼人昵称', align: 'center', width: '5%' },
{ field: 'totalGoldNum', title: '福袋时价', align: 'center', width: '5%' },
{ field: 'giftName', title: '礼物名称', align: 'center', width: '5%' },
{ field: 'giftValue', title: '礼物价值', align: 'center', width: '5%' },
{ field: 'createTime', title: '赠送时间', align: 'center', width: '5%', formatter: formatTime },
],
undefinedText: "0",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
page: params.pageNumber,
pageSize: params.pageSize,
luckyBagId: $('#qLuckyBagId').val(),
erbanNo: $('#qErbanNo').val(),
giftName: $('#qGiftName').val(),
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/luckyBagRecord/list.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total
});
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 导出EXCEL
$('#btnExport').on('click', function () {
$("#searchForm").submit();
});
});
}
},
};
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
// 获取所有福袋礼物
function getLuckyBagGift() {
$.ajax({
type: "get",
url: "/admin/gift/listLuckyBagGift.action",
dataType: "json",
async: false,
success: function (res) {
console.log(res);
if (res) {
var data = res.data;
var options = [];
for (var i = 0, len = data.length; i < len; i++) {
var item = data[i];
//拼接成多个<option><option/>
options.push('<option value="' + item.giftId + '">' + item.giftName + '</option>')
}
$("#qLuckyBagId").html(options.join(' ')); //填充到select标签中
}
},
error: function () {
alert('查询福袋出错');
}
});
}
</script>
<style scoped></style>

View File

@@ -0,0 +1,228 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<div id="toolbar">
<form id="searchForm" action="/admin/luckyBagRecord/statsExport" method="get" target="_blank">
<div class="col-sm-10">
福袋<select name="luckyBagId" id="qLuckyBagId">
</select>
平台号<input type="text" name="erbanNo" id="qErbanNo" class="input-sm" placeholder="" />
日期<input type="text" name="startDate" id="qStartDate" class="input-sm datetime" placeholder="">
- <input type="text" name="endDate" id="qEndDate" class="input-sm datetime" placeholder="">
</div>
</form>
<div class="col-sm-2">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-6">
<span>抽奖记录总数</span>
<span class="num"></span>
</div>
<div class="col-sm-6">
<span>用户投入钻石总数</span>
<span class="inputValue"></span>
</div>
</div>
<div class="summary col-sm-12">
<div class="col-sm-6">
<span>平台支出钻石总数</span>
<span class="outputValue"></span>
</div>
<div class="col-sm-6">
<span>偏差比率</span>
<span class="ratio"></span>
</div>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "LuckyBagStatsView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getLuckyBagGift();
$('.datetime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '平台号', align: 'center', width: '5%' },
{ field: 'nick', title: '昵称', align: 'center', width: '5%' },
{ field: 'num', title: '福袋购买数量', align: 'center', width: '5%' },
{ field: 'inputValue', title: '用户投入钻石数', align: 'center', width: '5%' },
{ field: 'outputValue', title: '平台支出钻石数', align: 'center', width: '5%' },
{
field: 'ratio', title: '偏差比率', align: 'center', width: '5%',
formatter: function (val, row, index) {
return (val * 100).toFixed(2) + '%'
}
},
],
undefinedText: "0",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
page: params.pageNumber,
pageSize: params.pageSize,
luckyBagId: $('#qLuckyBagId').val(),
erbanNo: $('#qErbanNo').val(),
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/luckyBagRecord/stats.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
$('.num').html(res.data.stats.num)
$('.inputValue').html(res.data.stats.inputValue)
$('.outputValue').html(res.data.stats.outputValue)
$('.ratio').html((res.data.stats.ratio * 100).toFixed(2) + '%')
request.success({
rows: res.data.rows,
total: res.data.total
});
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 导出EXCEL
$('#btnExport').on('click', function () {
$("#searchForm").submit();
});
});
}
},
};
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
// 获取所有福袋礼物
function getLuckyBagGift() {
$.ajax({
type: "get",
url: "/admin/gift/listLuckyBagGift.action",
dataType: "json",
async: false,
success: function (res) {
console.log(res);
if (res) {
var data = res.data;
var options = [];
for (var i = 0, len = data.length; i < len; i++) {
var item = data[i];
//拼接成多个<option><option/>
options.push('<option value="' + item.giftId + '">' + item.giftName + '</option>')
}
$("#qLuckyBagId").html(options.join(' ')); //填充到select标签中
}
},
error: function () {
alert('查询福袋出错');
}
});
}
</script>
<style scoped>
.summary {
display: flex;
justify-content: flex-start;
align-items: center;
height: 50px;
}
.summary div {
margin-right: 20px;
display: flex;
justify-content: flex-between;
align-items: center;
height: 100%;
}
</style>

View File

@@ -0,0 +1,621 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div class="group-table-section">
<div class="prize-group-wrapper js-normal-prize-group-wrapper">
<div class="header-wrapper">
<div class="right-content js-no-editing">
<div class="action-btn-wrap"><button class="btn btn-primary js-edit-group"
data-pool-type="1">编辑</button></div>
</div>
<div class="right-content right-content-edit js-editing">
<div class="action-btn-wrap">
<!-- <button class="btn btn-primary js-add-prize">新增</button>-->
<button class="btn btn-danger js-save-edit">保存</button>
<button class="btn btn-default js-cancel-edit">取消</button>
</div>
</div>
</div>
<table class="prize-group-table table table-hover table-striped">
<tr>
<th>prodId</th>
<th>名称</th>
<th>图片</th>
<th>倍数</th>
</tr>
</table>
</div>
</div>
</section>
</div>
</section>
<!-- 添加弹窗 -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">x</span>
</button>
<h4 class="modal-title" id="addModalLabel">新增</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="addForm">
<input type="hidden" name="id" id="prodId" />
<div class="form-group">
<label for="modal_name" class="col-sm-3 control-label">产品名称<font color="red">*</font>:</label>
<div class="col-sm-9">
<input type="text" class="form-control validate[required]" name="name" id="modal_name"
placeholder="配置名称只能为中文,数字,大小写英文与下划线">
</div>
</div>
<div class="form-group">
<label for="module_multiple" class="col-sm-3 control-label">倍数:<font color="red">*</font>
:</label>
<div class="col-sm-9">
<input type="text" class="input-sm form-control datetime validate[required]" name="multiple"
id="module_multiple" placeholder="倍数需要大于等于1">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-default" type="button" id="addCancel">取消</button>
<button class="btn btn-primary" type="button" id="addSave">保存</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="tipModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">提示信息</h4>
</div>
<div class="modal-body" id="tipMsg"></div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SeekElfinItemAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
let isSeniorPrizeEditing;
let seniorPrizeGroupCache;
const POOL_TYPE = {
normal: 1,
senior: 2,
}
function changeDateValue(propName, idx, inputValue) {
editingNormalPrizeGroup[idx][propName] = inputValue;
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
})
}
function inputChanged(e) {
const propName = $(e.target).attr("name");
const idx = $(e.target).attr("data-idx");
const inputValue = e.target.value;
console.log("input change", e, propName, idx, inputValue);
changeDateValue(propName, idx, inputValue);
}
function removePirzeItem(e) {
const idx = $(e.target).attr("data-idx");
if (confirm("你确定要移除吗?")) {
editingNormalPrizeGroup.splice(idx, 1);
console.debug("remove item", editingNormalPrizeGroup)
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
});
}
}
function renderPrizeGroup(items, isEdit) {
let wrapperClassName = '.js-normal-prize-group-wrapper';
if (isEdit) {
console.debug("show editing action btns")
$(`${wrapperClassName} .js-no-editing`).hide();
$(`${wrapperClassName} .js-editing`).show();
} else {
console.debug("hide editing action btns")
$(`${wrapperClassName} .js-no-editing`).show();
$(`${wrapperClassName} .js-editing`).hide();
}
const groupTableDom = $(`${wrapperClassName} .prize-group-table`);
$(`${wrapperClassName} .prize-group-table input`).unbind("change");
$(`${wrapperClassName} .prize-group-table .js-remove-item`).unbind("click");
groupTableDom.html("<thead><tr>\n" +
" <th>产品id</th>\n" +
" <th>产品名称</th>\n" +
" <th>产品价值</th>\n" +
" <th>礼物Id</th>\n" +
" <th>礼物名称</th>\n" +
" <th>礼物图片</th>\n" +
" </tr></thead>");
groupTableDom.append("<tbody>")
items.forEach((item, idx) => {
const tds = [];
if (isEdit) {
tds.push(`<td><i data-idx="${idx}"></i>${item.prodId}</td>`);
} else {
tds.push(`<td>${item.prodId}</td>`)
}
if (isEdit) {
tds.push(`<td><input disabled=disabled type="text" name="prodName" data-idx="${idx}" value="${item.prodName}"></td>`);
} else {
tds.push(`<td>${item.prodName}</td>`)
}
if (isEdit) {
tds.push(`<td><input disabled=disabled type="text" name="prodNeedPrice" data-idx="${idx}" value="${item.prodNeedPrice}"></td>`);
} else {
tds.push(`<td>${item.prodNeedPrice}</td>`)
}
if (isEdit) {
tds.push(`<td><input type="text" name="giftId" data-idx="${idx}" value="${item.giftId}"></td>`);
} else {
tds.push(`<td>${item.giftId}</td>`)
}
if (isEdit) {
tds.push(`<td><input disabled=disabled type="text" name="giftName" data-idx="${idx}" value="${item.giftName}"></td>`);
} else {
tds.push(`<td>${item.giftName}</td>`)
}
if (isEdit) {
tds.push(`<td>
<img disabled=disabled width="40" height="40" name="giftPic" data-idx="${idx}" src="${item.giftPic}"/>
</td>`)
} else {
tds.push(`<td><img width="40" height="40" src="${item.giftPic}"/></td>`)
}
let row = `<tr>${tds.join()}</tr>`;
groupTableDom.append(row);
})
groupTableDom.append("</tbody>")
// 注册输入框变更事件
$(`${wrapperClassName} .prize-group-table input[type=text]`).bind('change', inputChanged);
// 注册删除事件
$(`${wrapperClassName} .prize-group-table .js-remove-item`).bind("click", removePirzeItem);
// 变更图片
$(`${wrapperClassName} .prize-group-table .picUploadBtn`).bind("click", changedImg);
}
function changedImg(e) {
console.log('发生点啥')
const idx = $(e.target).attr("data-idx");
$.ajaxFileUpload({
fileElementId: `picUploadFile2${idx}`, //需要上传的文件域的ID即<input type="file">的ID。
url: '/admin/callBattle/upload', //后台方法的路径
type: 'post', //当要提交自定义参数时这个参数要设置成post
dataType: 'json', //服务器返回的数据类型。可以为xml,script,json,html。如果不填写jQuery会自动判断。
secureuri: false, //是否启用安全提交默认为false。
async: true, //是否是异步
success: function (json) { //提交成功后自动执行的处理函数参数data就是服务器返回的数据。
if (json.path) {
console.log(json.path);
// 需要重新渲染table
changeDateValue('imgUrl', idx, json.path);
} else {
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
}
},
error: function (data, status, e) { //提交失败自动执行的处理函数。
console.error(e);
}
});
}
let normalPrizeGroupCache;
let statisticsDatas;
let deployedStatisticsDatas;
let editingNormalPrizeGroup;
let currentPoolLineId;
let maxLineId;
let isNormalPrizeEditing = false;
function renderPageWhenInit(groupData) {
const normalPrizeGroup = groupData.rows;
normalPrizeGroupCache = normalPrizeGroup;
editingNormalPrizeGroup = null;
isNormalPrizeEditing = false;
renderPrizeGroup(normalPrizeGroup, false)
}
function getPageInfo() {
$.get('/admin/seekElfin/listItem.action', {
}, function (res) {
console.log(res);
const data = res;
renderPageWhenInit(data);
})
}
getPageInfo();
function deepClone(o) {
// 判断如果不是引用类型,直接返回数据即可
if (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean' || typeof o === 'undefined') {
return o
} else if (Array.isArray(o)) { // 如果是数组,则定义一个新数组,完成复制后返回
// 注意这里判断数组不能用typeof因为typeof Array 返回的是object
console.log(typeof []) // --> object
var _arr = []
o.forEach(item => { _arr.push(deepClone(item)) })
return _arr
} else if (typeof o === 'object') {
var _o = {}
for (let key in o) {
_o[key] = deepClone(o[key])
}
return _o
}
}
$('.js-edit-group').on('click', function () {
// 进入编辑状态,则使用深度拷贝复制2组数据
if (!editingNormalPrizeGroup) {
editingNormalPrizeGroup = deepClone(normalPrizeGroupCache);
}
isNormalPrizeEditing = true;
renderPrizeGroup(editingNormalPrizeGroup, true)
});
function reRenderPage(groupData) {
console.debug("reRenderPage groupData", groupData)
const normalPrizeGroup = groupData.normalPrizeGroup;
renderPrizeGroup(normalPrizeGroup, isNormalPrizeEditing)
}
$('.js-cancel-edit').on('click', function () {
console.log("js-cancel-edit ", normalPrizeGroupCache);
editingNormalPrizeGroup = null;
isNormalPrizeEditing = false;
reRenderPage({
normalPrizeGroup: normalPrizeGroupCache,
});
});
// 保存编辑
$('.js-save-edit').on('click', function () {
isNormalPrizeEditing = false;
const prizeItems = editingNormalPrizeGroup;
console.log("js-save-edit prizeGroup", editingNormalPrizeGroup);
prizeItems.forEach((item, idx) => {
if (item.prodId === '-') {
item.prodId = null;
}
});
$.ajax({
type: "post",
url: "/admin/seekElfin/saveItems",
data: JSON.stringify({
items: editingNormalPrizeGroup,
}),
dataType: "json",
contentType: 'application/json',
success: function (json) {
if (json.success) {
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
getPageInfo();
} else {
$("#tipMsg").text("保存失败." + json.message);
$("#tipModal").modal('show');
isNormalPrizeEditing = true;
}
}
});
});
function clearModal() {
$('#addForm').find('input[type=text],input[type=hidden],input[type=file],img,span').each(function () {
$(this).val('');
$(this).html('');
$(this).attr("src", '');
});
$('#editForm').find('input[type=text],select,input[type=hidden]').each(function () {
$(this).val('');
});
}
// 添加按钮事件
$('.js-add-prize').on('click', function () {
clearModal();
$('#addModal').modal('show');
});
// 保存按钮事件
$('#addSave').on('click', function () {
console.log(' before editingNormalPrizeGroup', editingNormalPrizeGroup)
const newItem = {
prodId: '-',
name: $('#modal_name').val(),
svgaUrl: $('#svgaUrl').val(),
multiple: $('#module_multiple').val(),
}
// 按平台价值递增排序
let insertIdx = editingNormalPrizeGroup.length;
for (let i = 0; i < editingNormalPrizeGroup.length; i++) {
const exsistsPrize = editingNormalPrizeGroup[i];
if (newItem.multiple < exsistsPrize.multiple) {
insertIdx = i;
break;
}
}
isNormalPrizeEditing = true;
editingNormalPrizeGroup.splice(insertIdx, 0, newItem);
console.log('after editingNormalPrizeGroup', editingNormalPrizeGroup)
reRenderPage({
normalPrizeGroup: editingNormalPrizeGroup,
});
$('#addModal').modal('hide');
});
$('#addCancel').on('click', function () {
$('#addModal').modal('hide');
});
// 上传图片
$('#picUploadBtn').on('click', function () {
$.ajaxFileUpload({
fileElementId: 'picUploadFile', //需要上传的文件域的ID即<input type="file">的ID。
url: '/admin/seekElfin/upload', //后台方法的路径
type: 'post', //当要提交自定义参数时这个参数要设置成post
dataType: 'json', //服务器返回的数据类型。可以为xml,script,json,html。如果不填写jQuery会自动判断。
secureuri: false, //是否启用安全提交默认为false。
async: true, //是否是异步
success: function (json) { //提交成功后自动执行的处理函数参数data就是服务器返回的数据。
if (json.path) {
$('#picUrl').val(json.path);
$('#picImage').attr("src", json.path);
if (json.path != '') {
$("#picImgInfo").html('已上传成功');
} else {
$("#picImgInfo").html('未上传成功');
}
console.log(json.path);
} else {
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
}
},
error: function (data, status, e) { //提交失败自动执行的处理函数。
console.error(e);
}
});
})
// 上传图片
$('#picUploadBtn_r').on('click', function () {
$.ajaxFileUpload({
fileElementId: 'picUploadFile_r', //需要上传的文件域的ID即<input type="file">的ID。
url: '/admin/seekElfin/upload', //后台方法的路径
type: 'post', //当要提交自定义参数时这个参数要设置成post
dataType: 'json', //服务器返回的数据类型。可以为xml,script,json,html。如果不填写jQuery会自动判断。
secureuri: false, //是否启用安全提交默认为false。
async: true, //是否是异步
success: function (json) { //提交成功后自动执行的处理函数参数data就是服务器返回的数据。
if (json.path) {
$('#picUrl_r').val(json.path);
$('#picImage_r').attr("src", json.path);
if (json.path != '') {
$("#picImgInfo_r").html('已上传成功');
} else {
$("#picImgInfo_r").html('未上传成功');
}
console.log(json.path);
} else {
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
}
},
error: function (data, status, e) { //提交失败自动执行的处理函数。
console.error(e);
}
});
})
// 发布
$('.js-deploy').on('click', function () {
if (isSeniorPrizeEditing || isNormalPrizeEditing) {
$('#tipMsg').text('当前有礼物组未报错,请先保存礼物组后再尝试发布');
$('#tipModal').modal('show');
return;
}
if (!normalPrizeGroupCache.isUndeploy && !seniorPrizeGroupCache.isUndeploy) {
$('#tipMsg').text('没有待发布的修改');
$('#tipModal').modal('show');
return;
}
console.debug('js-deploy data', normalPrizeGroupCache, seniorPrizeGroupCache)
if ((normalPrizeGroupCache.prizeItems.length <= 0) ||
(seniorPrizeGroupCache.prizeItems.length <= 0)) {
$('#tipMsg').text('所有的礼物组都必须至少添加一个奖品');
$('#tipModal').modal('show');
return;
}
$('#deployedPrizeRate').text(deployedStatisticsDatas.prizeRate.toFixed(4));
$('#currPrizeRate').text(statisticsDatas.prizeRate.toFixed(4));
$('#currPoolLineId').text(currentPoolLineId);
$('#activePoolLineId').text(maxLineId + 1);
$('#deployConfirmModal').modal('show');
})
$('#deployCancel').on('click', function () {
$('#deployConfirmModal').modal('hide');
})
$('#deployConfirm').on('click', function () {
$.ajax({
type: "post",
url: "/admin/linearlyPool/deploy",
dataType: "json",
contentType: 'application/json',
success: function (json) {
if (json.success) {
$("#tipMsg").text("发布成功.当前奖池线: " + json.data.currentPoolLineId + ". 生效奖池线: " + json.data.willActiveLineId);
$("#tipModal").modal('show');
getPageInfo();
} else {
$("#tipMsg").text(json.message);
$("#tipModal").modal('show');
}
}
});
$('#deployConfirmModal').modal('hide');
})
})
}
},
};
</script>
<style scoped>
.pool-line-name {
font-size: 20px;
}
.dataCount {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 10px;
}
.dataCount>p {
padding: 5px;
border-radius: 5px;
/*background: #ccc;*/
margin-right: 20px;
}
.tips {
color: red;
font-size: 14px;
}
.qry_col {
float: left;
}
.group-table-section {
display: flex;
width: 100%;
}
.group-table-section .prize-group-wrapper {
width: 50%;
}
.prize-group-wrapper .header-wrapper {
display: flex;
justify-content: space-between;
max-width: 512px;
}
.prize-group-wrapper .header-wrapper .title {
font-size: 20px;
}
.prize-group-wrapper .header-wrapper .right-content {
display: flex;
justify-content: flex-start;
}
.prize-group-wrapper .header-wrapper .right-content.right-content-edit {
display: none;
}
.prize-group-wrapper .header-wrapper .action-btn-wrap button:not(last-child) {
margin-right: 10px;
}
.prize-group-wrapper .header-wrapper .right-content .undeploy {
color: red;
margin-right: 10px;
}
.prize-group-wrapper .data-wrapper {
display: flex;
margin-top: 12px;
}
.prize-group-wrapper .data-wrapper div {
margin-right: 20px;
}
.prize-group-wrapper .prize-group-table {
margin-top: 12px;
margin-right: 10px;
max-width: 1024px;
}
.prize-group-wrapper .prize-group-table .glyphicon-remove {
color: red;
cursor: pointer;
}
#deployConfirmModal .modal-body {
display: flex;
flex-direction: column;
align-items: center;
}
#deployConfirmModal .modal-body #currPrizeRate {
color: red;
}
#deployConfirmModal .modal-body div:first-child {
margin-bottom: 10px;
}
#deployConfirmModal .modal-body div:last-child {
margin-top: 10px;
}
</style>

View File

@@ -0,0 +1,175 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<div id="toolbar">
<div class="col-sm-12">
<div class="col-sm-4">
<label for="startTime" class="col-sm-4 control-label">开始日期:</label>
<div class="col-sm-8">
<input type="text" class="input-sm form-control" name="startTime" id="startTime">
</div>
</div>
<div class="col-sm-4">
<label for="endTime" class="col-sm-4 control-label">结束日期:</label>
<div class="col-sm-8">
<input type="text" class="input-sm form-control" name="endTime" id="endTime">
</div>
</div>
</div>
<div class="col-sm-12">
<button class="btn btn-default js-quick-search js-quick-search-1" data-days="1">
昨天
</button>
<button class="btn btn-default js-quick-search js-quick-search-7" data-days="7">
最近7天
</button>
<button class="btn btn-default js-quick-search js-quick-search-30" data-days="30">
最近30天
</button>
</div>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button id="btnExport" class="btn btn-default">
<i class="glyphicon glyphicon-export"></i>导出
</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { formatTime } from '@/utils/maintainer';
export default {
name: "SeekElfinPlatformAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.js-quick-search').on('click', function () {
$('.js-quick-search').removeClass('active')
$(this).addClass('active');
setSearchTimeUseQuickWay($(this));
TableHelper.doRefresh('#table');
});
function setSearchTimeUseQuickWay(quickDom) {
const days = quickDom.attr("data-days");
const today = new Date(new Date().setHours(0, 0, 0, 0));
const todayStr = formatTime(today);
const startTime = formatTime(new Date(today.getTime() - days * 24 * 60 * 60 * 1000));
$('#startTime').val(startTime);
$('#endTime').val(todayStr);
}
const quickDom = $('.js-quick-search-7');
quickDom.addClass('active');
setSearchTimeUseQuickWay(quickDom);
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
var chargeStart = $('#startTime').datepicker({
format: 'yyyy-mm-dd 00:00:00',
autoclose: true
});
var chargeEnd = $('#endTime').datepicker({
format: 'yyyy-mm-dd 00:00:00',
autoclose: true
});
$('#btnExport').on('click', function () {
const startTime = $('#startTime').val();
const endTime = $('#endTime').val();
window.location.href = `/admin/seekElfin/exportPlatformStat?startTime=${startTime}&endTime=${endTime}`
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{
field: 'queryDate', title: '日期', align: 'center', width: '5%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd');
} else {
return '-';
}
}
},
{ field: 'memberNum', title: '总人数', align: 'center', width: '10%' },
{ field: 'totalPlayTimes', title: '总次数', align: 'center', width: '10%', valign: 'center' },
{ field: 'totalCostGold', title: '总头饰消费', align: 'center', width: '5%', },
{ field: 'totalReceiveGold', title: '总平台价值', align: 'center', width: '5%', },
{ field: 'totalTicketGold', title: '门票', align: 'center', width: '5%', },
],
undefinedText: 0,
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
page: params.pageNumber,
pageSize: params.pageSize,
startTime: $('#startTime').val(),
endTime: $('#endTime').val()
};
return param;
},
toolbar: '#toolbar',
url: '/admin/seekElfin/listPlatformStat.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
});
}
},
};
</script>
<style scoped>
#teamDetailModal .modal-dialog,
#userDetailModal .modal-dialog {
width: 50%;
}
</style>

View File

@@ -0,0 +1,221 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<div id="toolbar">
开始时间<input type="text" name="startTime" id="startTime" class="input-sm">
结束时间<input type="text" name="endTime" id="endTime" class="input-sm">
平台号<input type="text" name="erbanNo" id="erbanNo" class="input-sm">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button type="button" class="btn btn-primary" id="btnExport">导出</button>
</div>
<div class="col-sm-12">
当前库存 <span name="stock" id="stock" />钻石
<button id="editStock" class="btn btn-default">编辑库存</button>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
<div class="modal fade" id="roundDetailModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="roundDetailModalTitle">单轮明细</h4>
</div>
<div class="modal-body">
<div id="roundDetailTable"></div>
</div>
<div class="modal-footer">
<h4 id="roundDetailModalFooter"></h4>
<button type="button" class="btn btn-primary" id="exportRoundDetail">导出</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="editStockModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editStockModalTitle">编辑库存</h4>
</div>
<div class="modal-body">
设置库存为 <input type="text" name="editedStock" id="editedStock" class="input-sm"> 钻石
</div>
<div class="modal-footer">
<h4 id="editStockModalFooter"></h4>
<button type="button" class="btn btn-primary" id="editStockModelBtn">保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { cleanArray } from '@/utils/maintainer';
export default {
name: "SeekElfinUserRecordAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getStock()
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '平台号', align: 'center', width: '5%' },
{ field: 'nick', title: '昵称', align: 'center', width: '5%' },
{ field: 'prodId', title: '档位', align: 'center', width: '5%' },
{ field: 'selectNoNum', title: '购买个数', align: 'center', width: '5%' },
{ field: 'costGoldNum', title: '花费总钻石数', align: 'center', width: '5%' },
{ field: 'receiveGoldNum', title: '产出平台价值', align: 'center', width: '5%' },
{ field: 'createTime', title: '时间', align: 'center', width: '5%' }
],
undefinedText: 0,
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
page: params.pageNumber,
pageSize: params.pageSize,
startTime: $('#startTime').val(),
endTime: $('#endTime').val(),
erbanNos: $('#erbanNo').val(),
};
return param;
},
toolbar: '#toolbar',
url: '/admin/seekElfin/pageUserRecord.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
getStock();
TableHelper.doRefresh('#table');
});
var picker1 = $("#startTime").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
})
var picker2 = $('#endTime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
})
// 导出
$('#btnExport').on('click', function () {
console.log("导出")
window.location.href = `/admin/seekElfin/exportUserDrawRecordList?${param(getQueryParams())}`
})
// 获取库存
function getStock() {
$.ajax({
type: 'get',
url: "/admin/seekElfin/getStock.action",
success: function (json) {
if (json.success) {
console.log('data', json.data)
$("#stock").html(json.data)
} else {
$("#stock").html('')
}
}
});
}
$('#editStock').on('click', function () {
$("#editStockModal").modal('show');
});
// 编辑库存
$('#editStockModelBtn').on('click', function () {
$.ajax({
type: 'get',
url: "/admin/seekElfin/editStock.action",
data: {
stock: $("#editedStock").val(),
},
dataType: 'json',
success: function (json) {
if (json.success) {
$('#tipMsg').text('编辑成功,请重新刷新页面');
$('#tipModal').modal('show');
$("#editStockModal").modal('hide');
} else {
$('#tipMsg').text('编辑失败,错误信息:' + json.message);
$('#tipModal').modal('show');
}
}
});
});
function getQueryParams() {
var param = {
startTime: $('#startTime').val(),
endTime: $('#endTime').val(),
erbanNos: $('#erbanNo').val(),
};
return param;
}
function param(json) {
if (!json) return ''
return cleanArray(Object.keys(json).map(key => {
if (json[key] === undefined) return ''
return encodeURIComponent(key) + '=' +
encodeURIComponent(json[key])
})).join('&')
}
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,335 @@
<template>
<section class="content">
<div class="box box-primary">
<section class="content-header">
<h1 id="itemTitle">敏感词配置</h1>
</section>
<section class="content">
<div id="table"></div>
<div id="toolbar">
<button id="addBtn" class="btn btn-default">
<i class="glyphicon glyphicon-plus"></i>增加
</button>&nbsp;&nbsp;&nbsp;
关键字: <input type="text" id='word' placeholder=''>
<button id="btnSearch" class="btn btn-sm btn-primary" data-id=" + word + ">查询</button>
&nbsp;&nbsp;&nbsp;
<button id="delBatch" class="btn btn-danger btn-primary">批量删除</button>
</div>
</section>
</div>
</section>
<div class="modal fade" id="actModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">x</span></button>
<h4 class="modal-title" id="addModalLabel">敏感词配置</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="actForm">
<input type="hidden" name="id" id="actId" value="0">
<input type="hidden" name="status" id="actStatus">
<div class="form-group">
<label for="addedWord" class="col-sm-2 control-label">敏感词:</label>
<div class="col-sm-10">
<textarea id="addedWord" name="addedWord" style="height:150px; width:400px"
class="form-control validate[required]" placeholder="批量增加请换行,资源有限,请勿频繁添加"></textarea>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="save">保存</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">x</span></button>
<h4 class="modal-title" id="editModalLabel">敏感词配置</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="editForm">
<input type="hidden" name="id" id="editId" value="0">
<input type="hidden" name="status" id="editStatus">
<div class="form-group">
<label for="addedWord" class="col-sm-2 control-label">敏感词:</label>
<div class="col-sm-10">
<textarea id="editWord" name="addedWord" style="height:150px; width:400px"
class="form-control validate[required]"></textarea>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="edit">保存</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="sureModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="sure">确定</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SensitiveConfigView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
initTable();
// 查询刷新
$('#btnSearch').on('click', function () {
$('#table').bootstrapTable('destroy');
initTable();
});
$("#delBatch").click(function () {
var rows = $("#table").bootstrapTable("getSelections");
if (rows.length == 0) {
alert("请先选择要删除的记录");
return;
}
console.log("rows: " + rows.length);
var idArr = [];
for (var i = 0; i < rows.length; i++) {
idArr.push(rows[i]['id']);
}
console.log(idArr);
if (confirm("你确认批量删除敏感词吗?")) {
$.ajax({
type: 'post',
url: "/admin/sensitive/deleteBatch.action",
data: { 'ids': JSON.stringify(idArr) },
dataType: "json",
success: function (json) {
if (json.success == 'true') {
$("#tipMsg").text("删除成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("删除失败");
$("#tipModal").modal('show');
}
}
});
}
});
$('#addBtn').on('click', function () {
cleanModal();
$("#actForm")[0].reset();
$('#actModal').modal('show');
});
$('#table').on('click', '.opt-edit', function () {
var id = parseInt($(this).data('id'));
cleanModal();
var data = $('#table').bootstrapTable('getRowByUniqueId', id);
$('#editId').val(data.id);
$('#editWord').val(data.senstiveWord);
$('#editModal').modal('show');
});
$('#save').on('click', function () {
if ($('#actForm').validationEngine('validate')) {
$.ajax({
type: "post",
url: "/admin/sensitive/addSensitiveWord.action",
data: $('#actForm').serialize(),
dataType: 'json',
success: function (json) {
if (json.success == 'true') {
$("#actModal").modal('hide');
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("保存失败,错误码:" + json.message);
$("#tipModal").modal('show');
}
}
})
}
});
$('#edit').on('click', function () {
if ($('#editForm').validationEngine('validate')) {
$.ajax({
type: "post",
url: "/admin/sensitive/addSensitiveWord.action",
data: $('#editForm').serialize(),
dataType: 'json',
success: function (json) {
if (json.success == 'true') {
$("#editModal").modal('hide');
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("修改失败,错误码:" + json.message);
$("#tipModal").modal('show');
}
}
})
}
});
$("#table").on("click", '.opt-del', function () {
var id = parseInt($(this).data('id'));
var data = $('#table').bootstrapTable('getRowByUniqueId', id);
/*$('#sureModal').modal('show');*/
if (confirm("你确认删除[" + data.senstiveWord + "]这个敏感词吗?")) {
$.ajax({
type: 'post',
url: '/admin/sensitive/delete.action',
data: { 'id': data.id, 'word': data.senstiveWord },
dataType: 'json',
success: function (json) {
if (json.success == 'true') {
$("#tipMsg").text("删除成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("删除失败,错误码:" + json.message);
$("#tipModal").modal('show');
}
}
});
}
});
$('#table').on('mouseenter', 'img', function (e) {
console.log($(this), e.clientX);
var src = $(this).attr('src');
$('#imgMask img').attr('src', src);
$('#imgMask').show();
$('#imgMask').css({
top: e.clientY + 20,
left: e.clientX + 20
})
})
$('#table').on('mouseleave', 'img', function (e) {
console.log('移出');
$('#imgMask').hide();
})
function cleanModal() {
$('#actForm').find('input[type=text],input[type=hidden],input[type=file]').each(function () {
$(this).val('');
})
$('#actForm').find('img').attr('src', '');
}
function initTable() {
$('#table').bootstrapTable({
columns: [
{ field: 'tmp1', title: 'id', align: 'center', checkbox: true, width: '5%' },
{ field: 'id', title: 'id', align: 'center', valign: 'middle', width: '10%' },
{ field: 'senstiveWord', title: '敏感词', align: 'center', valign: 'middle', width: '10%' },
{
field: 'createTime',
title: '创建时间',
align: 'center',
width: '10%',
valign: 'middle',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{
field: 'tmp',
title: '操作',
align: 'center',
width: '10%',
valign: 'middle',
formatter: function (val, row, index) {
var key = row.id;
return "<button class='btn btn-sm btn-success opt-edit' data-id=" + key + ">编辑</button>" + "&nbsp;&nbsp;&nbsp;" +
"<button class='btn btn-sm btn-danger opt-del' data-id=" + key + ">删除</button>";
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
word: $("#word").val()
};
// console.log(param);
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/sensitive/sensitiveList.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
})
}
})
}
},
};
</script>
<style scoped>
#imgMask {
position: absolute;
top: 0;
left: 0;
width: 250px;
height: 600px;
padding: 4px;
background: #fff;
z-index: 999;
display: none;
}
#imgMask img {
width: 100%;
height: 100%;
vertical-align: top;
}
</style>

View File

@@ -0,0 +1,250 @@
<template>
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<div class="col-sm-12">
<form action="" id="searchForm" method="POST">
<label for="erbanNo" class="col-sm-1 control-label">用户ID:</label>
<div class="col-sm-2"> <input type="text" name="erbanNo" class="form-control" id="erbanNo"
placeholder="请输入用户ID"></div>
<label for="erbanNo" class="col-sm-1 control-label">签到总天数:</label>
<div class="col-sm-2">
<input type="text" name="min_sign" class="form-control" id="minSign" placeholder="请输入最小值">--
<input type="text" name="min_sign" class="form-control" id="maxSign" placeholder="请输入最大值">
</div>
<label for="erbanNo" class="col-sm-1 control-label">签到分享总次数:</label>
<div class="col-sm-2">
<input type="text" name="min_sign" class="form-control" id="minShare" placeholder="请输入最小值">--
<input type="text" name="min_sign" class="form-control" id="maxShare" placeholder="请输入最大值">
</div>
<label for="erbanNo" class="col-sm-1 control-label">金币充值总额:</label>
<div class="col-sm-2">
<input type="text" name="min_sign" class="form-control" id="minGold" placeholder="请输入最小值">--
<input type="text" name="min_sign" class="form-control" id="maxGold" placeholder="请输入最大值">
</div>
</form>
<button class="btn btn-primary" id="searchBtn">搜索</button>
</div>
</div>
<div id="table"></div>
</section>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "DrawCountWhiteAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'uid', title: 'UID', align: 'center', valign: 'middle', width: '5%' },
{ field: 'erbanNo', title: '用户ID', align: 'center', width: '5%', valign: 'middle' },
{ field: 'nick', title: '用户昵称', align: 'center', width: '15%', valign: 'middle' },
{ field: 'drawNum', title: '参与瓜分次数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'drawGoldNum', title: '瓜分金币总额', align: 'center', valign: 'middle', width: '10%' },
{ field: 'signNum', title: '签到总天数', align: 'center', valign: 'middle', width: '10%' },
{ field: 'shareNum', title: '签到分享总次数', align: 'center', width: '5%', valign: 'middle' },
{ field: 'chargeNum', title: '金币充值总额', align: 'center', valign: 'middle', width: '10%' },
{ field: 'whiteNum', title: '历史白名单次数', align: 'center', width: '5%', valign: 'middle' },
{
field: 'whiteStatus', title: '白名单状态', align: 'center', width: '15%', valign: 'middle',
formatter: function (val, row, index) {
if (val == 0) {
return "未设置";
} else {
return "待瓜分";
}
}
},
{
field: 'tmp',
title: '操作',
align: 'center',
width: '10%',
valign: 'middle',
formatter: function (val, row, index) {
var key = row.uid;
var whiteStatus = row.whiteStatus;
if (whiteStatus == 0) {
return "<button class='btn btn-sm btn-success opt-set' style='margin-right: 4px;' data-id=" + key + ">设置白名单</button>";
} else {
return "<button class='btn btn-sm btn-success opt-del' style='margin-right: 4px;' data-id=" + key + ">移除白名单</button>";
}
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [1, 10, 20, 30, 50],
search: false,
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
erbanNo: $('#erbanNo').val(),
minSign: $('#minSign').val(),
maxSign: $('#maxSign').val(),
minShare: $('#minShare').val(),
maxShare: $('#maxShare').val(),
minGold: $('#minGold').val(),
maxGold: $('#maxGold').val(),
};
return param;
},
uniqueId: 'uid',
toolbar: '#toolbar',
url: '/admin/drawGold/getAll',
onLoadSuccess: function (data) {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
// 查询按钮
$('#searchBtn').click(function () {
TableHelper.doRefresh('#table');
})
$('#table').on('click', '.opt-set', function () {
var id = $(this).data('id');
if (id == 'undefined' || !id) {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (confirm("确认设置该用户进白名单吗?")) {
$.ajax({
type: "post",
url: "/admin/drawGold/setWhite.action",
data: {
uid: id,
status: 1
},
dataType: "json",
success: function (json) {
if (json.code == 200) {
$("#tipMsg").text("设置成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("设置失败[" + id + "]," + json.msg);
$("#tipModal").modal('show');
}
}
});
}
})
$('#table').on('click', '.opt-del', function () {
var id = $(this).data('id');
if (id == 'undefined' || !id) {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (confirm("确认移除该用户出白名单吗?")) {
$.ajax({
type: "post",
url: "/admin/drawGold/setWhite.action",
data: {
uid: id,
status: 0
},
dataType: "json",
success: function (json) {
if (json.code == 200) {
$("#tipMsg").text("移除成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("移除失败[" + id + "]," + json.msg);
$("#tipModal").modal('show');
}
}
});
}
})
})
}
},
};
</script>
<style scoped>
.summary {
display: flex;
justify-content: flex-start;
align-items: center;
height: 50px;
}
.summary div {
margin-right: 20px;
display: flex;
justify-content: flex-between;
align-items: center;
height: 100%;
}
#attention {
color: lightgray;
}
.content {
height: auto;
}
#searchForm {
display: inline-block;
}
#btnSearch {
margin-left: 4px;
}
#toolbar input,
#toolbar select {
margin-left: 4px;
margin-right: 4px;
}
.width30 {
width: 30%;
}
.marginLeft20 {
margin-left: 20px;
}</style>

View File

@@ -0,0 +1,211 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<div id="table"></div>
<div id="toolbar">
<div class="col-sm-12">
<div class="summary col-sm-12">
<div class="col-sm-2 width30">
<span>瓜分人数</span>
<span id="drawGoldUserNum">0</span>
</div>
</div>
<form id="searchForm" action="/admin/drawGold/export" method="get" target="_blank">
<label for="erbanNo" class="col-sm-1 control-label"
style="padding: 0px; width: 52px;">平台号:</label>
<div class="col-sm-2"> <input type="text" name="erbanNo" class="form-control" id="erbanNo"
placeholder="请输入用户ID"></div>
<label class="col-sm-1 control-label" style="padding: 0px; width: 65px;">奖品等级:</label>
<div class="col-sm-2" style="margin-right: 119px;width: 87px;">
<select name="level" id="level" class="col-sm-2"
style="width: 100%;margin-top: 8px;position: absolute;margin-right: 10px;">
<option value="">全部</option>
<option value="1">一级</option>
<option value="2">二级</option>
<option value="3">三级</option>
</select>
</div>
<label class="col-sm-1 control-label" style="padding: 0px; width: 52px;">奖品:</label>
<div class="col-sm-2"> <input type="text" name="goldNum" class="form-control" id="goldNum"
placeholder="请输入瓜分金额"></div>
<label class="col-sm-1 control-label" style="padding: 0px; width: 52px;">时间</label>
<div class="col-sm-2" style="width: 34%;">
<input type="text" name="startTime" id="startTime" class="input-sm" placeholder="请选择开始时间">
- <input type="text" name="endTime" id="endTime" class="input-sm" placeholder="请选择结束时间">
</div>
</form>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon"></i>查询
</button>
<button id="btnExport" class="btn btn-default">
<i class="glyphicon glyphicon-export"></i>导出
</button>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "DrawGoldAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
erbanNo: $('#erbanNo').val(),
level: $('#level').val(),
goldNum: $("#goldNum").val(),
startTime: $('#startTime').val(),
endTime: $('#endTime').val()
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/drawGold/getDrawGoldAll.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
},
columns: [
{
field: 'sel2', title: '编号', align: 'center', valign: 'middle', width: '5%',
formatter: function (value, row, index) {
//获取每页显示的数量
var pageSize = $('#table').bootstrapTable('getOptions').pageSize;
//获取当前是第几页
var pageNumber = $('#table').bootstrapTable('getOptions').pageNumber;
//返回序号注意index是从0开始的所以要加上1
return pageSize * (pageNumber - 1) + index + 1;
}
},
{ field: 'erbanNo', title: '平台号', align: 'center', width: '15%', valign: 'middle' },
{ field: 'nick', title: '用户昵称', align: 'center', valign: 'middle', width: '5%' },
{ field: 'goldNum', title: '奖品', align: 'center', valign: 'middle', width: '5%' },
{
field: 'level',
title: '奖品等级',
align: 'center',
valign: 'middle',
width: '5%',
formatter: function (val, row, index) {
if (val == 1) {
return "一级";
} else if (val == 2) {
return "二级";
} else {
return "三级";
}
}
},
{
field: 'createTime',
title: '瓜分时间',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
}
]
})
var picker1 = $('#startTime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
})
var picker2 = $("#endTime").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
getToolVal();
});
// 导出EXCEL
$('#btnExport').on('click', function () {
$("#searchForm").submit();
});
function getToolVal() {
var reqParam = {
erbanNo: $('#erbanNo').val(),
level: $('#level').val(),
goldNum: $("#goldNum").val(),
startTime: $('#startTime').val(),
endTime: $('#endTime').val()
};
$.post('/admin/drawGold/getDrawGoldUserNum', reqParam,
function (res) {
if (res.code == 200) {
$("#drawGoldUserNum").html(res.data);
}
})
}
getToolVal();
});
}
},
};
</script>
<style scoped>
.pull-left {
width: 100%;
}
</style>

View File

@@ -0,0 +1,330 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<div id="table"></div>
<div id="toolbar">
<div class="col-sm-12">
金额区间<input type="text" name="gold_min" id="gold_min" class="input-sm" placeholder="请输入最小值">
- <input type="text" name="gold_max" id="gold_max" class="input-sm" placeholder="请输入最大值">
奖品等级 <select name="level" id="level" data-btn-class="btn-warning">
<option value="" selected="selected">全部</option>
<option value="1">一级</option>
<option value="2">二级</option>
<option value="3">三级</option>
</select>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon"></i>查询
</button>
<button id="addPrizebButton" class="btn btn-default">
<i class="glyphicon"></i>新增奖品
</button>
</div>
</div>
</div>
</div>
</div>
</section>
<input type="hidden" name="id" id="prizeId">
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">x</span></button>
<h4 class="modal-title" id="editModalLabel">编辑奖品</h4>
</div>
<div class="modal-body">
<form id="editPrize" class="form-horizontal">
<div class="form-group level">
<label class="col-sm-3 control-label">奖品等级:</label>
<div class="col-sm-9">
<select name="prizeLevel" id="prizeLevel" class="col-sm-2">
<option value="1">一级</option>
<option value="2">二级</option>
<option value="3">三级</option>
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="edit">保存</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">x</span></button>
<h4 class="modal-title" id="addModalLabel">新增奖品</h4>
</div>
<div class="modal-body">
<form id="addPrize" class="form-horizontal">
<div class="form-group topic">
<label class="col-sm-3 control-label">奖品等级:</label>
<div class="col-sm-9">
<select name="addPrizeLevel" id="addPrizeLevel" class="col-sm-2">
<option value="1">一级</option>
<option value="2">二级</option>
<option value="3">三级</option>
</select>
</div>
</div>
<div class="form-group goldNum">
<label for="goldNum" class="col-sm-3 control-label">奖品:</label>
<div class="col-sm-8 control-label">
<input type="text" class="form-control validate[custom[integer]]"
style="float: left;width: 90%;" name="goldNum" id="goldNum" placeholder="请输入金币数量">金币
</div>
</div>
<div class="form-group goldNum">
<label for="goldNum" class="col-sm-3 control-label">操作人:</label>
<div class="col-sm-8 control-label">
<input type="text" class="form-control validate[required]" name="operator" id="operator"
placeholder="请输入您的名字">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="save">保存</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "GoldPrizeAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageSize: params.pageSize,
pageNumber: params.pageNumber,
goldMin: $('#gold_min').val(),
goldMax: $('#gold_max').val(),
level: $('#level').val()
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/goldPrize/getAll.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
},
columns: [
{ field: 'sel', title: '', align: 'center', checkbox: true, width: '1%', valign: 'middle' },
{ field: 'id', title: '', align: 'center', valign: 'middle', width: '1%', visible: false },
{
field: 'sel2', title: '编号', align: 'center', valign: 'middle', width: '5%',
formatter: function (value, row, index) {
//获取每页显示的数量
var pageSize = $('#table').bootstrapTable('getOptions').pageSize;
//获取当前是第几页
var pageNumber = $('#table').bootstrapTable('getOptions').pageNumber;
//返回序号注意index是从0开始的所以要加上1
return pageSize * (pageNumber - 1) + index + 1;
}
},
{
field: 'goldNum', title: '奖品', align: 'center', width: '5%', valign: 'middle',
formatter: function (val, row, index) {
return val + "金币";
}
},
{
field: 'level', title: '奖品等级', align: 'center', width: '15%', valign: 'middle',
formatter: function (val, row, index) {
if (val == 1) {
return "一级";
} if (val == 2) {
return "二级";
} else {
return "三级";
}
}
},
{
field: 'updateTime',
title: '修改时间',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{ field: 'operator', title: '操作人', align: 'center', width: '5%', valign: 'middle' },
{
field: 'tmp',
title: '操作',
align: 'center',
width: '10%',
valign: 'middle',
formatter: function (val, row, index) {
var key = row.id;
if (key == 1) {
return "默认奖品"
}
var str = "<button class='btn btn-sm btn-success opt-edit' style='margin-right: 4px;' data-id=" + key + ">编辑</button>";
return str;
}
}
]
})
$('#table').on('click', '.opt-edit', function () {
debugger;
cleanModal();
var id = $(this).data('id');
if (id == 'undefined' || !id) {
return;
}
var data = $('#table').bootstrapTable('getRowByUniqueId', id);
$('#prizeId').val(id);
$("#prizeLevel").val(data.level);
$('#editModal').modal('show');
})
$('#edit').on('click', function () {
if ($('#editPrize').validationEngine('validate')) {
$.ajax({
type: 'post',
url: '/admin/goldPrize/editGoldPrize.action',
dataType: 'json',
data: {
id: $('#prizeId').val(),
prizeLevel: $('#prizeLevel').val()
},
success: function (res) {
if (res.code == 200) {
$("#editModal").modal('hide');
$("#tipMsg").text("修改成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("修改失败,错误码:" + res.message);
$("#tipModal").modal('show');
}
}
})
}
})
function cleanModal() {
$('#prizeId').val('');
$('#addPrizeLeve').val('1');
$('#goldNum').val('');
}
$('#save').on('click', function () {
debugger;
if ($('#addPrize').validationEngine('validate')) {
$.ajax({
type: 'post',
url: '/admin/goldPrize/saveGoldPrize.action',
dataType: 'json',
data: {
prizeLevel: $('#addPrizeLevel').val(),
goldNum: $('#goldNum').val(),
operator: $('#operator').val()
},
success: function (res) {
if (res.code == 200) {
$("#addModal").modal('hide');
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("保存失败,错误码:" + res.message);
$("#tipModal").modal('show');
}
}
})
}
})
$("#addPrizebButton").on('click', function () {
cleanModal();
$('#addModal').modal('show');
})
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
})
});
}
},
};
</script>
<style scoped>
.col-sm-1 {
width: 10.333333%;
}
.col-sm-2 {
width: 21.666667%;
}</style>

View File

@@ -0,0 +1,476 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<section class="content">
<div id="table"></div>
<div id="toolbar">
<div class="col-sm-12">
<label for="name_query" class="qry_col control-label">任务名称:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="name" id="name_query"></div>
<label for="category_query" class="qry_col control-label">任务类型:</label>
<div class="col-sm-2">
<select name="os" id="category_query" class="form-control" data-btn-class="btn-warning">
<option value="">全部</option>
<option value="DAILY">每日任务</option>
<option value="ACHIEVEMENT">成就任务</option>
</select>
</div>
<label for="app" class="qry_col control-label">APP:</label>
<div class="col-sm-2">
<select name="app" id="app" class="form-control" data-btn-class="btn-warning">
<option value="">全部</option>
<option value="qingxun">66</option>
<option value="ear">侧耳</option>
</select>
</div>
<label for="beginDate" class="col-sm-1 control-label">开始时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="beginDate" id="beginDate"
placeholder="更新时间">
</div>
<label for="endDate" class="col-sm-1 control-label">结束时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="endDate" id="endDate"
placeholder="更新时间">
</div>
<button id="search" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>搜索
</button>
</div>
<div class="col-sm-12">
</div>
</div>
</section><!-- .content -->
</div>
</div>
</section>
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content" style="width: 700px;">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="modalLabel">编辑</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="missionForm">
<input type="hidden" name="configId" id="configId" />
<div class="form-group">
<label for="form_category" class="col-sm-2 control-label">任务类型:</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" id="form_category"
readonly="true">
</div>
</div>
<div class="form-group">
<label for="form_name" class="col-sm-2 control-label">任务名称:</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" name="name" id="form_name"
onchange="checkLength(this,10)">
<span class="tips-text">*任务名称限制10字符</span>
</div>
</div>
<div class="form-group">
<label for="form_description" class="col-sm-2 control-label">任务说明:</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" name="description"
id="form_description" onchange="checkLength(this,15)">
<span class="tips-text">*任务说明限制15字符</span>
</div>
</div>
<div class="form-group">
<label for="form_prize_type" class="col-sm-2 control-label">奖励类型:</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" id="form_prize_type"
readonly="true">
</div>
</div>
<div class="form-group">
<label for="form_prize_num" class="col-sm-2 control-label">奖品数量:</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="prizeNum" id="form_prize_num"
placeholder="请输入正整数"
onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}"
onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'0')}else{this.value=this.value.replace(/\D/g,'')}" />
</div>
</div>
<div class="form-group">
<label for="form_egt_ios_app_version" class="col-sm-2 control-label">IOS最低版本:</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="egtIosAppVersion"
id="form_egt_ios_app_version" placeholder="未填写默认全部版本">
</div>
</div>
<div class="form-group">
<label for="form_egt_android_app_version" class="col-sm-2 control-label">安卓最低版本:</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="egtAndroidAppVersion"
id="form_egt_android_app_version" placeholder="未填写默认全部版本">
</div>
</div>
<div class="form-group">
<label for="form_exper_level" class="col-sm-2 control-label">用户等级:</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="experLevel" id="form_exper_level"
placeholder="未填写默认无用户等级限制">
</div>
</div>
<div class="form-group">
<label for="form_sort" class="col-sm-2 control-label">排序:</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" name="sort" id="form_sort"
placeholder="客户端按升序排列">
</div>
</div>
<div class="form-group step-pic-div">
<label class="col-sm-2 control-label">步骤图:</label>
<div class="col-sm-10">
<img src="" id="imgUrl" style="width:275px;height:201px;margin-bottom: 10px;" alt="">
<input type="file" id="uploadFile" name="uploadFile"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">
<button class="btn btn-success" type="button" id="uploadBtn">上传</button>
<span class="attention">注意图片尺寸,选择图片后请点击上传按钮</span>
<input type="hidden" id="form_step_pic" name="stepPic" class="form-control" />
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="save">保存</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { showLoading, hideLoading } from '@/utils/maintainer';
var publishTimePicker = $('#publishTime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true,
startDate: new Date()
})
//ComboboxHelper.build(null,'#status');
export default {
name: "MissionConfigAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#platform').selectpicker({
'selectedText': 'cat'
})
$('#table').bootstrapTable('destroy');
initTable();
/**增加搜索功能*/
$('#search').on('click', function () {
$('#table').bootstrapTable('destroy');
initTable();
});
$("#table").on("click", '.opt-change-status', function () {
var id = $(this).attr("data-id");
var status = $(this).attr("data-status");
if (id == 'undefined' || status == 'undefined') {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
var tips = $(this).text();
if (confirm("你确认【" + tips + "】该任务吗?")) {
var targetStatus = Math.abs(status - 1);
var params = "ids=" + id;
params += "&status=" + targetStatus;
$.ajax({
type: 'post',
url: "/admin/mission/change/status.action",
data: params,
dataType: "json",
success: function (json) {
if (json.success == 'true') {
$("#tipMsg").text(tips + "成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text(tips + "失败");
$("#tipModal").modal('show');
}
}
});
}
});
$("#table").on("click", '.opt-edit', function () {
var id = $(this).attr("data-id");
$.ajax({
type: "get",
url: "/admin/mission/get.action",
data: { id: id },
dataType: "json",
success: function (json) {
if (json.entity) {
$("#configId").val(json.entity.configId);
$("#form_category").val(json.entity.categoryStr);
$("#form_name").val(json.entity.name);
$("#form_description").val(json.entity.description);
$("#form_prize_type").val(json.entity.prizeTypeStr);
$("#form_prize_num").val(json.entity.prizeNum);
$("#form_sort").val(json.entity.sort);
$("#form_egt_ios_app_version").val(json.entity.egtIosAppVersion);
$("#form_egt_android_app_version").val(json.entity.egtAndroidAppVersion);
$("#form_exper_level").val(json.entity.experLevel);
if (json.entity.skipType == 2 && json.entity.routerType == 40) {
$("#form_step_pic").val(json.entity.stepPic);
$('#imgUrl').attr("src", json.entity.stepPic);
$(".step-pic-div").show();
} else {
$("#form_step_pic").val('');
$('#imgUrl').attr("src", '');
$(".step-pic-div").hide();
}
// 打开编辑弹窗
$("#editModal").modal('show');
} else {
$("#tipMsg").text("获取任务信息出错");
$("#tipModal").modal('show');
}
}
});
});
$("#save").click(function () {
if ($("#missionForm").validationEngine('validate')
&& $("#form_name").val().length <= 10
&& $("#form_description").val().length <= 15) {
showLoading();
$.ajax({
type: "post",
url: "/admin/mission/save.action",
data: $('#missionForm').serialize(),
dataType: "json",
success: function (json) {
hideLoading();
if (json.success == 'true') {
$("#editModal").modal('hide');
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("保存失败,原因: " + json.msg);
$("#tipModal").modal('show');
}
},
error: function (data) {
hideLoading();
}
});
}
});
$('#uploadBtn').on('click', function () {
showLoading();
var options = {
type: 'post',
url: '/admin/mission/upload.action',
dataType: 'json',
success: function (json) {
hideLoading();
if (json.path) {
$('#form_step_pic').val(json.path);
$('#imgUrl').attr("src", json.path);
} else {
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
}
}
}
$("#missionForm").ajaxSubmit(options);
});
var picker1 = $("#beginDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
todayBtn: true,
autoclose: true,
});
var picker2 = $("#endDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
todayBtn: true,
autoclose: true
});
picker1.on('changeDate', function () {
var date = $('#beginDate').datepicker('getDate');
picker2.datepicker('setStartDate', date);
});
picker2.on('changeDate', function () {
var date = $('#endDate').datepicker('getDate');
picker1.datepicker('setEndDate', date);
});
});
}
},
};
function initTable() {
$('#table').bootstrapTable({
columns: [
{ field: 'tmp', title: 'ID', align: 'center', width: '5%', checkbox: true },
{ field: 'configId', title: 'id', align: 'center', width: '5%' },
{ field: 'categoryStr', title: '任务类型', align: 'center', width: '5%' },
{ field: 'name', title: '任务名称', align: 'center', width: '5%' },
{ field: 'description', title: '任务说明', align: 'center', width: '13%' },
{ field: 'egtIosAppVersion', title: 'IOS最低版本', align: 'center', width: '5%' },
{ field: 'egtAndroidAppVersion', title: '安卓最低版本', align: 'center', width: '5%' },
{ field: 'experLevel', title: '用户等级', align: 'center', width: '5%' },
{ field: 'prizeTypeStr', title: '奖励类型', align: 'center', width: '5%' },
{ field: 'prizeNum', title: '奖励数量', align: 'center', width: '5%' },
{ field: 'prizeName', title: '奖品名称', align: 'center', width: '5%' },
{ field: 'missionStatusStr', title: '状态', align: 'center', width: '5%' },
{ field: 'sort', title: '升序', align: 'center', width: '3%' },
{ field: 'updatedBy', title: '更新人', align: 'center', width: '5%' },
{
field: 'appId', title: 'APP', align: 'center', width: '8%',
formatter: function (val, row, index) {
if (val == 'qingxun') {
return '66';
} else {
return '侧耳';
}
}
},
{
field: 'createTime',
title: '创建时间',
align: 'center',
width: '12%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{
field: 'updateTime',
title: '更新时间',
align: 'center',
width: '12%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{
field: 'configId', title: '操作', align: 'center', width: '18%', formatter: function (val, row, index) {
var ret = '<button class="btn btn-sm btn-success opt-edit" data-id=' + val + '>' +
'<i class="glyphicon glyphicon-edit"></i>编辑</button>&nbsp;&nbsp;';
if (row.missionStatus == 0) {
ret += '<button class="btn btn-sm btn-do opt-change-status" data-id=' + val +
' data-status=' + row.missionStatus + '><i class="glyphicon glyphicon-arrow-up"></i>上架</button>';
} else if (row.missionStatus == 1) {
ret += '<button class="btn btn-sm btn-danger opt-change-status" data-id=' + val +
' data-status=' + row.missionStatus + '><i class="glyphicon glyphicon-arrow-down"></i>下架</button>';
}
return ret;
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [1, 20, 50, 100, 200],
search: false,
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
name: $("#name_query").val(),
category: $("#category_query").val() != "" ? $("#category_query").val() : null,
app: $("#app").val() != "" ? $("#app").val() : null,
beginDate: $('#beginDate').val(),
endDate: $('#endDate').val(),
};
return param;
},
toolbar: '#toolbar',
url: '/admin/mission/list.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
}
function checkLength(obj, len) {
if ($(obj).val().length > len) {
alert("字符长度超出限制");
}
}
</script>
<style scoped>
.qry_col {
float: left;
}
.tips-text {
color: red;
font-size: 13px;
}
.btn-do {
background-color: #f39c12;
color: white;
}
.btn-do:hover {
background-color: #ec7e0b;
color: white;
}</style>

View File

@@ -0,0 +1,637 @@
<template>
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<div class="summary col-sm-12">
<div class="col-sm-2 width30">
<span>今日实际奖池金额</span>
<span><span class="dayGoldNum">0</span><button class="btn btn-primary editGoldNum marginLeft20"
type="button" goldType="1" title="今日实际奖池金额">编辑</button></span>
</div>
<div class="col-sm-2 width30">
<span>实际奖池默认金额</span>
<span><span class="dayDefGoldNum">0</span><button class="btn btn-primary editGoldNum marginLeft20"
type="button" goldType="2" title="实际奖池默认金额">编辑</button></span>
</div>
<div class="col-sm-2 width30">
<span>展示奖池累计金币值</span>
<span><span class="dayShowGoldNum">0</span><button class="btn btn-primary editGoldNum marginLeft20"
type="button" goldType="3" title="展示奖池累计金币值">编辑</button></span>
</div>
</div>
<div class="col-sm-1">
</div>
<div class="col-sm-12">
<input type="hidden" value="1" id="prizeTypeVal" />
<form action="" id="searchForm" method="POST">
奖池类型<select name="prizeType" id="prizeType" data-btn-class="btn btn-warning">
<option value="1">普通奖池</option>
<option value="2">白名单奖池</option>
</select>
</form>
<button class="btn btn-primary" id="searchBtn">搜索</button>
<button class="btn btn-primary" id="add">添加奖品</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-2">
<span>奖池类型</span>
<span class="prizeTypeNum"></span>
</div>
<div class="col-sm-2">
<span>奖品种类数</span>
<span class="typeNum" whiteNum="0" ordinaryNum="0">0</span>
</div>
<div class="col-sm-2">
<span>总期望值(金币)</span>
<span class="dayDisplayGoldNum" whiteNum="0" ordinaryNum="0" ratioValue="0"
whiteRatioValue="0">0</span>
</div>
</div>
</div>
<div id="table"></div>
</section>
<!-- 添加弹窗 -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="addModalLabel">添加奖品</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="addForm">
<!-- 奖品个数 -->
<div class="form-group">
<label class="col-sm-3 control-label">奖池类型</label>
<div class="col-sm-8 prizeTypeNum"></div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">奖品等级</label>
<div class="col-sm-6">
<select name="level" id="level" data-btn-class="btn btn-warning">
<option value="1">一级</option>
<option value="2">二级</option>
<option value="3">三级</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">选择奖品</label>
<div class="col-sm-8">
<select name="goldPrize" id="goldPrize" data-btn-class="btn btn-warning">
</select>
</div>
</div>
<!-- 中奖率 -->
<div class="form-group">
<label class="col-sm-3 control-label">中奖率</label>
<div class="col-sm-8">
<input type="text" id="winningRate" name="winningRate"
class="validate[required,max[100]]" placeholder="当前概率不得超过100">%
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">操作人</label>
<div class="col-sm-8">
<input type="text" id="operator" name="operator" class="validate[required]"
placeholder="请输入你的名字">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button class="btn btn-primary" type="button" id="addSave">保存</button>
</div>
</div>
</div>
</div>
<!-- 编辑弹窗 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="editModalLabel">编辑奖品</h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="editForm">
<input type="hidden" id="editId" value="">
<div class="form-group">
<label class="col-sm-3 control-label">中奖率</label>
<div class="col-sm-8">
<input type="text" id="occupationRatio" name="occupationRatio"
class="validate[required,max[100]]" placeholder="当前概率不得超过100">%
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button class="btn btn-primary" type="button" id="editSave">保存</button>
</div>
</div>
</div>
</div>
</div>
<!-- 编辑弹窗 -->
<div class="modal fade" id="editGoldNumModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="editGoldNumLabel"></h4>
</div>
<div class="modal-body">
<form action="" class="form-horizontal" id="editGoldNumForm">
<div class="form-group">
<label class="col-sm-3 control-label">金额数量</label>
<input type="hidden" value="" id="goldNumType" />
<div class="col-sm-8">
<input type="text" id="goldNum" name="goldNum" class="validate[required,min[0]]">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button class="btn btn-primary" type="button" id="editGoldNum">保存</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
var ACCURACY = 1000; // 小数点精度
var RATIO_PART = 100000; // 概率换算单位
export default {
name: "PrizeGoldPoolAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getToolVal();
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'sel', title: '', align: 'center', checkbox: true, width: '1%', valign: 'middle' },
{ field: 'id', title: '', align: 'center', valign: 'middle', width: '1%', visible: false },
{
field: 'sel2', title: '编号', align: 'center', valign: 'middle', width: '5%',
formatter: function (value, row, index) {
//获取每页显示的数量
var pageSize = $('#table').bootstrapTable('getOptions').pageSize;
//获取当前是第几页
var pageNumber = $('#table').bootstrapTable('getOptions').pageNumber;
//返回序号注意index是从0开始的所以要加上1
return pageSize * (pageNumber - 1) + index + 1;
}
},
{
field: 'goldNum', title: '奖品', align: 'center', width: '5%', valign: 'middle',
formatter: function (val, row, index) {
return val + "金币";
}
},
{
field: 'level', title: '奖品等级', align: 'center', width: '15%', valign: 'middle',
formatter: function (val, row, index) {
if (val == 1) {
return "一级";
} if (val == 2) {
return "二级";
} else {
return "三级";
}
}
},
{
field: '', title: '中奖率', align: 'center', valign: 'middle', width: '10%', formatter: function (val, row, index) {
if (row.goldPrizeId == 1) {
return "默认奖品"
}
return row.occupationRatio / ACCURACY + '%';
}
},
{
field: '', title: '期望值', align: 'center', valign: 'middle', width: '10%', formatter: function (val, row, index) {
if (row.goldPrizeId == 1) {
if (row.prizePoolType == 1) {
return (Number($(".dayDisplayGoldNum").attr("ratioValue"))).toFixed(2);
} else {
return (Number($(".dayDisplayGoldNum").attr("whiteRatioValue"))).toFixed(2);
}
}
var key = row.prizeId;
return (Number(row.occupationRatio * row.goldNum / RATIO_PART)).toFixed(2);
}
},
{ field: 'usePrizeNum', title: '今日被抽中数量', align: 'center', valign: 'middle', width: '10%' },
{
field: 'updateTime',
title: '修改时间',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{ field: 'operator', title: '操作人', align: 'center', width: '5%', valign: 'middle' },
{
field: 'tmp',
title: '操作',
align: 'center',
width: '10%',
valign: 'middle',
formatter: function (val, row, index) {
var key = row.id;
if (row.goldPrizeId != 1) {
var str = "<button class='btn btn-sm btn-success opt-edit' style='margin-right: 4px;' data-id=" + key + ">编辑</button>";
str += "<button class='btn btn-sm btn-success opt-del' style='margin-right: 4px;' data-id=" + key + ">下架</button>"
return str;
}
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [1, 10, 20, 30, 50],
search: false,
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
prizeType: $('#prizeType').val()
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/prizeGoldPool/getAll',
onLoadSuccess: function (data) {
console.log('load success');
},
onLoadError: function () {
console.log('load fail');
}
});
// 查询按钮
$('#searchBtn').click(function () {
TableHelper.doRefresh('#table');
search();
});
function search() {
$("#prizeTypeVal").val($("#prizeType").val());
if (parseInt($("#prizeType").val()) == 1) {
$(".prizeTypeNum").html("普通奖池");
$(".typeNum").html($(".typeNum").attr("ordinaryNum"));
$(".dayDisplayGoldNum").html($(".dayDisplayGoldNum").attr("ordinaryNum"));
} else {
$(".prizeTypeNum").html("白名单奖池");
$(".typeNum").html($(".typeNum").attr("whiteNum"));
$(".dayDisplayGoldNum").html($(".dayDisplayGoldNum").attr("whiteNum"));
}
}
function getGoldPrizeList(type) {
debugger;
$('#goldPrize').html("");
$.get('/admin/prizeGoldPool/prizeList', { type: type }, function (res) {
if (res.code == 200) {
var j = 0;
for (var i = 0; i < res.data.length; i++) {
var $opt = $('<option value=""></option>');
$('#goldPrize').append($opt);
if (res.data[i].level != 1) {
$opt.hide();
} else {
if (j == 0) {
$opt.attr("selected", true);
j = 1;
}
}
$opt.attr('value', res.data[i].id);
$opt.attr("class", res.data[i].level)
$opt.html(res.data[i].goldNum + "金币");
}
if (j == 0) {
$('#goldPrize').val("");
}
}
})
}
function getToolVal() {
//页面第一次加载,默认为普通奖池
$(".prizeTypeNum").html("普通奖池");
$.post('/admin/prizeGoldPool/panelVal', function (res) {
if (res.code == 200) {
$(".dayGoldNum").html(res.data.remainGoldNum);
$(".dayDefGoldNum").html(res.data.defGoldNum);
$(".dayShowGoldNum").html(res.data.showGoldNum);
$(".typeNum").html(res.data.prizeNum);
$(".dayDisplayGoldNum").html(res.data.expectedValue);
$(".typeNum").attr("whiteNum", res.data.whitePrizeNum);
$(".dayDisplayGoldNum").attr("whiteNum", res.data.whiteExpectedValue);
$(".typeNum").attr("ordinaryNum", res.data.prizeNum);
$(".dayDisplayGoldNum").attr("ordinaryNum", res.data.expectedValue);
$(".dayDisplayGoldNum").attr("ratioValue", res.data.ratioValue);
$(".dayDisplayGoldNum").attr("whiteRatioValue", res.data.whiteRatioValue);
}
})
}
$("#level").change(function () {
debugger;
var level = $(this).children('option:selected').val();
var i = 0;
$("#goldPrize option").each(function () {
$(this).attr("selected", false);
if ($(this).hasClass(level)) {
$(this).show();
if (i == 0) {
$(this).attr("selected", true);
i = 1;
}
} else {
$(this).hide();
}
})
if (i == 0) {
$('#goldPrize').val("");
}
});
$('.editGoldNum').on('click', function () {
debugger;
$("#goldNum").val($(this).parent().find(".dayGoldNum").eq(0).html());
$('#editGoldNumLabel').val($(this).attr("title"));
$("#goldNumType").val($(this).attr("goldType"));
$('#editGoldNumModal').modal('show');
})
$('#editGoldNum').on('click', function () {
if ($('#editGoldNumForm').validationEngine('validate')) {
$.ajax({
type: 'post',
url: '/admin/prizeGoldPool/editGoldNum.action',
dataType: 'json',
data: {
goldNumType: $('#goldNumType').val(),
goldNum: $('#goldNum').val()
},
success: function (res) {
if (res.code == 200) {
$("#editGoldNumModal").modal('hide');
$("#tipMsg").text("修改成功");
$("#tipModal").modal('show');
if (parseInt($('#goldNumType').val()) == 1) {
$(".dayGoldNum").html($('#goldNum').val());
}
if (parseInt($('#goldNumType').val()) == 2) {
$(".dayDefGoldNum").html($('#goldNum').val());
}
if (parseInt($('#goldNumType').val()) == 3) {
$(".dayShowGoldNum").html($('#goldNum').val());
}
} else {
$("#tipMsg").text("修改失败,错误码:" + res.code);
$("#tipModal").modal('show');
}
}
})
}
})
$("#add").on('click', function () {
$("#level").val(1);
getGoldPrizeList($("#prizeType").val())
$("#addModal").find(".prizeTypeNum").html($("#prizeType").find("option:selected").text());
$("#prizeTypeVal").val($("#prizeType").val());
$("#winningRate").val("");
$("#operator").val("");
$('#addModal').modal('show');
})
$('#addSave').on('click', function () {
if ($('#addForm').validationEngine('validate')) {
if (parseFloat($('#winningRate').val()) % ACCURACY >= ACCURACY) {
// 小数位超过3位则不允许设置
$('#tipMsg').text('概率最多只允许设置到小数点后3位');
$('#tipModal').modal('show');
return;
}
var reg = /^[0-9]+([.]{1}[0-9]+){0,1}$/;
if (!reg.test($('#winningRate').val())) {
$('#tipMsg').text('概率只能是数值');
$('#tipModal').modal('show');
return;
}
$.ajax({
type: 'post',
url: '/admin/prizeGoldPool/savePrizeGoldPool.action',
dataType: 'json',
data: {
prizeTypeVal: $("#prizeTypeVal").val(),
goldPrizeId: $('#goldPrize').val(),
winningRate: $('#winningRate').val() * ACCURACY,
operator: $('#operator').val()
},
success: function (res) {
if (res.code == 200) {
$("#addModal").modal('hide');
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
getToolVal();
search();
} else {
$("#tipMsg").text("保存失败," + res.message);
$("#tipModal").modal('show');
}
}
})
}
});
$('#table').on('click', '.opt-edit', function () {
var id = $(this).data('id');
if (id == 'undefined' || !id) {
return;
}
var data = $('#table').bootstrapTable('getRowByUniqueId', id);
$("#occupationRatio").val(data.occupationRatio / ACCURACY);
$("#editId").val(id);
$('#editModal').modal('show');
});
$('#editSave').on('click', function () {
if ($('#editForm').validationEngine('validate')) {
$.ajax({
type: 'post',
url: '/admin/prizeGoldPool/editPrizeGoldPollRatio.action',
dataType: 'json',
data: {
id: $('#editId').val(),
occupationRatio: $('#occupationRatio').val() * ACCURACY
},
success: function (res) {
if (res.code == 200) {
$("#editModal").modal('hide');
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
getToolVal();
search();
} else {
$("#tipMsg").text("保存失败," + res.message);
$("#tipModal").modal('show');
}
}
})
}
});
$('#table').on('click', '.opt-del', function () {
var id = $(this).data('id');
if (id == 'undefined' || !id) {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (confirm("确认下架该奖品吗?")) {
$.ajax({
type: "post",
url: "/admin/prizeGoldPool/delPrize.action",
data: {
id: id
},
dataType: "json",
success: function (json) {
if (json.code == 200) {
$("#tipMsg").text("已下架该奖品");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
getToolVal();
search();
} else {
$("#tipMsg").text("下架失败[" + id + "]," + json.msg);
$("#tipModal").modal('show');
}
}
});
}
})
})
}
},
};
</script>
<style scoped>
.summary {
display: flex;
justify-content: flex-start;
align-items: center;
height: 50px;
}
.summary div {
margin-right: 20px;
display: flex;
justify-content: flex-between;
align-items: center;
height: 100%;
}
#attention {
color: lightgray;
}
.content {
height: auto;
}
#searchForm {
display: inline-block;
}
#btnSearch {
margin-left: 4px;
}
#toolbar input,
#toolbar select {
margin-left: 4px;
margin-right: 4px;
}
.width30 {
width: 30%;
}
.marginLeft20 {
margin-left: 20px;
}</style>

View File

@@ -0,0 +1,174 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<section class="content">
<div id="table"></div>
<div id="toolbar">
<form id="searchForm" action="/admin/sign/get/prize/record/export" method="get" target="_blank">
<div class="col-sm-12">
<label for="erbanNo_query" class="qry_col control-label">平台号:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="erbanNo"
id="erbanNo_query"></div>
<label for="prizeName_query" class="qry_col control-label">奖品名称:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="prizeName"
id="prizeName_query"></div>
<label for="beginDate" class="col-sm-1 control-label">开始时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="beginDate"
id="beginDate">
</div>
<label for="endDate" class="col-sm-1 control-label">结束时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="endDate" id="endDate">
</div>
</div>
</form>
<div class="col-sm-12">
<button id="search" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>搜索
</button>
<button id="btnExport" class="btn btn-default">
<i class="glyphicon glyphicon-export"></i>导出
</button>
</div>
</div>
</section><!-- .content -->
</div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
var publishTimePicker = $('#publishTime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true,
startDate: new Date()
})
//ComboboxHelper.build(null,'#status');
export default {
name: "SignPrizeRecordAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#platform').selectpicker({
'selectedText': 'cat'
})
$('#table').bootstrapTable('destroy');
initTable();
/**增加搜索功能*/
$('#search').on('click', function () {
$('#table').bootstrapTable('destroy');
initTable();
});
var picker1 = $("#beginDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
var picker2 = $("#endDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
picker1.on('changeDate', function () {
var date = $('#beginDate').datepicker('getDate');
picker2.datepicker('setStartDate', date);
});
picker2.on('changeDate', function () {
var date = $('#endDate').datepicker('getDate');
picker1.datepicker('setEndDate', date);
});
// 导出EXCEL
$('#btnExport').on('click', function () {
$("#searchForm").submit();
});
});
}
},
};
function initTable() {
$('#table').bootstrapTable({
columns: [
{ field: 'tmp', title: 'ID', align: 'center', width: '5%', checkbox: true },
{ field: 'recordId', title: 'id', align: 'center', width: '5%' },
{ field: 'uid', title: 'uid', align: 'center', width: '5%' },
{ field: 'erbanNo', title: '平台号', align: 'center', width: '5%' },
{ field: 'nick', title: '昵称', align: 'center', width: '10%' },
{ field: 'prizeName', title: '奖品名称', align: 'center', width: '5%' },
{ field: 'prizeNum', title: '奖品数量', align: 'center', width: '5%' },
{ field: 'type', title: '奖励类型', align: 'center', width: '5%' },
{ field: 'prizeDay', title: '奖励天数', align: 'center', width: '5%' },
{
field: 'createTime',
title: '奖励时间',
align: 'center',
width: '15%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [1, 20, 50, 100, 200],
search: false,
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
erbanNo: $("#erbanNo_query").val(),
prizeName: $("#prizeName_query").val(),
beginDate: $('#beginDate').val(),
endDate: $('#endDate').val(),
configType: 1
};
return param;
},
toolbar: '#toolbar',
url: '/admin/sign/get/prize/record/list.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
}
</script>
<style scoped>
.qry_col {
float: left;
}</style>

View File

@@ -0,0 +1,197 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<section class="content">
<div id="table"></div>
<div id="toolbar">
<form id="searchForm" action="/admin/sign/get/sign/record/export" method="get" target="_blank">
<div class="col-sm-12">
<label for="erbanNo_query" class="qry_col control-label">平台号:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="erbanNo"
id="erbanNo_query"></div>
<label for="prizeName_query" class="qry_col control-label">奖品名称:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="prizeName"
id="prizeName_query"></div>
<label for="beginDate" class="col-sm-1 control-label">签到开始时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="beginDate"
id="beginDate">
</div>
<label for="endDate" class="col-sm-1 control-label">签到结束时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="endDate" id="endDate">
</div>
</div>
<div class="col-sm-12">
<label for="registerBeginDate" class="col-sm-1 control-label">注册开始时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="registerBeginDate"
id="registerBeginDate">
</div>
<label for="registerEndDate" class="col-sm-1 control-label">注册结束时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="registerEndDate"
id="registerEndDate"></div>
</div>
</form>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button id="btnExport" class="btn btn-default">
<i class="glyphicon glyphicon-export"></i>导出
</button>
</div>
<div class="col-sm-12">
<span>
签到人数<span class="signUserCount"> </span>
</span>
</div>
</div>
</section><!-- .content -->
</div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SignRecordAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'tmp', title: 'ID', align: 'center', width: '5%', checkbox: true },
{ field: 'recordId', title: 'id', align: 'center', width: '5%' },
{ field: 'uid', title: 'uid', align: 'center', width: '5%' },
{ field: 'erbanNo', title: '平台号', align: 'center', width: '5%' },
{ field: 'nick', title: '昵称', align: 'center', width: '10%' },
{ field: 'prizeName', title: '奖品名称', align: 'center', width: '5%' },
{ field: 'prizeNum', title: '奖品数量', align: 'center', width: '5%' },
{ field: 'prizeDay', title: '奖品天数', align: 'center', width: '5%' },
{
field: 'createTime',
title: '签到时间',
align: 'center',
width: '10%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{ field: 'signTime', title: '注册时间', align: 'center', width: '10%' }
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [1, 20, 50, 100, 200],
search: false,
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
erbanNo: $("#erbanNo_query").val(),
prizeName: $("#prizeName_query").val(),
beginDate: $('#beginDate').val(),
registerBeginDate: $('#registerBeginDate').val(),
registerEndDate: $('#registerEndDate').val(),
endDate: $('#endDate').val(),
configType: 0
};
return param;
},
toolbar: '#toolbar',
url: '/admin/sign/get/prize/record/list.action',
onLoadSuccess: function (data) { //加载成功时执行
console.log("load success");
if (data && data.rows.length > 0) {
$(".signUserCount").text(data.rows[0].userCount);
} else {
$(".signUserCount").text("0");
}
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 导出EXCEL
$('#btnExport').on('click', function () {
$("#searchForm").submit();
});
var picker1 = $("#beginDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
var picker2 = $("#endDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
var chargeStart = $('#registerBeginDate').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var chargeEnd = $('#registerEndDate').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
chargeStart.on('changeDate', function () {
var date = $('#registerBeginDate').datepicker('getDate');
chargeEnd.datepicker('setStartDate', date);
});
chargeEnd.on('changeDate', function () {
var date = $('#registerEndDate').datepicker('getDate');
chargeStart.datepicker('setEndDate', date);
});
picker1.on('changeDate', function () {
var date = $('#beginDate').datepicker('getDate');
picker2.datepicker('setStartDate', date);
});
picker2.on('changeDate', function () {
var date = $('#endDate').datepicker('getDate');
picker1.datepicker('setEndDate', date);
});
});
}
},
};
</script>
<style scoped>.qry_col {
float: left;
}</style>

View File

@@ -0,0 +1,505 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<section class="content">
<div id="table"></div>
<div id="toolbar">
<label class="control-label">奖励类型:</label>
<select name="rewardType" id="rewardType" data-btn-class="btn-warning">
<option value="" selected="selected">全部</option>
<option value="0">每日签到</option>
<option value="1">累计签到</option>
</select>
<label class="control-label">奖品名称:</label>
<input type="text" class="input-sm" name="searchGiftname" placeholder="请输入奖品名称" id="searchGiftname">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-wrench"></i>查询
</button>
<button id="gift-add" class="btn btn-default">
<i class="glyphicon glyphicon-plus"></i>增加
</button>
<button id="btnMultiDel" class="btn btn-default">
<i class="glyphicon"></i>删除选中
</button>
</div>
</section><!-- .content -->
</div>
</div>
</section>
<div class="modal fade" id="giftModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="modalLabel">添加奖品</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="giftForm">
<input type="hidden" name="id" id="giftId" />
<div class="form-group">
<label class="col-sm-2 control-label">奖励分类</label>
<div class="col-sm-10">
<select name="giftType" id="giftType" data-btn-class="btn-warning"
onchange="selectConsumeChange()">
<option value="1" selected="selected">萝卜</option>
<option value="2">礼物</option>
<option value="3">头饰</option>
<option value="4">座驾</option>
<option value="5">贵族</option>
</select>
</div>
</div>
<div class="form-group giftPrize">
<label class="col-sm-2 control-label">奖品</label>
<div class="col-sm-10">
<select name="giftId" id="gift" data-btn-class="btn-warning">
</select>
</div>
<input type="hidden" name="giftName" id="giftDetailName" />
</div>
<div class="form-group">
<label for="giftName" class="col-sm-2 control-label">奖品名称</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" name="name" id="giftName">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">奖品图片:</label>
<div class="col-sm-10">
<img src="" id="picImage" style="width:250px;height:90px;" alt="">
<input type="file" id="picUploadFile" name="file"
accept="image/gif,image/jpeg,image/jpg,image/png,image/svga">
<button class="btn btn-success" type="button" id="picUploadBtn">上传</button>
<input type="hidden" id="picUrl" name="icon" class="form-control validate[required]" />
<span id="picImgInfo" style="color:red;"></span>
</div>
</div>
<div class="form-group giftNumDiv">
<label class="col-sm-2 control-label">奖励数量</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required,min[1]]" name="num" id="giftNum">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">奖励分类</label>
<div class="col-sm-10">
<input type="hidden" value="1" id="optGiftTypeVal" name="type" />
<div class="col-sm-10 paddingTop7px" id="optGiftType"></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">签到天数</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required,min[1]]" name="signDays"
id="signDays">
</div>
</div>
<div class="form-group rewardDaysDiv">
<label class="col-sm-2 control-label">奖励天数</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required,min[1]]" name="rewardDays"
id="rewardDays">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">操作人</label>
<div class="col-sm-10">
<input type="text" class="form-control validate[required]" name="operator" id="operator">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="save">保存</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SignRewardConfigAdminView",
setup() {
function selectConsumeChange() {
debugger;
var val = $('#giftType').val();
var i = 0;
$("#gift option").each(function () {
$(this).attr("selected", false);
if ($(this).hasClass(val)) {
$(this).show();
if (i == 0) {
$(this).attr("selected", true);
$('#gift').val($(this).val());
i = 1;
}
} else {
$(this).hide();
}
})
if (i == 0) {
$('#gift').val("");
}
if (val == 1) {
$(".giftPrize").hide();
} else {
$(".giftPrize").show();
}
if (val == 1 || val == 2) {
$(".rewardDaysDiv").hide();
$("#giftNum").addClass("validate[required,min[1]]");
$(".giftNumDiv").show();
} else {
$(".rewardDaysDiv").show();
$("#rewardDays").addClass("validate[required,min[1]]");
$(".giftNumDiv").hide();
}
}
window.selectConsumeChange = selectConsumeChange;
return {
selectConsumeChange
};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getGiftList();
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{
field: 'sel', title: '', align: 'center', checkbox: true, width: '1%', valign: 'middle',
formatter: function (value, row, index) {
return {
disabled: false
};
}
},
{ field: 'id', title: '', align: 'center', valign: 'middle', width: '1%', visible: false },
{
field: 'sel2', title: '编号', align: 'center', valign: 'middle', width: '5%',
formatter: function (value, row, index) {
//获取每页显示的数量
var pageSize = $('#table').bootstrapTable('getOptions').pageSize;
//获取当前是第几页
var pageNumber = $('#table').bootstrapTable('getOptions').pageNumber;
//返回序号注意index是从0开始的所以要加上1
return pageSize * (pageNumber - 1) + index + 1;
}
},
{
field: 'type', title: '奖励类型', align: 'center', width: '15%', valign: 'middle',
formatter: function (val, row, index) {
if (val == 0) {
return "每日签到";
} else {
return "累计签到";
}
}
},
{ field: 'signDays', title: '签到天数', align: 'center', width: '15%', valign: 'middle' },
{ field: 'rewardDays', title: '奖励天数', align: 'center', width: '15%', valign: 'middle' },
{
field: 'giftType', title: '奖品分类', align: 'center', width: '15%', valign: 'middle',
formatter: function (val, row, index) {
if (val == 1) {
return "萝卜";
} else if (val == 2) {
return "礼物";
} else if (val == 3) {
return "头饰";
} else if (val == 4) {
return "座驾";
} else if (val == 5) {
return "贵族";
}
}
},
{ field: 'name', title: '奖品名称', align: 'center', width: '15%' },
{ field: 'num', title: '奖品数量', align: 'center', width: '15%' },
{
field: 'updateTime',
title: '修改时间',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{ field: 'operator', title: '操作人', align: 'center', width: '10%' },
{
field: 'tmp', title: '操作', align: 'center', width: '15%', formatter: function (val, row, index) {
var key = row.id;
var str = '<button class="btn btn-sm btn-success opt-edit" data-id=' + key + '><i class="glyphicon glyphicon-edit"></i>编辑</button>';
return str;
}
}
],
uniqueId: 'id',
cache: false,
striped: true,
showRefresh: true,
pageSize: 10,
pagination: true,
pageList: [1, 10, 20, 30, 50],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
rewardType: $('#rewardType').val(),
searchGiftname: $('#searchGiftname').val()
};
return param;
},
toolbar: '#toolbar',
url: '/admin/signRewardConfig/getAll.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
})
function getGiftList() {
debugger;
$('#gift').html("");
$.get('/admin/signRewardConfig/getGiftList', function (res) {
if (res.code == 200) {
var j = 0;
for (var i = 0; i < res.data.length; i++) {
var $opt = $('<option value=""></option>');
$('#gift').append($opt);
$opt.attr('value', res.data[i].giftId);
$opt.attr("class", res.data[i].giftType)
$opt.html(res.data[i].giftName);
$opt.hide();
}
}
})
}
$("#gift-add").click(function () {
// 打开编辑弹窗
$("#giftModal").modal('show');
$("#giftForm")[0].reset();
$('#gift').val("");
$('#picUrl').val('');
$('#picImage').attr("src", '');
$("#picImgInfo").html('');
$("#picUploadFile").val('');
$("#optGiftType").html("累计签到");
$("#giftId").val('');
$("#optGiftTypeVal").val("1");
$("#giftName").attr('readonly', false);
$("#signDays").attr('readonly', false);
$(".giftPrize").hide();
$(".rewardDaysDiv").hide();
$(".giftNumDiv").show();
});
$("#table").on("click", '.opt-edit', function () {
debugger;
var id = $(this).attr("data-id");
$.ajax({
type: "get",
url: "/admin/signRewardConfig/get.action",
data: { id: id },
dataType: "json",
success: function (json) {
if (json.entity) {
$("#giftId").val(json.entity.id);
$("#giftName").val(json.entity.name);
$("#giftType").val(json.entity.giftType);
// 设置礼物图片
$("#picUploadFile").val('');
$('#picUrl').val(json.entity.icon);
$('#picImage').attr("src", json.entity.icon);
if (json.entity.icon != '') {
$("#picImgInfo").html('已上传');
} else {
$("#picImgInfo").html('未上传');
}
if ($("#giftType").val() == 1) {
$(".giftPrize").hide();
$(".rewardDaysDiv").hide();
$(".giftNumDiv").show();
} else {
window.selectConsumeChange();
}
$("#gift").val(json.entity.giftId);
$("#giftNum").val(json.entity.num);
if (json.entity.type == 0) {
$("#optGiftType").html("每日签到");
} else {
$("#optGiftType").html("累计签到");
}
$("#signDays").val(json.entity.signDays);
$("#signDays").attr('readonly', true);
$("#rewardDays").val(json.entity.rewardDays);
$("#operator").val(json.entity.operator);
$("#optGiftTypeVal").val(json.entity.type)
// 打开编辑弹窗
$("#giftModal").modal('show');
} else {
$("#tipMsg").text("获取菜单信息出错");
$("#tipModal").modal('show');
}
}
});
});
$('#picUploadBtn').on('click', function () {
$.ajaxFileUpload({
fileElementId: 'picUploadFile', //需要上传的文件域的ID即<input type="file">的ID。
url: '/admin/signRewardConfig/upload', //后台方法的路径
type: 'post', //当要提交自定义参数时这个参数要设置成post
dataType: 'json', //服务器返回的数据类型。可以为xml,script,json,html。如果不填写jQuery会自动判断。
secureuri: false, //是否启用安全提交默认为false。
async: true, //是否是异步
success: function (json) { //提交成功后自动执行的处理函数参数data就是服务器返回的数据。
if (json.path) {
$('#picUrl').val(json.path);
$('#picImage').attr("src", json.path);
if (json.path != '') {
$("#picImgInfo").html('已上传成功');
} else {
$("#picImgInfo").html('未上传成功');
}
console.log(json.path);
} else {
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
}
},
error: function (data, status, e) { //提交失败自动执行的处理函数。
console.error(e);
}
});
})
$("#save").click(function () {
if ($('#giftForm').validationEngine('validate')) {
$("#consumeType").removeAttr("disabled");
$("#giftDetailName").val($("#gift").find("option:selected").text());
$.ajax({
type: "post",
url: "/admin/signRewardConfig/save.action",
data: $('#giftForm').serialize(),
dataType: "json",
success: function (json) {
if (json.code == 200) {
$("#giftModal").modal('hide');
$("#tipMsg").text("保存成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text(json.message);
$("#tipModal").modal('show');
}
}
});
}
});
$('#btnMultiDel').on('click', function () {
debugger;
var rows = $("#table").bootstrapTable("getSelections");
if (rows.length == 0) {
alert("请先选择要删除的记录");
return;
}
console.log("rows: " + rows.length);
var idArr = [];
for (var i = 0; i < rows.length; i++) {
if (rows[i]['type'] == 0) {
alert("每日签到不能删除,请去掉选中");
return;
}
idArr.push(rows[i]['id']);
}
if (confirm("你确认删除选中奖励吗?")) {
$.ajax({
type: 'post',
url: "/admin/signRewardConfig/delConfig.action",
data: {
'ids': JSON.stringify(idArr)
},
dataType: "json",
success: function (json) {
if (json.code == 200) {
$("#tipMsg").text("已删除选中奖励");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text("操作失败," + json.message);
$("#tipModal").modal('show');
}
}
});
}
});
});
}
},
};
</script>
<style scoped>.paddingTop7px {
padding: 0px;
padding-top: 7px;
}</style>

View File

@@ -0,0 +1,381 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="formOuter" action="" method="post" target="_blank">
<input type="hidden" name="erbanNo" id="exportErbanNo">
<input type="hidden" name="queryStartDate" id="exportQueryStartDate">
<input type="hidden" name="queryEndDate" id="exportQueryEndDate">
</form>
<div id="toolbar">
<div class="col-sm-12">
<div class="col-sm-4">
<label htmlFor="erbanNo" class="col-sm-4 control-label">房主平台号:</label>
<div class="col-sm-8">
<input type="text" class="input-sm form-control" name="erbanNo" id="erbanNo">
</div>
</div>
<div class="col-sm-4">
<label class="col-sm-4 control-label">开始时间:</label>
<div class="col-sm-8">
<input type="text" class="input-sm datetime" name="queryStartDate" id="queryStartDate">
</div>
</div>
<div class="col-sm-4">
<label class="col-sm-4 control-label">结束时间:</label>
<div class="col-sm-8">
<input type="text" class="input-sm datetime" name="queryEndDate" id="queryEndDate">
</div>
</div>
</div>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button class="btn btn-default js-quick-search js-quick-search-1 active" data-days="1">
昨天
</button>
<button class="btn btn-default js-quick-search js-quick-search-7" data-days="7">
最近7天
</button>
<button class="btn btn-default js-quick-search js-quick-search-30" data-days="30">
最近30天
</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
<!-- 编辑弹框 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editModalLabel">详情列表</h4>
</div>
<div class="modal-body">
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="erbanNo" id="exportDetailErbanNo">
<input type="hidden" name="queryStartDate" id="exportDetailQueryStartDate">
<input type="hidden" name="queryEndDate" id="exportDetailQueryEndDate">
</form>
<div id="toolbar2">
<div class="col-sm-12">
<button id="btnExportDetail" class="btn btn-sm btn-primary">导出</button>
</div>
</div>
<div id="table2"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { cleanArray } from '@/utils/maintainer';
export default {
name: "SingleRoomPkAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.datetime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
$("#queryStartDate").datetimepicker({
minView: "month",
language: 'zh-CN',
todayBtn: 1,
autoclose: 1
}).on("changeDate", function (event) {
$("#queryEndDate").datetimepicker('setStartDate', event.date);
});
$("#queryEndDate").datetimepicker({
minView: "month",
language: 'zh-CN',
todayBtn: 1,
autoclose: 1,
useCurrent: false
}).on("changeDate", function (event) {
$("#queryStartDate").datetimepicker('setEndDate', event.date);
});
$('.js-quick-search').on('click', function () {
$('.js-quick-search').removeClass('active')
$(this).addClass('active');
setSearchTimeUseQuickWay($(this));
TableHelper.doRefresh('#table');
});
function setSearchTimeUseQuickWay(quickDom) {
const days = quickDom.attr("data-days");
const today = new Date(new Date().setHours(0, 0, 0, 0));
const todayStr = formatTime(today);
const startTime = formatTime(new Date(today.getTime() - days * 24 * 60 * 60 * 1000));
$('#queryStartDate').val(startTime);
$('#queryEndDate').val(todayStr);
}
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'title', title: '房间名称', align: 'center', width: '10%' },
{ field: 'erbanNo', title: '房间平台号', align: 'center', width: '5%' },
{ field: 'validPkNum', title: '有效pk次数', align: 'center', width: '10%' },
{ field: 'validWinNum', title: '有效pk胜利次数', align: 'center', width: '10%' },
{ field: 'pkNum', title: 'pk次数', align: 'center', width: '10%' },
{ field: 'pkMin', title: 'pk总时长/分钟', align: 'center', width: '10%' },
{ field: 'pkAmount', title: 'pk总流水', align: 'center', width: '10%' },
{ field: 'normalAmount', title: '普通礼物总流水', align: 'center', width: '10%' },
{ field: 'bagAmount', title: '背包礼物总流水', align: 'center', width: '10%' },
{
field: 'erbanNo',
title: '其他',
align: 'center',
width: '10%',
formatter: function (val) {
console.log("erbanNo = " + val);
return '<button id="btnEdit" name="btnEdit" class="btn btn-sm btn-success opt-edit" data-id=' + val + '>' +
'<i class="glyphicon glyphicon-edit"></i>详情</button>';
}
}
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 50, 100],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
erbanNo: $('#erbanNo').val(),
queryStartDate: $('#queryStartDate').val(),
queryEndDate: $('#queryEndDate').val(),
pageSize: params.pageSize,
pageNumber: params.pageNumber,
pkType: 2,
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/crossRoom/pk/statisList.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total,
});
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 编辑获取信息
$("#table").on("click", '.opt-edit', function () {
let erbanNo = $(this).attr("data-id");
$('#exportDetailErbanNo').val(erbanNo);
$('#table2').bootstrapTable('destroy');
$('#table2').bootstrapTable({
columns: [
{ field: 'roundId', title: '场次', align: 'center', width: '5%' },
{
field: 'beginTime',
title: 'pk开始时间',
align: 'center',
valign: 'middle',
width: '5%',
formatter: function (val, row, index) {
if (val == undefined || val == null) return '';
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
}
},
{ field: 'duration', title: 'pk时长/分钟', align: 'center', width: '5%' },
{ field: 'pkAmount', title: 'pk流水', align: 'center', width: '5%' },
{ field: 'normalAmount', title: '普通礼物流水', align: 'center', width: '5%' },
{ field: 'bagAmount', title: '背包礼物流水', align: 'center', width: '5%' },
{ field: 'pkResult', title: '结果', align: 'center', width: '5%' }
],
undefinedText: "0",
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pageList: [10, 20, 50, 100],
pagination: true,
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
erbanNo: erbanNo,
queryStartDate: $('#queryStartDate').val(),
queryEndDate: $('#queryEndDate').val(),
pageSize: params.pageSize,
pageNumber: params.pageNumber,
pkType: 2,
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/crossRoom/pk/detailList.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total,
});
// 打开编辑弹窗
$("#editModal").modal('show');
$('#erbanNoExport').val(erbanNo);
},
error: function (req) {
serverError(req);
}
})
},
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
})
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
function getQueryParams() {
var param = {
erbanNo: $('#erbanNo').val(),
queryStartDate: $('#queryStartDate').val(),
queryEndDate: $('#queryEndDate').val(),
pkType: 2
};
return param;
}
function getDetailQueryParams() {
var param = {
erbanNo: $('#exportDetailErbanNo').val(),
queryStartDate: $('#queryStartDate').val(),
queryEndDate: $('#queryEndDate').val(),
pkType: 2,
};
return param;
}
function param(json) {
if (!json) return ''
return cleanArray(Object.keys(json).map(key => {
if (json[key] === undefined) return ''
return encodeURIComponent(key) + '=' +
encodeURIComponent(json[key])
})).join('&')
}
// 导出
$('#btnExport').on('click', function () {
console.log("导出")
window.location.href = `/admin/crossRoom/pk/statisListExport?${param(getQueryParams())}`
})
// 详情导出
$('#btnExportDetail').on('click', function () {
console.log("详情导出")
window.location.href = `/admin/crossRoom/pk/detailListExport?${param(getDetailQueryParams())}`
})
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,178 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<div id="toolbar">
<div class="col-lg-12">
</div>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { formatTime } from '@/utils/maintainer';
export default {
name: "SingleRoomPkingAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
buildTable();
// 列表设置
function buildTable() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
cache: false,
striped: true,
showRefresh: false,
pageSize: 10000,
pagination: true,
pageList: [50],
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) {
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
pkType: 2
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/crossRoom/pk/pkingList.action',
onLoadSuccess: function (res) { //加载成功时执行
if (res.code == undefined || res.code === 200) {
console.log("加载成功!");
} else {
$("#tipMsg").text(res.message);
$("#tipModal").modal('show');
}
},
onLoadError: function (res) { //加载失败时执行
console.log("load fail");
},
columns: [
{ field: 'inviteErbanNo', title: '发起方平台号', align: 'center', width: '5%' },
{ field: 'inviteName', title: '发起方名称', align: 'center', width: '5%' },
{ field: 'inviteAmount', title: '发起方PK流水', align: 'center', width: '8%' },
{ field: 'acceptErbanNo', title: '接收方平台号', align: 'center', width: '5%' },
{ field: 'acceptName', title: '接收方名称', align: 'center', width: '5%' },
{ field: 'acceptAmount', title: '接收方PK流水', align: 'center', width: '5%' },
{ field: 'beginTime', title: 'PK开始时间', align: 'center', valign: 'middle', width: '10%', formatter: formatTime },
{
field: 'pkState', title: 'PK状态', align: 'center', valign: 'middle', width: '10%',
formatter: function (val) {
if (val === 1) {
return 'PK中';
} else if (val === 2) {
return '惩罚中';
} else {
return '-';
}
}
},
{ field: 'duration', title: '设定PK时长/分钟', align: 'center', width: '5%' },
{
field: 'id',
title: '操作',
align: 'center',
width: '10%',
formatter: function (val, row, index) {
return '<button id="btnEdit" name="btnEdit" class="btn btn-sm btn-success opt-edit" data-id=' + val + '>' +
'<i class="glyphicon glyphicon-edit"></i> 强制结束</button>';
}
}
]
});
}
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 详情列表信息
$("#table").on("click", '.opt-edit', function () {
var id = $(this).attr("data-id");
if (id == 'undefined') {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (confirm("PK还未结束是否强制停止? \r\n ")) {
$.ajax({
type: 'post',
url: "/admin/crossRoom/pk/forceEnd.action",
data: { roundId: id },
dataType: "json",
success: function (json) {
if (json.code == 200) {
$("#tipMsg").text("结束成功");
$("#tipModal").modal('show');
buildTable();
} else {
$("#tipMsg").text("结束失败");
$("#tipModal").modal('show');
}
}
});
}
})
});
}
},
};
</script>
<style scoped>
.control-label {
padding-right: 0;
margin-right: 0;
}
.col-sm-3 {
padding-right: 0;
padding-left: 0;
}
.col-sm-8 {
padding-right: 0;
padding-left: 0;
}</style>

View File

@@ -0,0 +1,356 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<!-- .content -->
<div id="table"></div>
<div id="toolbar" style="height: auto;">
<form id="searchForm" class="col-sm-12" target="_blank">
<div class="col-sm-12">
<label for="erbanNo" class="col-sm-1 control-label">平台号:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="erbanNo" id="erbanNo"></div>
<label class="col-sm-1 control-label">发布时间:</label>
<div class="col-sm-2"><input type="text" class="form-control" name="beginDate" id="beginDate">
</div><span class="col-sm-1"></span>
<div class="col-sm-2"><input type="text" class="form-control" name="endDate" id="endDate"></div>
<label for="status" class="col-sm-1 control-label">状态:</label>
<div class="col-sm-2">
<select name="status" id="status" data-btn-class="btn-warning" class="form-control">
<option value="" selected="selected">全部</option>
</select>
</div>
</div>
</form>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button id="btnReset" class="btn btn-default">
<i class="glyphicon glyphicon-remove"></i>重置
</button>
</div>
</div>
</div>
</div>
</section>
<div class="modal fade" id="showModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content" style="width: 500px;">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="modalLabel">查看</h4>
</div>
<div class="modal-body">
<input type="hidden" name="id" id="dynamicId" />
<div class="show" style="margin-left: 60px">
</div>
</div>
<div id="imgMask"><img src="" alt=""></div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
import { showLoading, hideLoading } from '@/utils/maintainer';
var picker1 = $("#beginDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true,
todayBtn: true
});
var picker2 = $("#endDate").datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true,
todayBtn: true
});
picker1.on('changeDate', function () {
var date = $('#beginDate').datetimepicker('getDate');
picker2.datetimepicker('setStartDate', date);
});
picker2.on('changeDate', function () {
var date = $('#endDate').datetimepicker('getDate');
picker1.datetimepicker('setEndDate', date);
});
export default {
name: "SkillCardAudioVerifyView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
setStatusSelectOption();
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '平台号', align: 'center', width: '5%' },
{ field: 'nick', title: '昵称', align: 'center', width: '5%' },
{
field: 'resUrl',
title: '语音',
align: 'center',
width: '5%',
formatter: function (val, row, index) {
return '<audio controls="controls"><source src="' + val + '" type="audio/mpeg"></audio>';
/*if (row.type == 1){
return '<audio controls="controls"><source src="' + val + '" type="audio/mpeg"></audio>' ;
}else if (row.type == 2){
return "<button href='#' class='btn btn-sm' style='color: #00acd6;background:none' onclick=showPic('"+ row.resUrl + "'," + row.id + ")>查看图片</button>";
} else if (row.type == 3){
return "<button href='#' class='btn btn-sm' style='color: #00acd6;background:none' onclick=showVideo('"+ row.resUrl + "'," + row.id + ")>查看视频</button>";
}*/
}
},
{
field: 'createTime',
title: '发布时间',
align: 'center',
width: '5%',
valign: 'middle',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{ field: 'statusStr', title: '状态', align: 'center', width: '5%' },
{ field: 'verifyUser', title: '审核人员', align: 'center', width: '5%' },
{
field: 'operationTime',
title: '审核时间',
align: 'center',
width: '5%',
valign: 'middle',
formatter: function (val, row, index) {
if (val) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
} else {
return '-';
}
}
},
{
field: 'audioVerifyId',
title: '操作',
align: 'center',
width: '5%',
formatter: function (val, row, index) {
var pass = '<button class="btn btn-sm btn-primary opt-pass" data-id=' + val + ' data-status=1>通&#12288;过</button>';
var noPass = '<button class="btn btn-sm btn-danger opt-not-pass" data-id=' + val + ' data-status=2>不通过</button>';
var shelve = '<button class="btn btn-sm btn-primary opt-pass" data-id=' + val + ' data-status=4>上&#12288;架</button>';
var unshelve = '<button class="btn btn-sm btn-danger opt-not-pass" data-id=' + val + ' data-status=5>下&#12288;架</button>';
if (row.status == 0) {
return pass + '</br>' + noPass;
} else if (row.status == 1 || row.status == 4) {
return unshelve;
} else if (row.status == 2 || row.status == 5) {
return shelve;
}
}
},
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 50, 100],
search: false,
sidePagination: "server", //表示服务端请求
//设置为undefined可以获取pageNumberpageSizesearchTextsortNamesortOrder
//设置为limit可以获取limit, offset, search, sort, order
queryParamsType: "-",
queryParams: function queryParams(params) { //设置查询参数
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
erbanNo: $('#erbanNo').val(),
nick: $('#nick').val(),
status: $('#status').val(),
beginDate: $('#beginDate').val(),
endDate: $('#endDate').val(),
};
return param;
},
toolbar: '#toolbar',
url: '/admin/skillCardAudio/verify/list.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
//重置
$('#btnReset').on('click', function () {
$('#erbanNo').val("");
$('#nick').val("");
$('#status').val("");
$('#beginDate').val("");
$('#endDate').val("");
});
//审核不通过/下架弹框
$("#table").on("click", '.opt-not-pass', function () {
var id = $(this).attr("data-id");
var status = $(this).attr("data-status");
if (id == 'undefined') {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (status == 'undefined') {
$("#tipMsg").text("状态参数有误");
$("#tipModal").modal('show');
return;
}
$("#dynamicId1").val(id);
$("#status1").val(status);
var text = "不通过";
if (status == 5) {
text = "下架";
}
if (confirm("你确认【" + text + "】该声音秀吗?")) {
verify(text, id, status);
}
});
$("#table").on("click", '.opt-pass', function () {
var id = $(this).attr("data-id");
var status = $(this).attr("data-status");
if (id == 'undefined') {
$("#tipMsg").text("id参数有误");
$("#tipModal").modal('show');
return;
}
if (status == 'undefined') {
$("#tipMsg").text("状态参数有误");
$("#tipModal").modal('show');
return;
}
var text = "通过";
if (status == 4) {
text = "上架";
if (confirm("你确认【" + text + "】该声音秀吗?")) {
verify(text, id, status);
}
} else {
verify(text, id, status);
}
});
});
}
},
};
//判断空值
function isEmpty(data) {
if (data == null || data == undefined || data == "") {
return true;
}
return false;
}
//审核
function verify(text, id, status) {
//if (confirm("你确认【"+ text + "】该动态吗?")) {
showLoading();
$.ajax({
type: 'post',
url: "/admin/skillCardAudio/verify/changeStatus.action",
data: {
audioVerifyId: id,
status: status
},
dataType: "json",
success: function (json) {
hideLoading();
if (status == 2 || status == 5) {
$("#notPassModal").modal('hide');
}
if (json.success == 'true') {
$("#tipMsg").text("操作成功");
$("#tipModal").modal('show');
TableHelper.doRefresh("#table");
} else {
$("#tipMsg").text(json.msg);
$("#tipModal").modal('show');
}
}
});
//}
}
function setStatusSelectOption() {
$.ajax({
type: 'get',
url: "/admin/skillCardAudio/verify/getStatus.action",
success: function (json) {
if (json != null && json != undefined) {
var rows = json;
for (var i = 0; i < rows.length; i++) {
$('#status').append('<option value="' + rows[i].value + '">' + rows[i].key + '</option>');
}
}
}
});
}
</script>
<style scoped>
#imgMask {
position: absolute;
top: 0;
left: 0;
min-width: 150px;
padding: 4px;
background: #fff;
z-index: 999;
display: none;
}
#imgMask img {
max-height: 600px;
max-width: 600px;
vertical-align: top;
}
.fixed-table-body {
height: auto !important;
}
</style>

View File

@@ -0,0 +1,305 @@
<template>
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="toolbar">
<div class="col-sm-11">
<form action="/admin/channel/export" id="searchForm" method="get">
注册日期<input type="text" name="createDateStr" id="timeBegin" class="input-sm" value=''>
- 截止日期<input type="text" name="expireDateStr" id="timeEnd" class="input-sm" value="">
渠道来源<select name="channel" id="ditchCome" data-btn-class="btn-warning">
<!-- option* -->
</select>
系统<select name="system" id="system">
<option value="all">全部</option>
<option value="android">安卓</option>
<option value="iOS">iOS</option>
</select>
<br />
充值开始日期<input type="text" name="chargeStartDateStr" id="chargeStartDate" class="input-sm" value=''>
- 充值结束日期<input type="text" name="chargeEndDateStr" id="chargeEndDate" class="input-sm" value=''>
</form>
<button class="btn btn-primary" id='btnSearch'>搜索</button>
</div>
<div class="col-sm-1">
</div>
<div class="summary col-sm-12">
<div class="col-sm-2">
<span>新用户</span>
<span class="newUser"></span>
</div>
<div class="col-sm-2">
<span>充值用户数</span>
<span class="payUserNum"></span>
</div>
<div class="col-sm-2">
<span>充值次数</span>
<span class="payTimes"></span>
</div>
<div class="col-sm-2">
<span>充值金额</span>
<span class="payNum"></span>
</div>
<button id="export" class="btn btn-default">
<i class="glyphicon glyphicon-plus"></i>导出文件
</button>
</div>
</div>
<div id="table"></div>
</section>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "ChannelCheckAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
getChannelList();
// ComboboxHelper.build(null,'#bitchCome');
// ComboboxHelper.build(null,'#system');
// 列表设置
function buildTable() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{
field: 'createDate', title: '注册日期', align: 'center', valign: 'middle', width: '25%', formatter: function (val, row, index) {
var date = new Date(val);
return date.format("yyyy-MM-dd");
}
},
{
field: 'channel', title: '渠道来源', align: 'center', valign: 'middle', width: '15%', formatter: function (val) {
if (val == 'all') {
return '全部';
} else {
return val;
}
}
},
{
field: 'system', title: '系统', align: 'center', valign: 'middle', width: '10%', formatter: function (val) {
if (val == 'all') {
return '全部';
} else if (val == 'iOS') {
return 'ios系统';
} else {
return '安卓系统';
}
}
},
{ field: 'addUserNum', title: '新增用户数(人)', align: 'center', valign: 'middle', width: '15%' },
{ field: 'payUserNum', title: '充值用户数(人)', align: 'center', valign: 'middle', width: '15%' },
{ field: 'chargeCountTime', title: '充值次数(次)', align: 'center', valign: 'middle', width: '15%' },
{
field: 'chargeAmount', title: '充值金额(元)', align: 'center', valign: 'middle', width: '15%', formatter: function (val, row, index) {
return val / 100;
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [1, 10, 20, 30, 50],
search: false,
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var createDateStr = $('#timeBegin').val();
if (!createDateStr) {
createDateStr = new Date().format("yyyy-MM-dd");
$('#timeBegin').val(createDateStr);
}
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
createDateStr: createDateStr,
expireDateStr: $('#timeEnd').val(),
channel: $('#ditchCome').val(),
system: $('#system').val(),
chargeStartDateStr: $('#chargeStartDate').val(),
chargeEndDateStr: $('#chargeEndDate').val()
};
return param;
},
toolbar: '#toolbar',
url: '/admin/channel/statistic/list',
onLoadSuccess: function (data) {
var expireDateStr = $('#timeEnd').val();
if (expireDateStr) {
getTotalStatis();
} else {
renderTopList(data.rows[0]);
}
},
onLoadError: function () {
console.log('load fail');
}
});
}
var $timeBegin = $('#timeBegin').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
})
$('#timeBegin').on('blur', function () {
console.log(111);
$('#timeEnd').attr('value', '');
var time = $('#timeBegin').val();
$('#timeEnd').attr('value', time)
})
var $timeEnd = $('#timeEnd').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$('#timeEnd').on('blur', function () {
console.log(222);
$('#timeBegin').attr('value', '');
var time = $('#timeEnd').val();
$('#timeBegin').attr('value', time)
});
var chargeStart = $('#chargeStartDate').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var chargeEnd = $('#chargeEndDate').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
// 查询按钮
$('#btnSearch').click(function () {
TableHelper.doRefresh('#table');
})
$('#export').on('click', function () {
var createDateStr = $('#timeBegin').val();
var endDateStr = $('#timeEnd').val();
if (!createDateStr || !endDateStr) {
$("#tipMsg").text("请选择日期区间");
$("#tipModal").modal('show');
return;
}
$("#searchForm").submit();
})
function getChannelList() {
$.get('/admin/userCheckAdmin/channel/list', function (res) {
if (res.code == 200) {
console.log(res.data);
var $first = $('<option value="all">全部</option>');
$('#ditchCome').append($first);
for (var i = 0; i < res.data.length; i++) {
var $opt = $('<option value=""></option>');
$('#ditchCome').append($opt);
$opt.attr('value', res.data[i]);
$opt.html(res.data[i]);
}
buildTable();
}
})
}
function getTotalStatis() {
var createDateStr = $('#timeBegin').val();
if (!createDateStr) {
return;
}
$.get('/admin/channel/statistic/total', {
createDateStr: createDateStr,
expireDateStr: $('#timeEnd').val(),
channel: $('#ditchCome').val(),
system: $('#system').val(),
chargeStartDateStr: $('#chargeStartDate').val(),
chargeEndDateStr: $('#chargeEndDate').val()
}, function (res) {
if (res.code == 200) {
console.log(res.data);
$('.newUser').html(res.data.addUserNum);
$('.payUserNum').html(res.data.payUserNum);
$('.payTimes').html(res.data.chargeCountTime);
$('.payNum').html(res.data.chargeAmount / 100);
}
})
}
function renderTopList(data) {
$('.newUser').html(data.addUserNum);
$('.payUserNum').html(data.payUserNum);
$('.payTimes').html(data.chargeCountTime);
$('.payNum').html(data.chargeAmount / 100);
}
})
}
},
};
</script>
<style scoped>
.summary {
display: flex;
justify-content: flex-start;
align-items: center;
height: 50px;
}
.summary div {
margin-right: 20px;
display: flex;
justify-content: flex-between;
align-items: center;
height: 100%;
}
#attention {
color: lightgray;
}
.content {
height: auto;
}
#searchForm {
display: inline-block;
}
#btnSearch {
margin-left: 4px;
}
#toolbar input,
#toolbar select {
margin-left: 4px;
margin-right: 4px;
}</style>

View File

@@ -0,0 +1,229 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
<input type="hidden" name="erbanNo" id="exportErbanNo">
</form>
<div id="toolbar">
<div class="col-sm-12">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate">
厅号<input type="text" class="input-sm" name="erbanNo" id="qErbanNo">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
<div class="tips">因数据量庞大时间范围尽量不要太长搜索公会数量尽量不要太多查询时间较长时请耐心等待</div>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "LaborStatsView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
let dataCachKey;
let getCacheDataTimer;
let main = {
init: function () {
this.eventRegister();
},
eventRegister: function () {
$('#btnSearch').on('click', function () {
$("#btnSearch").attr("disabled", true);
$.ajax({
type: 'get',
url: '/admin/stats/laborV2',
data: {
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
erbanNo: $('#qErbanNo').val(),
},
dataType: 'json',
success: function (res) {
if (res.code == 200) {
dataCachKey = res.data;
tableRefresh();
getCacheDataTimer = setInterval(() => {
tableRefresh();
}, 5000);
} else {
$("#tipMsg").text("查询失败:" + res.message);
$("#tipModal").modal('show');
$("#btnSearch").attr("disabled", true);
}
}
})
});
$('#table').on('click', '#details', function () {
console.log($(this).data('id'));
});
},
};
main.init();
$('.date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
function tableRefresh() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'date', title: '日期', align: 'center', width: '5%' },
{ field: 'erbanNo', title: '房间号', align: 'center', width: '5%' },
{ field: 'roomTitle', title: '房间名', align: 'center', width: '5%' },
{ field: 'firstInRoom', title: '首进房人数', align: 'center', width: '5%' },
{ field: 'firstInRoomRetained', title: '首进房次日留存', align: 'center', width: '5%' },
{ field: 'totalInRoom', title: '进房人数', align: 'center', width: '5%' },
{ field: 'firstInRoomGiftUser', title: '首进房送礼人数', align: 'center', width: '5%' },
{ field: 'giftUser', title: '送礼人数', align: 'center', width: '5%' },
{ field: 'roomRevenue', title: '房间流水', align: 'center', width: '5%' },
{ field: 'roomNormalRevenue', title: '非背包流水', align: 'center', width: '5%' },
{ field: 'roomBackpackRevenue', title: '背包流水', align: 'center', width: '5%' },
{
field: 'firstInRoomGiftRate', title: '首进房送礼占比', align: 'center', width: '5%',
formatter: function (val, row, index) {
return (val * 100).toFixed(2) + '%'
}
},
{ field: 'newUserInRoom', title: '新用户进房人数', align: 'center', width: '5%' },
{ field: 'newUserSendGift', title: '新用户送礼人数', align: 'center', width: '5%' },
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
return {
cachKey: dataCachKey,
};
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/getListByKey',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
console.log("res.data", res.data);
console.log("res.data.length()", res.data.length);
if (res.data == null || res.data.length > 0) {
$("#btnSearch").attr("disabled", false);
if (getCacheDataTimer) {
clearInterval(getCacheDataTimer);
}
request.success({
rows: res.data,
total: 1
});
}
},
error: function (req) {
serverError(req);
$("#btnSearch").attr("disabled", false); if (getCacheDataTimer) {
clearInterval(getCacheDataTimer)
}
}
})
},
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
$("#btnSearch").removeAttr('disabled');
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
}
// 查询刷新
// $('#btnSearch').on('click', function () {
// $("#btnSearch").attr('disabled', 'disabled');
// TableHelper.doRefresh('#table');
// });
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/laborExport.action");
$('#exportErbanNo').val($('#qErbanNo').val());
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
form.submit();
})
});
}
},
};
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
</script>
<style scoped>
.tips {
color: red;
font-size: 14px;
}
</style>

View File

@@ -0,0 +1,160 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
</form>
<div id="toolbar">
<div class="col-sm-12">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "NewUserStatsView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'date', title: '日期', align: 'center', width: '5%' },
{ field: 'newUser', title: '新用户人数', align: 'center', width: '5%' },
{ field: 'inRoomNewUser', title: '进房人数', align: 'center', width: '5%' },
{ field: 'newUserPayAmount', title: '付费总额', align: 'center', width: '5%' },
{ field: 'newUserPayNum', title: '付费人数', align: 'center', width: '5%' },
{
field: 'newUserSendGiftRate', title: '送礼占比', align: 'center', width: '5%',
formatter: function (val, row, index) {
return (val * 100).toFixed(2) + '%'
}
},
{ field: 'newUserSendGiftNum', title: '送礼人数', align: 'center', width: '5%' },
{ field: 'newUserSendGiftAmount', title: '送礼总额', align: 'center', width: '5%' },
{ field: 'newUserRetained', title: '次日留存人数', align: 'center', width: '5%' },
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/newUser.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data,
total: 1
});
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/newUserExport.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
form.submit();
})
});
}
},
};
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
</script>
<style scoped></style>

View File

@@ -0,0 +1,210 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
<input type="hidden" name="erbanNo" id="exportErbanNo">
</form>
<div id="toolbar">
<div class="col-sm-12">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate">
厅号<input type="text" class="input-sm" name="erbanNo" id="qErbanNo">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">总计导出</button>
<button id="btnExportByDate" class="btn btn-sm btn-primary">按天导出</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
<!-- 详情弹窗列表 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editModalLabel">有效观看明细</h4>
</div>
<div class="modal-body">
<div id="table2"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PermitRoomStatsView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '房间号', align: 'center', width: '5%' },
{ field: 'roomTitle', title: '房间名称', align: 'center', width: '5%' },
{ field: 'roomDau', title: '房间UV(进房人数)', align: 'center', width: '5%' },
{ field: 'giftUv', title: '房间送礼UV(送礼人数)', align: 'center', width: '5%' },
{ field: 'giftAmount', title: '送礼总额', align: 'center', width: '5%' },
{ field: 'normalGiftUv', title: '普通送礼UV(送礼人数)', align: 'center', width: '5%' },
{ field: 'normalGiftAmount', title: '普通礼物总额', align: 'center', width: '5%' },
{ field: 'backpackGiftUv', title: '背包送礼UV(送礼人数)', align: 'center', width: '5%' },
{ field: 'backpackGiftAmount', title: '背包礼物总额', align: 'center', width: '5%' },
{ field: 'remainInRoomNum', title: '有效观看人数', align: 'center', width: '5%' },
{ field: 'remainInRoomSecond', title: '有效观看秒数', align: 'center', width: '5%' },
{ field: 'hallMemberRoomChatUv', title: '陪陪房内私聊人数', align: 'center', width: '5%' },
{ field: 'hallMemberRoomChatNewUv', title: '陪陪房内私聊新用户人数', align: 'center', width: '5%' },
{
field: 'id', title: '操作', align: 'center', width: '10%', formatter: function (val, row, index) {
return '<button class="btn btn-sm opt-edit" data-id=' + row.uid
+ ' data-startDate=' + $('#qStartDate').val() + ' data-endDate=' + $('#qEndDate').val() + '>观看明细</button>'
}
}
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pagination: false,
sidePagination: "none", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
erbanNo: $('#qErbanNo').val(),
};
return param;
},
url: '/admin/stats/permitRoom.action',
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 详情列表信息
$("#table").on("click", '.opt-edit', function () {
const roomUid = $(this).attr("data-id");
const startDate = $(this).attr("data-startDate");
const endDate = $(this).attr("data-endDate");
$('#table2').bootstrapTable('destroy');
$('#table2').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '用户ID', align: 'center', width: '5%' },
{ field: 'nick', title: '昵称', align: 'center', width: '5%' },
{ field: 'inTimeStr', title: '进入时间', align: 'center', width: '10%' },
{ field: 'outTimeStr', title: '退出时间', align: 'center', width: '10%' },
{ field: 'remainTimeStr', title: '停留时间', align: 'center', width: '5%' },
],
cache: false,
striped: true,
pagination: false,
//search: false,
sidePagination: "none", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
const param = {
roomUid: roomUid,
startDate: startDate,
endDate: endDate
};
return param;
},
url: '/admin/stats/permitRoomRemain.action',
onLoadSuccess: function (res) { //加载成功时执行
console.log("加载成功!");
$("#editModal").modal('show');
},
onLoadError: function (res) { //加载失败时执行
console.log("load fail");
}
});
})
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/permitRoomExport.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
$('#exportErbanNo').val($('#qErbanNo').val());
form.submit();
})
// 导出excel
$('#btnExportByDate').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/permitRoomExportByDate.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
$('#exportErbanNo').val($('#qErbanNo').val());
form.submit();
})
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,299 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
<input type="hidden" name="erbanNo" id="exportErbanNo">
</form>
<div id="toolbar">
<div class="col-sm-12">
厅号<input type="text" class="input-sm" name="erbanNo" id="qErbanNo">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-6">
<span>总计时长</span>
<span class="sumHour"></span>
</div>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
<!-- 编辑弹框 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editModalLabel">开厅时间明细</h4>
</div>
<div class="modal-body">
<form id="form2" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate2">
<input type="hidden" name="endDate" id="exportEndDate2">
<input type="hidden" name="roomUid" id="exportRoomUid2">
</form>
<div id="toolbar2">
<div class="col-sm-12">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate2">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate2">
<button id="btnSearch2" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport2" class="btn btn-sm btn-primary">导出</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-6">
<span>房间号</span>
<span class="sumErbanNo2"></span>
</div>
<div class="col-sm-6">
<span>总计时长</span>
<span class="sumHour2"></span>
</div>
</div>
</div>
<div id="table2"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "PermitRoomTimeRecordView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '房号', align: 'center', width: '5%' },
{ field: 'hour', title: '总时长(h)', align: 'center', width: '5%' },
{
field: 'roomUid',
title: '操作',
align: 'center',
width: '10%',
formatter: function (val, row, index) {
return '<button id="btnEdit" name="btnEdit" class="btn btn-sm btn-success opt-edit" data-id=' + val + '>' +
'<i class="glyphicon glyphicon-edit"></i> 查看</button>';
}
}
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
erbanNo: $('#qErbanNo').val(),
pageSize: params.pageSize,
page: params.pageNumber
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/permitRoomTime.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total,
});
$('.sumHour').html(formatHourLength(res.data.sumHour))
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
$('#qStartDate2').val($('#qStartDate').val());
$('#qEndDate2').val($('#qEndDate').val());
TableHelper.doRefresh('#table');
});
// 查询刷新
$('#btnSearch2').on('click', function () {
TableHelper.doRefresh('#table2');
});
// 编辑获取信息
$("#table").on("click", '.opt-edit', function () {
let id = $(this).attr("data-id");
console.log(id);
$('#exportRoomUid2').val(id);
$('#table2').bootstrapTable('destroy');
$('#table2').bootstrapTable({
columns: [
{ field: 'id', title: '序号', align: 'center', width: '5%' },
{ field: 'startTime', title: '开厅时间', align: 'center', width: '5%', formatter: formatTime },
{ field: 'endTime', title: '关厅时间', align: 'center', width: '5%', formatter: formatTime },
{ field: 'hour', title: '开厅时长', align: 'center', width: '5%' },
],
undefinedText: "0",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pageList: [20, 50, 100],
pagination: true,
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
roomUid: id,
startDate: $('#qStartDate2').val(),
endDate: $('#qEndDate2').val(),
pageSize: params.pageSize,
page: params.pageNumber
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/permitRoomTimeRecord.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total,
});
$('.sumErbanNo2').html(res.data.erbanNo)
$('.sumHour2').html(formatHourLength(res.data.sumHour))
// 打开编辑弹窗
$("#editModal").modal('show');
},
error: function (req) {
serverError(req);
}
})
},
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
})
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
function formatHourLength(val) {
if (val > 24) {
return (val - val % 24) / 24 + '天' + val % 24 + '时'
}
return val + '时'
}
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/permitRoomTimeExport.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
$('#exportErbanNo').val($('#qErbanNo').val());
form.submit();
})
// 导出excel2
$('#btnExport2').on('click', function () {
var form = $("#form2");
form.attr("action", "/admin/stats/permitRoomTimeRecordExport.action");
$('#exportStartDate2').val($('#qStartDate2').val());
$('#exportEndDate2').val($('#qEndDate2').val());
form.submit();
})
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,284 @@
<template>
<div class="container">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<section class="content">
<div id="table"></div>
<div id="toolbar">
<!-- 搜索列表 -->
<div class="col-sm-11">
<form action="/admin/recommend/room/export" id="searchForm" method="get">
日期&nbsp;<input type="text" name="startDateStr" id="timeBegin" class="input-sm" value=""
placeholder="请选择日期">
-&nbsp;<input type="text" name="endDateStr" id="timeEnd" class="input-sm" value=""
placeholder="请选择日期">
<span id="erBanNoBox">搜索房间&nbsp;<input type="text" name="erbanNo" id="roomErbanNo"
placeholder="输入房主平台号" class="input-sm"></span>
<span id="roomTypeBox">房间类型&nbsp;<select name="roomType" id="roomType"
data-btn-class="btn btn-warning">
<option value="0">全部</option>
<option value="1">男模厅</option>
<option value="2">女模厅</option>
</select></span>
搜索类型&nbsp;<select name="checkType" id="searchType" data-btn-class="btn btn-warning">
<option value="2">搜索房间类型</option>
<option value="1">搜索房主平台号</option>
</select>
</form>
<button class="btn btn-primary" id="searchBtn">搜索</button>
</div>
<div class="col-sm-1"></div>
<!-- 显示总数据列表 -->
<div class="col-sm-12 summary">
<!--<p>-->
<!--<span>导流房间</span>-->
<!--<span id="diversionRoom"></span>-->
<!--</p>-->
<!--<p>-->
<!--<span>导流用户数</span>-->
<!--<span id="diversionNum"></span>-->
<!--</p>-->
<!--<p>-->
<!--<span>付费用户数</span>-->
<!--<span id="payUserNum"></span>-->
<!--</p>-->
<!--<p>-->
<!--<span>付费次数</span>-->
<!--<span id="payTimes"></span>-->
<!--</p>-->
<!--<p>-->
<!--<span>付费金额</span>-->
<!--<span id="payMoney"></span>-->
<!--</p>-->
<button id="export" class="btn btn-default">
<i class="glyphicon glyphicon-plus"></i>导出文件
</button>
</div>
</div>
</section>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "RoomOptmizeStatisAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{
field: 'createDate', title: '日期', align: 'center', valign: 'middle', width: '20%', formatter: function (val, row, index) {
return new Date(val).format("yyyy-MM-dd");
}
},
{
field: 'roomName', title: '导流房间', align: 'center', valign: 'middle', width: '20%', formatter: function (val, row, index) {
return val + '<br/>ID:' + row.erbanNo;
}
},
{
field: 'roomType', title: '房间类型', align: 'center', valign: 'middle', width: '10%', formatter: function (val, row, index) {
if (val == 1) {
return '男模';
} else {
return '女模';
}
}
},
{ field: 'addUserNum', title: '导流用户数(人)', align: 'center', valign: 'middle', width: '10%' },
{ field: 'payUserNum', title: '付费用户数(人)', align: 'center', valign: 'middle', width: '10%' },
{ field: 'payCountTime', title: '付费次数(次)', align: 'center', valign: 'middle', width: '10%' },
{
field: 'payAmount', title: '付费金额(元)', align: 'center', valign: 'middle', width: '10%', formatter: function (val) {
console.log(val / 10);
return val / 10;
}
}
],
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
search: false,
sidePagination: 'server',
queryParamsType: 'undefined',
queryParams: function queryParams(params) {
var startDateStr = $('#timeBegin').val();
var erbanNo = $('#roomErbanNo').val();
var endDateStr = $('#timeEnd').val();
if ($('#searchType').val() == "2" && !$('#timeBegin').val()) {
startDateStr = new Date().format("yyyy-MM-dd");
$('#timeBegin').val(startDateStr);
}
startDateStr += ' 00:00:00';
if (!$('#roomErbanNo').val()) {
erbanNo = 0;
}
if (!$('#timeEnd').val()) {
endDateStr = new Date().format("yyyy-MM-dd");
$('#timeEnd').val(endDateStr);
}
endDateStr += ' 23:59:59';
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
startDateStr: startDateStr,
endDateStr: endDateStr,
checkType: $('#searchType').val(),
erbanNo: erbanNo,
roomType: $('#roomType').val()
};
return param;
},
toolbar: '#toolbar',
url: '/admin/recommend/room/statis/list',
onLoadSuccess: function (data) {
// var expireDateStr = $('#timeEnd').val();
// if(expireDateStr) {
// getTotalStatis();
// }
// getTotalStatis();
console.log('load success');
},
onLOadError: function () {
console.log('load fail');
}
});
// 页面刷新是请求数据加载总数据
function getTotalStatis() {
var startDate = $('#timeBegin').val();
if (!startDate) {
return;
}
$.get('', {
createDateStr: startDate,
expireDateStr: $('#timeEnd').val(),
roomErbanNo: $('#roomErbanNo').val(),
roomType: $('#roomType').val()
}, function (res) {
if (res.code == 200) {
console.log(res.data);
$('#diversionRoom').val();
$('#diversionNum').val();
$('#payUerNUm').val();
$('#payTimes').val();
$('#payMoney').val();
}
})
}
$('#export').on('click', function () {
var createDateStr = $('#timeBegin').val();
var endDateStr = $('#timeEnd').val();
if (!createDateStr || !endDateStr) {
$("#tipMsg").text("请选择日期区间");
$("#tipModal").modal('show');
return;
}
$("#searchForm").submit();
})
// 添加时间组件
var $timeBegin = $('#timeBegin').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
var $timeEnd = $('#timeEnd').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
// 监听日历选择规则(如果是在开始时间确定,那开始时间之前的就不能选择,如果是结束时间确定,那结束时间之后的时间无法选择)
$timeBegin.on('changeDate', function () {
var date = $('#timeBegin').datepicker('getDate');
$timeEnd.datepicker('setStartDate', date);
});
$timeEnd.on('changeDate', function () {
var date = $('#timeEnd').datepicker('getDate');
$timeBegin.datepicker('setEndDate', date);
});
// 点击搜索事件
$('#searchBtn').on('click', function () {
TableHelper.doRefresh('#table');
});
// 判断事件(当复选框选择搜索房主平台号时显示搜索房间平台号输入框,当复选框选择搜索房间类型时显示搜索房间类型)
$('#searchType').on('change', function () {
switch ($(this).val()) {
case '1':
$('#erBanNoBox').show();
$('#roomTypeBox').hide();
break;
case '2':
$('#roomTypeBox').show();
$('#erBanNoBox').hide();
break;
}
})
});
}
},
};
</script>
<style scoped>
#erbanNoBox {
display: none;
}
.summary {
display: flex;
justify-content: flex-start;
align-items: center;
height: 40px;
margin-top: 10px;
}
.summary p {
margin-right: 10px;
display: flex;
justify-content: flex-center;
align-items: center;
height: 100%;
background: #EBE2FD;
padding: 0 5px;
border-radius: 5px;
}
#searchForm {
display: inline-block;
}
#toolbar input,
#toolbar select {
margin-left: 4px;
margin-right: 4px;
}</style>

View File

@@ -0,0 +1,298 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
<input type="hidden" name="erbanNo" id="exportErbanNo">
</form>
<div id="toolbar">
<div class="col-sm-12">
厅号<input type="text" class="input-sm" name="erbanNo" id="qErbanNo">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">导出</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-6">
<span>总计时长</span>
<span class="sumHour"></span>
</div>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
<!-- 编辑弹框 -->
<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="editModalLabel">开厅时间明细</h4>
</div>
<div class="modal-body">
<form id="form2" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate2">
<input type="hidden" name="endDate" id="exportEndDate2">
<input type="hidden" name="roomUid" id="exportRoomUid2">
</form>
<div id="toolbar2">
<div class="col-sm-12">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate2">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate2">
<button id="btnSearch2" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport2" class="btn btn-sm btn-primary">导出</button>
</div>
<div class="summary col-sm-12">
<div class="col-sm-6">
<span>房间号</span>
<span class="sumErbanNo2"></span>
</div>
<div class="col-sm-6">
<span>总计时长</span>
<span class="sumHour2"></span>
</div>
</div>
</div>
<div id="table2"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SingleLiveTimeRecordView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '房号', align: 'center', width: '5%' },
{ field: 'sumDuration', title: '总时长', align: 'center', width: '5%' },
{
field: 'roomUid',
title: '操作',
align: 'center',
width: '10%',
formatter: function (val, row, index) {
return '<button id="btnEdit" name="btnEdit" class="btn btn-sm btn-success opt-edit" data-id=' + val + '>' +
'<i class="glyphicon glyphicon-edit"></i> 查看</button>';
}
}
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
erbanNo: $('#qErbanNo').val(),
pageSize: params.pageSize,
page: params.pageNumber
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/single/broadcast/singleLiveTimeList.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total,
});
$('.sumHour').html(formatHourLength(res.data.sumHour))
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
$('#qStartDate2').val($('#qStartDate').val());
$('#qEndDate2').val($('#qEndDate').val());
TableHelper.doRefresh('#table');
});
// 查询刷新
$('#btnSearch2').on('click', function () {
TableHelper.doRefresh('#table2');
});
// 编辑获取信息
$("#table").on("click", '.opt-edit', function () {
let id = $(this).attr("data-id");
console.log(id);
$('#exportRoomUid2').val(id);
$('#table2').bootstrapTable('destroy');
$('#table2').bootstrapTable({
columns: [
{ field: 'id', title: '序号', align: 'center', width: '5%' },
{ field: 'startTime', title: '开厅时间', align: 'center', width: '5%', formatter: formatTime },
{ field: 'endTime', title: '关厅时间', align: 'center', width: '5%', formatter: formatTime },
{ field: 'sumDuration', title: '开厅时长', align: 'center', width: '5%' },
],
undefinedText: "0",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pageList: [20, 50, 100],
pagination: true,
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
roomUid: id,
startDate: $('#qStartDate2').val(),
endDate: $('#qEndDate2').val(),
pageSize: params.pageSize,
page: params.pageNumber
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/single/broadcast/singleRoomTimeRecord.action',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data.rows,
total: res.data.total,
});
$('.sumErbanNo2').html(res.data.erbanNo)
$('.sumHour2').html(formatHourLength(res.data.sumHour))
// 打开编辑弹窗
$("#editModal").modal('show');
},
error: function (req) {
serverError(req);
}
})
},
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
})
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
function formatHourLength(val) {
if (val > 24) {
return (val - val % 24) / 24 + '天' + val % 24 + '时'
}
return val + '时'
}
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/single/broadcast/singleRoomTimeExport.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
$('#exportErbanNo').val($('#qErbanNo').val());
form.submit();
})
// 导出excel2
$('#btnExport2').on('click', function () {
var form = $("#form2");
form.attr("action", "/admin/stats/single/broadcast/singleRoomTimeRecordExport.action");
$('#exportStartDate2').val($('#qStartDate2').val());
$('#exportEndDate2').val($('#qEndDate2').val());
form.submit();
})
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,174 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
<input type="hidden" name="erbanNo" id="exportErbanNo">
</form>
<div id="toolbar">
<div class="col-sm-12">
日期<input type="text" class="input-sm date" name="startDate" id="qStartDate">
- <input type="text" class="input-sm date" name="endDate" id="qEndDate">
厅号<input type="text" class="input-sm" name="erbanNo" id="qErbanNo">
<button id="btnSearch" class="btn btn-sm btn-primary">查询</button>
<button id="btnExport" class="btn btn-sm btn-primary">总计导出</button>
<button id="btnExportByDate" class="btn btn-sm btn-primary">按天导出</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "SingleRoomStatsView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.date').datepicker({
format: 'yyyy-mm-dd',
autoclose: true
});
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
columns: [
{ field: 'erbanNo', title: '房间号', align: 'center', width: '5%' },
{ field: 'roomTitle', title: '房间名称', align: 'center', width: '5%' },
{ field: 'roomDau', title: '房间UV(进房人数)', align: 'center', width: '5%' },
{ field: 'giftUv', title: '房间送礼UV(送礼人数)', align: 'center', width: '5%' },
{ field: 'giftAmount', title: '送礼总额', align: 'center', width: '5%' },
{ field: 'normalGiftUv', title: '普通送礼UV(送礼人数)', align: 'center', width: '5%' },
{ field: 'normalGiftAmount', title: '普通礼物总额', align: 'center', width: '5%' },
{ field: 'backpackGiftUv', title: '背包送礼UV(送礼人数)', align: 'center', width: '5%' },
{ field: 'backpackGiftAmount', title: '背包礼物总额', align: 'center', width: '5%' },
{ field: 'singleReceiveAmount', title: '主播收礼总额', align: 'center', width: '5%' },
{ field: 'newUserInRoomNum', title: '新用户进房人数', align: 'center', width: '5%' },
{ field: 'newUserSendGiftNum', title: '新用户送礼人数', align: 'center', width: '5%' },
],
undefinedText: "-",
cache: false,
striped: true,
showRefresh: false,
pageSize: 20,
pagination: true,
pageList: [20, 50, 100, 200, 300, 500],
search: false,
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) { //设置查询参数
var param = {
startDate: $('#qStartDate').val(),
endDate: $('#qEndDate').val(),
erbanNo: $('#qErbanNo').val(),
};
return param;
},
ajax: function (request) { //使用ajax请求
$.ajax({
type: "GET",
url: '/admin/stats/single/broadcast/singleRoomPage',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
data: request.data,
success: function (res) {
apiResult(res);
request.success({
rows: res.data,
total: 1
});
},
error: function (req) {
serverError(req);
}
})
},
toolbar: '#toolbar',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
}
});
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
function formatTime(val) {
if (val) {
var date = new Date(val);
return date.format('yyyy-MM-dd hh:mm:ss');
} else {
return '';
}
}
function serverError(req) {
$("#tipMsg").text(req.responseJSON.message);
$("#tipModal").modal('show');
}
function apiResult(json) {
if (json.code == 200 && json.message == 'success') {
return true;
}
$("#tipMsg").text("请求失败,错误信息:" + json.message);
$("#tipModal").modal('show');
return false;
}
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/single/broadcast/singleRoomExport.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
$('#exportErbanNo').val($('#qErbanNo').val());
form.submit();
})
// 导出excel
$('#btnExportByDate').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/single/broadcast/singleRoomExportByDate.action");
$('#exportStartDate').val($('#qStartDate').val());
$('#exportEndDate').val($('#qEndDate').val());
$('#exportErbanNo').val($('#qErbanNo').val());
form.submit();
})
});
}
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,255 @@
<template>
<section class="content">
<div class="box box-primary">
<div class="box-body">
<section class="content-header">
<h1 id="itemTitle"></h1>
</section>
<form id="form" action="" method="post" target="_blank">
<input type="hidden" name="flowChannelType" id="exportFlowChannelType">
<input type="hidden" name="erbanNo" id="exportErbanNo">
<input type="hidden" name="phone" id="exportPhone">
<input type="hidden" name="startDate" id="exportStartDate">
<input type="hidden" name="endDate" id="exportEndDate">
</form>
<div id="toolbar">
<div class="col-lg-12">
<div class="col-sm-3">
<label htmlFor="flowChannelType" class="col-sm-4 control-label">流量渠道:</label>
<div class="col-sm-8">
<select name="flowChannelType" id="flowChannelType" class="form-control"
data-btn-class="btn-warning">
<option value="0">全部</option>
<option value="1">流量团队</option>
<option value="2">直播导流</option>
</select>
</div>
</div>
<div class="col-sm-3">
<label htmlFor="erbanNo" class="col-sm-4 control-label">平台号:</label>
<div class="col-sm-8">
<input type="text" class="input-sm form-control" name="erbanNo" id="erbanNo">
</div>
</div>
<div class="col-sm-3">
<label htmlFor="phone" class="col-sm-4 control-label">手机号:</label>
<div class="col-sm-8">
<input type="text" class="input-sm form-control" name="phone" id="phone">
</div>
</div>
<div class="col-sm-3">
<label class="col-sm-4 control-label">开始时间:</label>
<div class="col-sm-8">
<input type="text" class="input-sm datetime" name="startDate" id="startDate">
</div>
</div>
<div class="col-sm-3">
<label class="col-sm-4 control-label">结束时间:</label>
<div class="col-sm-8">
<input type="text" class="input-sm datetime" name="endDate" id="endDate">
</div>
</div>
</div>
<div class="col-sm-12">
<button id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
<button id="btnExport" class="btn btn-default">
<i class="glyphicon glyphicon-export"></i>导出
</button>
</div>
</div>
</div>
<!-- .content -->
<div id="table"></div>
</div>
</section>
</template>
<script>
import TableHelper from '@/utils/bootstrap-table-helper';
export default {
name: "UserDetailAdminView",
setup() {
return {};
},
created() {
this.$nextTick(function () {
this.initData();
});
},
methods: {
initData() {
$(function () {
$('.datetime').datetimepicker({
format: 'yyyy-mm-dd hh:ii:00',
autoclose: true
});
$("#startDate").datetimepicker({
minView: "month",
language: 'zh-CN',
todayBtn: 1,
autoclose: 1
}).on("changeDate", function (event) {
$("#endDate").datetimepicker('setStartDate', event.date);
});
$("#endDate").datetimepicker({
minView: "month",
language: 'zh-CN',
todayBtn: 1,
autoclose: 1,
useCurrent: false
}).on("changeDate", function (event) {
$("#startDate").datetimepicker('setEndDate', event.date);
});
initDefaultDate();
function initDefaultDate() {
var today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
today.setMilliseconds(0);
var oneDay = 1000 * 24 * 60 * 60;
var startDate = new Date(today.getTime() - (30 * oneDay));
var endDate = new Date(today.getTime() + oneDay);
$('#startDate').val(startDate.format("yyyy-MM-dd hh:mm:ss"));
$('#endDate').val(endDate.format("yyyy-MM-dd hh:mm:ss"));
}
buildTable();
// 列表设置
function buildTable() {
$('#table').bootstrapTable('destroy');
$('#table').bootstrapTable({
cache: false,
striped: true,
showRefresh: false,
pageSize: 10,
pagination: true,
pageList: [10, 20, 30, 50],
sidePagination: "server", //表示服务端请求
queryParamsType: "undefined",
queryParams: function queryParams(params) {
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
flowChannelType: $('#flowChannelType').val(),
erbanNo: $('#erbanNo').val(),
phone: $('#phone').val(),
startDate: $('#startDate').val(),
endDate: $('#endDate').val(),
};
return param;
},
uniqueId: 'id',
toolbar: '#toolbar',
url: '/admin/stats/userDetail/list.action',
onLoadSuccess: function () { //加载成功时执行
console.log("load success");
},
onLoadError: function () { //加载失败时执行
console.log("load fail");
},
columns: [
{ field: 'uid', title: 'uid', align: 'center', valign: 'middle' },
{ field: 'erbanNo', title: '平台号', align: 'center', valign: '10%' },
{ field: 'nick', title: '昵称', align: 'center', valign: '15%' },
{
field: 'createTime',
title: '新增时间',
align: 'center',
valign: 'middle',
width: '10%',
formatter: function (val, row, index) {
var date = new Date(val);
return date.format("yyyy-MM-dd hh:mm:ss");
}
},
{ field: 'inviteCodeinfo', title: '邀请码信息', align: 'center', valign: '15%' },
{ field: 'flowChannel', title: '流量渠道', align: 'center', valign: '15%' },
{ field: 'channel', title: '新增渠道', align: 'center', valign: '10%' },
{ field: 'model', title: '设备信息', align: 'center', valign: '10%' },
{
field: 'newDevice',
title: '是否有同设备',
align: 'center',
valign: 'middle',
width: '5%',
formatter: function (val) {
if (val == null || val == undefined) return '-';
if (val == false) {
return '是';
} else {
return '否';
}
}
},
{ field: 'registerIp', title: 'ip', align: 'center', valign: '10%' },
{ field: 'firstChargeInfo', title: '首充情况', align: 'center', valign: '15%' }
]
});
}
// 查询刷新
$('#btnSearch').on('click', function () {
TableHelper.doRefresh('#table');
});
// 导出excel
$('#btnExport').on('click', function () {
var form = $("#form");
form.attr("action", "/admin/stats/userDetail/export.action");
$('#exportFlowChannelType').val($('#flowChannelType').val());
$('#exportErbanNo').val($('#erbanNo').val());
$('#exportPhone').val($('#phone').val());
$('#exportStartDate').val($('#startDate').val());
$('#exportEndDate').val($('#endDate').val());
form.submit();
})
});
}
},
};
</script>
<style scoped>
.operateBtn {
margin-right: 5px;
}
.control-label {
padding-right: 0;
margin-right: 0;
}
.col-sm-3 {
padding-right: 0;
padding-left: 0;
}
.col-sm-8 {
padding-right: 0;
padding-left: 0;
}</style>