458 lines
20 KiB
Vue
458 lines
20 KiB
Vue
<template>
|
||
<section class="content">
|
||
<div class="box box-primary">
|
||
<div class="box-body">
|
||
<!-- Content Header (Page header) -->
|
||
<section class="content-header">
|
||
<div id="itemTitle"></div>
|
||
</section>
|
||
<!-- .content -->
|
||
<section>
|
||
<div id="table"></div>
|
||
</section>
|
||
<div id="toolbar">
|
||
<div class="col-sm-12">
|
||
<label for="poolGroup" class="col-sm-3 control-label">奖池分组:</label>
|
||
<div class="col-sm-4">
|
||
<select name="poolGroup" id="searchPoolGroup" data-btn-class="btn-warning" class="form-control">
|
||
<option value="1">基础奖池</option>
|
||
<option value="2">高级奖池</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="col-sm-12">
|
||
<button id="btnAdd" class="btn btn-default" @click="btnAdd">
|
||
<i class="glyphicon glyphicon-plus-sign"></i>新增
|
||
</button>
|
||
<button id="btnDeploy" class="btn btn-default" @click="btnDeploy">
|
||
<i class="glyphicon glyphicon-plus-sign"></i>发布
|
||
</button>
|
||
<button id="btnDeployed" class="btn btn-default" @click="btnDeployed">
|
||
<i class="glyphicon glyphicon-plus-sign"></i>发布
|
||
</button>
|
||
<button id="btnSearch" class="btn btn-default" @click="btnSearch">
|
||
<i class="glyphicon glyphicon-search"></i>查询
|
||
</button>
|
||
</div>
|
||
<div class="dataCount">
|
||
<p>
|
||
<span>礼物个数:</span>
|
||
<span id="giftCount"></span>
|
||
</p>
|
||
<p>
|
||
<span>礼物价值:</span>
|
||
<span id="giftValue"></span>
|
||
</p>
|
||
<p>
|
||
<span>奖池线包含组数:</span>
|
||
<span id="rewardLineCount"></span>
|
||
</p>
|
||
<p>
|
||
<span>奖池线礼物数:</span>
|
||
<span id="rewardLineNum"></span>
|
||
</p>
|
||
<p>
|
||
<span>总礼物价值:</span>
|
||
<span id="totalGiftValue"></span>
|
||
</p>
|
||
<p>
|
||
<span>单线比:</span>
|
||
<span id="singleLineRatio"></span>
|
||
</p>
|
||
</div>
|
||
</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">×</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" />
|
||
<input type="hidden" name="poolType" id="poolType" />
|
||
<input type="hidden" name="poolLevel" id="poolLevel" />
|
||
<div class="form-group">
|
||
<label for="poolGroup" class="col-sm-3 control-label">奖池分组:</label>
|
||
<div class="col-sm-9">
|
||
<select name="poolGroup" id="poolGroup" class="form-control">
|
||
<option value="1">基础奖池</option>
|
||
<option value="2">高级奖池</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="rewardId" class="col-sm-3 control-label">关联奖品:</label>
|
||
<div class="col-sm-9">
|
||
<select name="rewardId" id="rewardId" class="form-control">
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="poolNum" class="col-sm-3 control-label">个数:</label>
|
||
<div class="col-sm-9">
|
||
<input type="text" class="form-control" id="poolNum">
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="ratio" class="col-sm-3 control-label">概率:</label>
|
||
<div class="col-sm-9">
|
||
<input type="text" class="form-control" id="ratio" readonly>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="showRatio" class="col-sm-3 control-label">展示概率:</label>
|
||
<div class="col-sm-9">
|
||
<input type="text" class="form-control" id="showRatio">
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="itemIndex" class="col-sm-3 control-label">显示位置:</label>
|
||
<div class="col-sm-9">
|
||
<input type="text" class="form-control" id="itemIndex">
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="itemOrder" class="col-sm-3 control-label">排序:</label>
|
||
<div class="col-sm-9">
|
||
<input type="text" class="form-control" id="itemOrder">
|
||
</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" @click="save">保存</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="modal fade" id="deployedModal" 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="deployedTotalSize"></span> | 高级奖池长度:<span id="deployedSeniorSize"></span> |
|
||
普通奖池长度:<span id="deployedNormalSize"></span></div>
|
||
<div>高级奖池:<span id="deployedSeniorItems"></span></div>
|
||
<div>普通奖池:<span id="deployedNormalItems"></span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import TableHelper from '@/utils/bootstrap-table-helper';
|
||
import { apiResult } from '@/utils/maintainer';
|
||
import { getRewardList } from '@/api/treasure/reward';
|
||
import { savePoolItem, deployPoolItem, deployedPoolItem, showPoolItemCount } from '@/api/treasure/poolItem';
|
||
|
||
export default {
|
||
name: "SeizeTreasurePoolItemView",
|
||
setup() {
|
||
return {};
|
||
},
|
||
created() {
|
||
this.$nextTick(function () {
|
||
this.initTable();
|
||
});
|
||
this.showPoolItemCount();
|
||
},
|
||
mounted() {
|
||
this.optEdit();
|
||
},
|
||
methods: {
|
||
initTable() {
|
||
$('#table').bootstrapTable('destroy');
|
||
$('#table').bootstrapTable({
|
||
columns: [
|
||
{
|
||
field: 'poolType',
|
||
title: '奖池类型',
|
||
align: 'center',
|
||
width: '5%',
|
||
formatter: function (val, row, index) {
|
||
var value = '';
|
||
if (val == '1') {
|
||
value = '密藏奖池';
|
||
} else if (val == '2') {
|
||
value = '幸运值奖池';
|
||
} else if (val == '3') {
|
||
value = '森林奖池';
|
||
} else if (val == '4') {
|
||
value = '合成奖池';
|
||
}
|
||
return value;
|
||
}
|
||
},
|
||
{
|
||
field: 'poolGroup',
|
||
title: '奖池分组',
|
||
align: 'center',
|
||
width: '5%',
|
||
formatter: function (val, row, index) {
|
||
var value = '';
|
||
if (val == '1') {
|
||
value = '基础奖池';
|
||
} else if (val == '2') {
|
||
value = '高级奖池';
|
||
}
|
||
return value;
|
||
}
|
||
},
|
||
{
|
||
field: 'poolLevel',
|
||
title: '奖池等级',
|
||
align: 'center',
|
||
width: '5%',
|
||
formatter: function (val, row, index) {
|
||
var value = '';
|
||
if (val == '1') {
|
||
value = '基础奖池';
|
||
} else if (val == '2') {
|
||
value = '中级奖池';
|
||
} else if (val == '3') {
|
||
value = '高级奖池';
|
||
}
|
||
return value;
|
||
}
|
||
},
|
||
{ field: 'rewardName', title: '奖品名称', align: 'center', width: '5%' },
|
||
{ field: 'rewardValue', title: '平台价值', align: 'center', width: '5%' },
|
||
{ field: 'rewardShowValue', title: '平台展示价值', align: 'center', width: '5%' },
|
||
{ field: 'poolNum', title: '个数', align: 'center', width: '5%' },
|
||
{
|
||
field: 'totalRewardValue',
|
||
title: '总价值',
|
||
align: 'center',
|
||
width: '5%',
|
||
formatter: function (val, row, index) {
|
||
return row.rewardValue * row.poolNum;
|
||
}
|
||
},
|
||
{
|
||
field: 'ratio',
|
||
title: '概率',
|
||
align: 'center',
|
||
width: '5%',
|
||
formatter: function (val, row, index) {
|
||
let value = 0;
|
||
if (val) {
|
||
value = (val / 1000).toFixed(4) * 100;
|
||
}
|
||
return value + '%';
|
||
}
|
||
},
|
||
{
|
||
field: 'showRatio',
|
||
title: '展示概率',
|
||
align: 'center',
|
||
width: '5%',
|
||
formatter: function (val, row, index) {
|
||
let value = 0;
|
||
if (val) {
|
||
value = (val / 1000).toFixed(4) * 100;
|
||
}
|
||
return value + '%';
|
||
}
|
||
},
|
||
{ field: 'itemIndex', title: '显示位置', align: 'center', width: '5%' },
|
||
{ field: 'itemOrder', title: '排序', align: 'center', width: '5%' },
|
||
{
|
||
field: 'handle',
|
||
title: '操作',
|
||
align: 'center',
|
||
width: '5%',
|
||
valign: 'middle',
|
||
formatter: function (val, row, index) {
|
||
return '<button class="btn btn-sm btn-success opt-edit" data-index="' + index + '">编辑</button>';
|
||
}
|
||
}
|
||
],
|
||
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 = {
|
||
page: params.pageNumber,
|
||
pageSize: params.pageSize,
|
||
poolType: 1,
|
||
poolGroup: $('#searchPoolGroup').val(),
|
||
};
|
||
return param;
|
||
},
|
||
toolbar: '#toolbar',
|
||
url: '/admin/seize-treasure/pool/item/page',
|
||
onLoadSuccess: function () {
|
||
console.log("load success");
|
||
},
|
||
onLoadError: function () {
|
||
console.log("load fail");
|
||
}
|
||
});
|
||
},
|
||
btnSearch() {
|
||
TableHelper.doRefresh('#table');
|
||
this.showPoolItemCount();
|
||
},
|
||
showPoolItemCount() {
|
||
showPoolItemCount({
|
||
poolType: 1,
|
||
poolGroup: $('#poolGroup').val()
|
||
}).then(res => {
|
||
let data = res.data;
|
||
$('#giftCount').val(data.giftCount);
|
||
$('#giftValue').val(data.giftValue);
|
||
$('#rewardLineCount').val(data.rewardLineCount);
|
||
$('#rewardLineNum').val(data.rewardLineNum);
|
||
$('#totalGiftValue').val(data.totalGiftValue);
|
||
$('#singleLineRatio').val(data.singleLineRatio + '%');
|
||
});
|
||
},
|
||
showReward(rewardId) {
|
||
getRewardList().then(res => {
|
||
const data = res.data;
|
||
if (data && data.length > 0) {
|
||
let $select = $('#rewardId');
|
||
for (let i = 0, len = data.length; i < len; i++) {
|
||
let reward = data[i];
|
||
let $option = $('<option/>');
|
||
$option.attr('value', reward.id);
|
||
$option.data('name', reward.rewardName);
|
||
$option.html(reward.rewardName);
|
||
if (rewardId && rewardId == reward.id) {
|
||
$option.attr('selected', true);
|
||
}
|
||
$select.append($option);
|
||
}
|
||
}
|
||
});
|
||
},
|
||
btnAdd() {
|
||
$("#id").val('');
|
||
$("#rewardId").val('');
|
||
$("#poolType").val('');
|
||
$('#poolGroup').val('');
|
||
$('#poolLevel').val('');
|
||
$("#poolNum").val('');
|
||
$("#ratio").val('');
|
||
$("#showRatio").val('');
|
||
$("#itemIndex").val('');
|
||
$("#itemOrder").val('');
|
||
this.showReward();
|
||
$("#editModal").modal('show');
|
||
},
|
||
btnDeploy() {
|
||
deployPoolItem({
|
||
poolType: 1
|
||
}).then(res => {
|
||
apiResult(res);
|
||
});
|
||
},
|
||
btnDeployed() {
|
||
deployedPoolItem({
|
||
poolType: 1
|
||
}).then(res => {
|
||
if (res.code == 200) {
|
||
const data = res.data;
|
||
const seniorSize = data.seniorPoolItems.map(i => i.num).reduce((prev, cur) => prev + cur);
|
||
const normalSize = data.normalPoolItems.map(i => i.num).reduce((prev, cur) => prev + cur);
|
||
$('#deployedSeniorSize').html(seniorSize);
|
||
$('#deployedNormalSize').html(normalSize);
|
||
$('#deployedTotalSize').html(seniorSize + seniorSize * normalSize);
|
||
const seniorItems = data.seniorPoolItems.sort((a, b) => b.num - a.num).map(i => {
|
||
return `${i.rewardRefId}-${i.rewardName} x ${i.poolNum}`
|
||
}).join(",");
|
||
const normalItems = data.normalPoolItems.sort((a, b) => b.num - a.num).map(i => {
|
||
return `${i.rewardRefId}-${i.rewardName} x ${i.poolNum}`
|
||
}).join(",");
|
||
$('#deployedSeniorItems').html(seniorItems);
|
||
$('#deployedNormalItems').html(normalItems);
|
||
}
|
||
});
|
||
},
|
||
optEdit() {
|
||
$('#table').on('click', '.opt-edit', function () {
|
||
const currentData = $('#table').bootstrapTable('getData')[$(this).data('index')];
|
||
let id = currentData.id;
|
||
let rewardId = currentData.rewardId;
|
||
let poolType = currentData.poolType;
|
||
let poolGroup = currentData.poolGroup;
|
||
let poolLevel = currentData.poolLevel;
|
||
let poolNum = currentData.poolNum;
|
||
let ratio = currentData.ratio;
|
||
let showRatio = currentData.showRatio;
|
||
let itemIndex = currentData.itemIndex;
|
||
let itemOrder = currentData.itemOrder;
|
||
$("#id").val(id);
|
||
$("#rewardId").val(rewardId);
|
||
$("#poolType").val(poolType);
|
||
$('#poolGroup').val(poolGroup);
|
||
$('#poolLevel').val(poolLevel);
|
||
$("#poolNum").val(poolNum);
|
||
$("#ratio").val(ratio);
|
||
$("#showRatio").val(showRatio);
|
||
$("#itemIndex").val(itemIndex);
|
||
$("#itemOrder").val(itemOrder);
|
||
$("#editModal").modal('show');
|
||
});
|
||
this.showReward($('#rewardId').val());
|
||
},
|
||
save() {
|
||
let data = {
|
||
rewardId: $('#rewardId').val(),
|
||
poolType: 1,
|
||
poolGroup: $('#poolGroup').val(),
|
||
poolLevel: 1,
|
||
poolNum: $('#poolNum').val(),
|
||
ratio: $('#ratio').val(),
|
||
showRatio: $('#showRatio').val(),
|
||
itemIndex: $('#itemIndex').val(),
|
||
itemOrder: $('#itemOrder').val()
|
||
};
|
||
let id = $('#id').val();
|
||
if (id) {
|
||
data.id = id;
|
||
}
|
||
savePoolItem(data).then(res => {
|
||
apiResult(res);
|
||
TableHelper.doRefresh('#table');
|
||
$("#editModal").modal('hide');
|
||
});
|
||
this.showPoolItemCount();
|
||
}
|
||
},
|
||
};
|
||
</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;
|
||
}
|
||
</style> |