UNPKG

lixin-web

Version:

vue and bootstrap

450 lines (433 loc) 16 kB
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>&nbsp;&nbsp;总期数:<span class="text-dark-green" data-field="total-expect">0</span>&nbsp;期,</label>'+ '<label>总追号金额:<span class="text-dark-green" data-field="total-money">0.000</span>&nbsp;元</label></div>'+ '<div class="form-group col-sm-4"><label>&nbsp;中奖后停止追号</label>&nbsp;&nbsp;<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>&nbsp;最低收益率:</label>'+ '<input name="minProfit" type="text" class="form-control" value="30">'+ '<label>&nbsp;%</label></div>'+ '</section>'+ '<section data-type="2" class=" col-sm-8">'+ '<div class="form-group col-sm-6"><label>隔&nbsp;</label>'+ '<input name="expTimes" type="text" class="form-control" value="1">'+ '<label>&nbsp;期,</label></div><div class="form-group col-sm-6"><label>&nbsp;倍&nbsp;</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}; }();