lixin-web
Version:
vue and bootstrap
450 lines (433 loc) • 16 kB
JavaScript
var LotteryChase = function() {
var Config = {};
var els = function() {
return $('.lottery-chase');
}
var TimeList = [];
var loadExpect = function(count, fn) {
Will.ajax({name: Config.lottery},'/api/game-lottery/static-chase-time', function(response){
TimeList = response;
if($.isFunction(fn)) fn();
});
}
/**
* 计算投注列表信息
*/
var BListInfo = function() {
var bList = function() {
return LotteryMain.bList();
}
var money = function(multiple) {
var amount = 0;
var list = bList();
for (var i = 0; i < list.length; i++) {
var val = list[i];
amount += multiple * val.num * Config.sysUnitMoney * PrizeUtils.model(val.model).money;
}
return amount;
}
var cList = function() {
var cList = $('[data-injection="chase-list"]').bootstrapTable('getSelections');
return cList;
}
return {
bList: bList,
cList: cList,
money: money
}
}();
/**
* 奖金工具
*/
var PrizeUtils = function() {
var model = function(val) {
if(val == 'yuan') {
return {val: val, money: 1};
}
if(val == 'jiao') {
return {val: val, money: 0.1};
}
if(val == 'fen') {
return {val: val, money: 0.01};
}
if(val == 'li') {
return {val: val, money: 0.001};
}
}
var money = function(type, m, code) {
var method = Config.method[type];
var mMoney = model(m).money;
var prize = [];
if(method) {
var ps = method.bonus.split(',');
for (var i = 0, j = ps.length; i < j; i++) {
var pm = (code / Number(ps[i])) * (Config.sysUnitMoney / 2) * mMoney;
prize[i] = pm.toFixed(3);
}
}
return prize;
}
return {
model: model,
money: money
}
}();
/**
* 投注选项
*/
var Options = function() {
var isStop = function() {
var options = els().find('.options');
var isStop = options.find('input[name="isStop"]');
return isStop.is(':checked') ? true : false;
}
return {isStop: isStop};
}();
/**
* 计算利润率
* count 追号期数
* sMultiple 开始倍数
* maxMultiple 最大倍投
* minProfit 最低利润率(百分比)
* money 单倍金额
* prize 单倍奖金
*/
var calculation = function(count, sMultiple, maxMultiple, minProfit, money, prize) {
var result = []; // 结果
var totalMoney = 0;
var multiple = sMultiple;
for (var i = 0; i < count; i++) {
var thisMoney = 0;
var thisPrize = 0;
var thisProfit = 0;
while (true) {
thisMoney = money * multiple;
thisPrize = prize * multiple;
var tempTotal = totalMoney + thisMoney;
thisProfit = (thisPrize - tempTotal) / tempTotal;
if(thisProfit >= minProfit) break;
if(multiple > maxMultiple) return result;
multiple++;
}
totalMoney += thisMoney; // 累计投入
result.push({multiple: multiple, thisMoney: thisMoney, thisPrize: thisPrize, thisProfit: thisProfit});
}
return result;
}
var doGenerate = function() {
var tabs = els().find('.tabs');
var options = els().find('.options');
var thisTable = els().find('.sections').find('table > tbody');
var total = Number(options.find('input[name="expect"]').val());
var index = tabs.find('.active').attr('data-type');
var tableData = [];
if(index == 0) {
// 判断多订单
if(BListInfo.bList().length > 1) {
return App.alert('info', '提示消息', '多个订单不支持利润率追号!', 3000);
}
var data = BListInfo.bList()[0];
// 计算单倍奖金
var prize = PrizeUtils.money(data.method, data.model, data.code);
if(prize.length > 1) {
return App.alert('info', '提示消息', '该玩法不支持利润率追号!', 3000);
}
// 计算单倍投注金额
var money = data.num * Config.sysUnitMoney * PrizeUtils.model(data.model).money;
// 获取选项
var sMultiple = Number(options.find('input[name="sMultiple"]').val());
var maxMultiple = Number(options.find('input[name="maxMultiple"]').val());
var minProfit = Number(options.find('input[name="minProfit"]').val());
minProfit = minProfit / 100; // 变成百分比
var result = calculation(total, sMultiple, maxMultiple, minProfit, money, prize);
if(result.length > 0) {
for (var i = 0; i < result.length; i++) {
if(i > TimeList.length - 1) break;
var val = TimeList[i];
var multiple = result[i].multiple;
tableData.push({issue:val.issue,multiple:multiple,money:BListInfo.money(multiple),stopTime:val.stopTime});
}
} else {
$('[data-injection="chase-list"]').bootstrapTable('removeAll');
Will.info('没有符合要求的方案,请调整参数重新计算!');
}
}
if(index == 1) {
var sMultiple = Number(options.find('input[name="sMultiple"]').val());
for (var i = 0; i < total; i++) {
if(i > TimeList.length - 1) break;
var val = TimeList[i];
tableData.push({issue:val.issue,multiple:sMultiple,money:BListInfo.money(sMultiple),stopTime:val.stopTime});
}
}
if(index == 2) {
var sMultiple = Number(options.find('input[name="sMultiple"]').val());
var operation = options.find('select[name="operation"]').val();
var expTimes = Number(options.find('input[name="expTimes"]').val());
var expMultiple = Number(options.find('input[name="expMultiple"]').val());
for (var i = 0; i < total; i++) {
if(i > TimeList.length - 1) break;
var val = TimeList[i];
var multiple = 1;
if('x' == operation) {
multiple = i < expTimes ? sMultiple : sMultiple * Math.pow(expMultiple, Math.floor(i / expTimes));
}
if('+' == operation) {
multiple = i < expTimes ? sMultiple : sMultiple + expMultiple * Math.floor(i / expTimes);
}
if(multiple > 10000) return;
tableData.push({issue:val.issue,multiple:multiple,money:BListInfo.money(multiple),stopTime:val.stopTime});
}
}
$('[data-injection="chase-list"]').bootstrapTable('load', tableData);
$('[data-injection="chase-list"]').bootstrapTable('checkAll');
$('[data-injection="chase-list"]').bootstrapTable('resetView');
}
var initNormal = function() {
var options = els().find('.options');
var total = Number(options.find('input[name="expect"]').val());
var data = [];
for (var i = 0; i < total; i++) {
var val = TimeList[i];
data.push({issue:val.issue,multiple:0,money:0,stopTime:val.stopTime});
$('[data-injection="chase-list"]').bootstrapTable('load', data);
}
}
var bindNumber = function(els, defval) {
if(els.length == 0) return;
els.keydown(function(e) {
if(e.keyCode == 38 || e.keyCode == 40) {
if($(this).val() == '') return;
var val = Number($(this).val());
if(!isNaN(val)) {
if(e.keyCode == 38) val++;
if(e.keyCode == 40) val--;
if(val < 0) val = defval;
$(this).val(val);
}
}
});
els.keyup(function() {
if($(this).val() == '') return;
var val = Number($(this).val());
if(/^[0-9]*$/.test(val)) {
if(val < 0) $(this).val(1);
} else {
$(this).val(defval);
}
});
els.blur(function() {
if($(this).val() == '') {
$(this).val(defval);
}
});
}
// 投注
var isLoading = false;
var doSubmit = function(lottery, blist, clist, isStop) {
if(!isLoading) {
if(blist.length == 0) {
return Will.error('投注列表没有订单!');
}
if(clist.length == 0) {
return Will.error('您没有勾选任何追号计划!');
}
var orderList = [];
$.each(blist, function(i, v) {
orderList.push({
lottery: v.lottery,
method: v.method,
content: v.content,
model: v.model,
code: v.code,
compress: v.compress
});
});
var planList = [];
$.each(clist, function(i, v) {
planList.push({
issue: v.issue,
multiple: v.multiple
});
});
var text = {
orderList: orderList,
planList: planList,
winStop: isStop
}
Will.ajax({ text: $.toJSON(text) },'/api/game-lottery/add-chase', function(data , response){
if(response.error == 0) {
LotteryMain.clear();
Will.success('您的订单已投注成功!');
BootstrapDialog.closeAll();
if(RecordList) RecordList.init();
}
});
}
}
// <div class="form-group">
// <label class="sr-only" for="name">名称</label>
// <input type="text" class="form-control" id="name"
// placeholder="请输入名称">
// </div>
var init = function() {
Config = LotteryMain.getConfig();
if(BListInfo.bList().length == 0) {
return Will.error( '投注列表没有可以追号的订单!');
}
BootstrapDialog.show({
cssClass:'W1000 ZhuiHaoTanKuang',
title: '<i class="fa fa-rocket fa-lg"></i>我要追号<font class="f16">(当前销售第 <span data-field="global-expect">' + $('.lottery-open-info').find('[data-field="global-expect"]').html() + '</span>期,距离投注截止时间还有<span data-field="global-last-time">00:00:00</span></font>)',
message:function(){
var $innerHtml = $('<div class="lottery-chase">\
<div class="tabs"><a data-type="0" class="active">利润率追号</a><a data-type="1">同倍追号</a><a data-type="2">翻倍追号</a></div>'+
'<div class="panels ">'+
'<div class="options">'+
'<div class="form-inline tab-row row">'+
'<div class="form-group col-sm-4"><label>追号期数:</label>'+
'<input name="expect" type="text" class="form-control" value="10"></div>'+
'<div class="form-group col-sm-4"><label> 总期数:<span class="text-dark-green" data-field="total-expect">0</span> 期,</label>'+
'<label>总追号金额:<span class="text-dark-green" data-field="total-money">0.000</span> 元</label></div>'+
'<div class="form-group col-sm-4"><label> 中奖后停止追号</label> <input name="isStop" type="checkbox" checked="checked"></div>'+
'</div>'+
'<div class="form-inline tab-row row">'+
'<div class="form-group col-sm-4"><label>起始倍数:</label>'+
'<input name="sMultiple" type="text" class="form-control" value="1"></div>'+
'<section class="active col-sm-8" data-type="0">'+
'<div class="form-group col-sm-6"><label>最大倍投:</label>'+
'<input name="maxMultiple" type="text" class="form-control" value="100"></div>'+
'<div class="form-group col-sm-6"><label> 最低收益率:</label>'+
'<input name="minProfit" type="text" class="form-control" value="30">'+
'<label> %</label></div>'+
'</section>'+
'<section data-type="2" class=" col-sm-8">'+
'<div class="form-group col-sm-6"><label>隔 </label>'+
'<input name="expTimes" type="text" class="form-control" value="1">'+
'<label> 期,</label></div><div class="form-group col-sm-6"><label> 倍 </label>'+
'<select name="operation" class="form-control" style="width: 40px; border-right: none;">'+
'<option value="x">x</option>'+
'<option value="+">+</option>'+
'</select>'+
'<input name="expMultiple" type="text" class="form-control" value="2"></div>'+
'</section>'+
'</div>'+
'</div>'+
'<div class="sections clearfix"><table data-injection="chase-list"></table></div>'+
'</div></div>');
$innerHtml.find('[data-injection="chase-list"]').bootstrapTable({
// cardView:true,
// showHeader:false,
showFooter:true,
// clickToSelect:true,
height:300,
// uniqueId:'id',
mobileResponsive:true,
columns: [
{title: "全选",field: "checkbox",checkbox:true},
{title: "序号",field: "id",formatter:function(val,row,idx){
return idx+1;
}},
{title:'期号',field:'issue',footerFormatter:function(data){
data = $('[data-injection="chase-list"]').bootstrapTable('getSelections')
$('[data-field="total-expect"]').html(data.length);
return '已选择'+data.length+'期';
}},
{title: "倍数",field: "multiple",editable: {
type: 'text'//, mode: 'inline'
}},
{title: "金额(元)",field: "money",formatter:function(val){
return val.toFixed(3)+ '元';
},footerFormatter:function(data){
data = $('[data-injection="chase-list"]').bootstrapTable('getSelections')
var sum = 0;
$.each(data,function(){sum=compt.add(this.money,sum)});
$('[data-field="total-money"]').html(sum);
return sum+ '元';
}},
{title:'代购截止时间',field:'stopTime' },
],onCheckAll:function(row, $element){
$('[data-injection="chase-list"]').bootstrapTable('resetView');
},onUncheckAll:function(row, $element){
$('[data-injection="chase-list"]').bootstrapTable('resetView');
},onCheck:function(row, $element){
$('[data-injection="chase-list"]').bootstrapTable('resetView');
},onUncheck:function(row, $element){
$('[data-injection="chase-list"]').bootstrapTable('resetView');
},onEditableShown:function (field, row, $el, editable) {
if(field=='multiple'){
$el.next().find('input').keyup(function() {//倍数输入事件
{//格式
if($(this).val() == '') return;
var val = $(this).val();
if(/^[0-9]*$/.test(val)) {
val = Number(val);
if(val > 10000) $(this).val(10000);
if(val < 1) $(this).val(1);
} else {
$(this).val(1);
}
}
});
}
},onEditableHidden:function (field, row, $el, reason) {
var index = $($('[data-injection="chase-list"]').bootstrapTable('getData')).index(row);
if(field=='multiple'){
$('[data-injection="chase-list"]').bootstrapTable('updateCell',
{index:index,
field:'money',
value: BListInfo.money(row.multiple)}
);
$('[data-injection="chase-list"]').bootstrapTable('check',index);
}
}
});
var tabs = $innerHtml.find('.tabs');
var options = $innerHtml.find('.options');
tabs.find('a').click(function() {
var index = $(this).attr('data-type');
if(!$(this).hasClass('active')) {
tabs.find('a').removeClass('active');
$(this).addClass('active');
options.find('section').removeClass('active');
options.find('section[data-type="' + index + '"]').addClass('active');
}
});
// 只能输入数字
var expect = options.find('input[name="expect"]');
var sMultiple = options.find('input[name="sMultiple"]');
var maxMultiple = options.find('input[name="maxMultiple"]');
var minProfit = options.find('input[name="minProfit"]');
var expTimes = options.find('input[name="expTimes"]');
var expMultiple = options.find('input[name="expMultiple"]');
bindNumber(expect, 1);
bindNumber(sMultiple, 1);
bindNumber(maxMultiple, 1);
bindNumber(minProfit, 1);
bindNumber(expTimes, 1);
bindNumber(expMultiple, 1);
return $innerHtml;
}(),
onshow: function(dialogRef){
},
onshown: function(dialogRef){
loadExpect('', initNormal);
},
buttons: [{icon:'fa fa-stack-overflow',cssClass:'btn-primary',
label: '生成追号单',
action: function(dialog) {
doGenerate();
}
}, {icon:'fa fa-check',cssClass:'btn-success',
label: '确认投注',
action: function(dialog) {
var lottery = Config.lottery;
var blist = BListInfo.bList();
var clist = BListInfo.cList();
var isStop = Options.isStop();
doSubmit(lottery, blist, clist, isStop);
}
}, Will.cancelButton]
});
}
return {init: init};
}();