- Contract.php: 返回合约账户余额(balance_contract) - My.php: 地址管理增加BTC/ETH - AppContract.php: 一键平仓(closeall) - AppProxy.php: 代理专属注册链接 + 分级权限(L1/L2) - site.php: 手续费减半(0.018→0.009) - agent_permission_setup.sql: 代理权限SQL - crypto_news_crawler.py: 新闻自动采集脚本
360 lines
20 KiB
JavaScript
Executable File
360 lines
20 KiB
JavaScript
Executable File
define(['jquery', 'bootstrap', 'backend', 'table', 'form','bootstrap-datetimepicker','pako'], function ($, undefined, Backend, Table, Form) {
|
|
|
|
var Controller = {
|
|
index: function () {
|
|
// 初始化表格参数配置
|
|
Table.api.init({
|
|
extend: {
|
|
index_url: 'app/order/index' + location.search,
|
|
add_url: 'app/order/add',
|
|
edit_url: 'app/order/edit',
|
|
del_url: 'app/order/del',
|
|
multi_url: 'app/order/multi',
|
|
import_url: 'app/order/import',
|
|
table: 'order',
|
|
}
|
|
});
|
|
|
|
var table = $("#table");
|
|
var flag = 0;
|
|
var nowtime = 0;
|
|
//当表格数据加载完成时
|
|
table.on('load-success.bs.table', function (e, data) {
|
|
//这里我们手动设置底部的值
|
|
$("#risenum").text(data.extend.risenum);
|
|
$("#risewin").text(data.extend.risewin);
|
|
$("#fallnum").text(data.extend.fallnum);
|
|
$("#fallwin").text(data.extend.fallwin);
|
|
var sock = null;
|
|
var wsuri = "wss://api-aws.huobi.pro/ws";
|
|
var pako = window.pako;
|
|
sock = new WebSocket(wsuri);
|
|
sock.onopen = function() {
|
|
console.log("connected to " + wsuri);
|
|
sock.send(JSON.stringify({"sub":"market.btcusdt.trade.detail","id":"BTC"}))
|
|
sock.send(JSON.stringify({"sub":"market.ethusdt.trade.detail","id":"ETH"}))
|
|
sock.send(JSON.stringify({"sub":"market.eosusdt.trade.detail","id":"EOS"}))
|
|
sock.send(JSON.stringify({"sub":"market.bchusdt.trade.detail","id":"BCH"}))
|
|
sock.send(JSON.stringify({"sub":"market.ltcusdt.trade.detail","id":"LTC"}))
|
|
}
|
|
sock.onclose = function(e) {
|
|
console.log("connection closed (" + e.code + ")");
|
|
}
|
|
sock.onmessage = function(evt) {
|
|
if(evt.data instanceof Blob){
|
|
var result = '';
|
|
var reader = new FileReader();
|
|
reader.onload = function() {
|
|
|
|
result = JSON.parse(pako.inflate(reader.result,{to:'string'}));
|
|
if(result.ping){
|
|
sock.send(JSON.stringify({pong:result.ping}));
|
|
}
|
|
if(result.ch == 'market.btcusdt.trade.detail')
|
|
{
|
|
$.each(result.tick.data,function (m,n) {//循环得出“speciesName”
|
|
var increase = ((n.price-parseFloat(data.extend.coin.BTC))*100/data.extend.coin.BTC).toFixed(2);
|
|
var text = n.price.toFixed(2)+' <h5>'+increase+'%</h5>';
|
|
$("#sbtcusdt").html(text);
|
|
var color = '#EE6363';
|
|
if(increase>=0) color = '#00FF7F';
|
|
$("#sbtcusdt").css({"color":color});
|
|
});
|
|
}else if(result.ch == 'market.ethusdt.trade.detail')
|
|
{
|
|
$.each(result.tick.data,function (m,n) {//循环得出“speciesName”
|
|
var increase = ((n.price-parseFloat(data.extend.coin.ETH))*100/data.extend.coin.ETH).toFixed(2);
|
|
var text = n.price.toFixed(2)+' <h5>'+increase+'%</h5>';
|
|
$("#sethusdt").html(text);
|
|
var color = '#EE6363';
|
|
if(increase>=0) color = '#00FF7F';
|
|
$("#sethusdt").css({"color":color});
|
|
});
|
|
}else if(result.ch == 'market.bchusdt.trade.detail')
|
|
{
|
|
$.each(result.tick.data,function (m,n) {//循环得出“speciesName”
|
|
var increase = ((n.price-parseFloat(data.extend.coin.BCH))*100/data.extend.coin.BCH).toFixed(2);
|
|
var text = n.price.toFixed(2)+' <h5>'+increase+'%</h5>';
|
|
$("#sbchusdt").html(text);
|
|
var color = '#EE6363';
|
|
if(increase>=0) color = '#00FF7F';
|
|
$("#sbchusdt").css({"color":color});
|
|
});
|
|
}else if(result.ch == 'market.ltcusdt.trade.detail')
|
|
{
|
|
$.each(result.tick.data,function (m,n) {//循环得出“speciesName”
|
|
var increase = ((n.price-parseFloat(data.extend.coin.LTC))*100/data.extend.coin.LTC).toFixed(2);
|
|
var text = n.price.toFixed(2)+' <h5>'+increase+'%</h5>';
|
|
$("#sltcusdt").html(text);
|
|
var color = '#EE6363';
|
|
if(increase>=0) color = '#00FF7F';
|
|
$("#sltcusdt").css({"color":color});
|
|
});
|
|
}else if(result.ch == 'market.eosusdt.trade.detail')
|
|
{
|
|
$.each(result.tick.data,function (m,n) {//循环得出“speciesName”
|
|
var increase = ((n.price-parseFloat(data.extend.coin.EOS))*100/data.extend.coin.EOS).toFixed(2);
|
|
var text = n.price.toFixed(2)+' <h5>'+increase+'%</h5>';
|
|
$("#seosusdt").html(text);
|
|
var color = '#EE6363';
|
|
if(increase>=0) color = '#00FF7F';
|
|
$("#seosusdt").css({"color":color});
|
|
});
|
|
}
|
|
// console.log(result);
|
|
}
|
|
reader.readAsBinaryString(evt.data);
|
|
}
|
|
}
|
|
if(!flag){
|
|
flag = 1;
|
|
nowtime = data.extend.nowtime;
|
|
}
|
|
});
|
|
|
|
// 初始化表格
|
|
table.bootstrapTable({
|
|
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
|
pk: 'id',
|
|
sortName: 'id',
|
|
columns: [
|
|
[
|
|
{checkbox: true},
|
|
{field: 'id', title: __('Id')},
|
|
// {field: 'daili_name', title: __('所属代理'), operate: 'LIKE'},
|
|
// {field: 'serial_no', title: __('Serial_no')},
|
|
{field: 'user_id', title: __('User_id')},
|
|
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
|
{field: 'symbol', title: __('Symbol'), searchList: {"btcusdt":__('Symbol btcusdt'),"bchusdt":__('Symbol bchusdt'),"ethusdt":__('Symbol ethusdt'),"ltcusdt":__('Symbol ltcusdt'),"eosusdt":__('Symbol eosusdt')}, formatter: Table.api.formatter.normal},
|
|
{field: 'trade_num', title: __('Trade_num'), operate:'BETWEEN'},
|
|
{field: 'trade_cycle', title: __('Trade_cycle')},
|
|
{field: 'expect_percent', title: __('Expect_percent'), operate:'BETWEEN'},
|
|
// {field: 'expect_income', title: __('Expect_income'), operate:'BETWEEN'},
|
|
// {field: 'current_price', title: __('Current_price'), operate:'BETWEEN'},
|
|
// {field: 'order_hash', title: __('Order_hash'), operate: 'LIKE'},
|
|
{field: 'rise_or_fall', title: __('Rise_or_fall'), searchList: {"rise":__('Rise_or_fall rise'),"fall":__('Rise_or_fall fall')}, formatter: Table.api.formatter.normal},
|
|
{field: 'set_loss', title: __('设置盈亏'), searchList: {"0":__('默认'),"1":__('盈'),"2":__('亏')}, formatter: Table.api.formatter.normal},
|
|
{
|
|
field: 'operate',
|
|
title: __('Operate'),
|
|
table: table, events: Table.api.events.operate,
|
|
buttons: [
|
|
{
|
|
name: '设置盈亏',
|
|
title: __('设置盈亏'),
|
|
text: '设置盈亏',
|
|
classname: 'btn btn-xs btn-primary btn-dialog',
|
|
icon: 'fa fa-list',
|
|
url: 'app/order/set_yk?',
|
|
callback: function (data) {
|
|
Layer.alert("success");
|
|
}
|
|
},
|
|
{
|
|
name: '设置比例',
|
|
title: __('设置比例'),
|
|
text: '设置比例',
|
|
classname: 'btn btn-xs btn-success btn-dialog',
|
|
icon: 'fa fa-list',
|
|
url: 'app/order/set_bl?',
|
|
callback: function (data) {
|
|
Layer.alert("success");
|
|
}
|
|
}
|
|
],
|
|
formatter: Table.api.formatter.operate
|
|
}
|
|
]
|
|
]
|
|
})
|
|
var int=self.setInterval(function () {
|
|
var params = {silent: true};
|
|
$('#table').bootstrapTable('refresh', params);
|
|
},2000);
|
|
|
|
var int1 = self.setInterval(function () {
|
|
nowtime += 1;
|
|
$("#nowtime").text(timestampToTime(nowtime));
|
|
|
|
}, 1000);
|
|
|
|
function timestampToTime(timestamp) {
|
|
var date = new Date();//时间戳为10位需*1000,时间戳为13位的话不需乘1000
|
|
var Y = date.getFullYear() + '-';
|
|
var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
|
|
var D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
|
|
var h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':';
|
|
var m = (date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':';
|
|
var s = (date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds());
|
|
|
|
strDate = Y+M+D+h+m+s;
|
|
return strDate;
|
|
|
|
}
|
|
$('#createstime').datetimepicker({
|
|
format: 'YYYY-MM-DD'});
|
|
$('#createprice').click(function(){
|
|
var symbols = $('#symbols').val();
|
|
var zhouqi = $('#zhouqi').val();
|
|
var rise_or_falls = $('#rise_or_falls').val();
|
|
var prices = $('#prices').val();
|
|
var createstime = $('#createstime').val();
|
|
|
|
$("#newcreate").html('');
|
|
|
|
$.post("app/order/createPrice",{"symbols":symbols,"zhouqi":zhouqi,
|
|
"rise_or_falls":rise_or_falls,"prices":prices,"createstime":createstime},function(datas){
|
|
if(datas.code == 0){
|
|
alert(datas.msg);
|
|
}else {
|
|
var data = datas;
|
|
var html = '<div class="form-group col-xs-12 col-sm-6 col-md-4 col-lg-3" id="pricefa">' +
|
|
' <label for="id" class="control-label col-xs-4">起始价格</label>' +
|
|
' <div class="col-xs-8">' +
|
|
' <input type="text" class="form-control" name="openprice" id="openprice" readonly value="' + data.data.openprice + '" data-index="1"></div>' +
|
|
' </div>' +
|
|
' <div class="form-group col-xs-12 col-sm-6 col-md-4 col-lg-3" id="pricefa">' +
|
|
' <label for="id" class="control-label col-xs-4" ><span id="newpricetime1">' + data.data.newprice1.times + '</span></label>' +
|
|
' <div class="col-xs-8">' +
|
|
' <input type="text" class="form-control" name="openprice" id="newprice1" value="' + data.data.newprice1.price + '" data-index="1"></div>' +
|
|
' </div>' +
|
|
' <div class="form-group col-xs-12 col-sm-6 col-md-4 col-lg-3" id="pricefa">' +
|
|
' <label for="id" class="control-label col-xs-4"><span id="newpricetime2">' + data.data.newprice2.times + '</span></label>' +
|
|
' <div class="col-xs-8">' +
|
|
' <input type="text" class="form-control" name="openprice" id="newprice2" value="' + data.data.newprice2.price + '" data-index="1"></div>' +
|
|
' </div>' +
|
|
' <div class="form-group col-xs-12 col-sm-6 col-md-4 col-lg-3" id="pricefa">' +
|
|
' <label for="id" class="control-label col-xs-4"><span id="newpricetime3">' + data.data.newprice3.times + '</span></label>' +
|
|
' <div class="col-xs-8">' +
|
|
' <input type="text" class="form-control" name="openprice" id="newprice3" value="' + data.data.newprice3.price + '" data-index="1"></div>' +
|
|
' </div>' +
|
|
' <div class="form-group col-xs-12 col-sm-6 col-md-4 col-lg-3" id="pricefa" >' +
|
|
' <label for="id" class="control-label col-xs-4"><span id="newpricetime4">' + data.data.newprice4.times + '</span></label>' +
|
|
' <div class="col-xs-8">' +
|
|
' <input type="text" class="form-control" name="openprice" id="newprice4" value="' + data.data.newprice4.price + '" data-index="1"></div>' +
|
|
' </div>' +
|
|
' <div class="form-group col-xs-12 col-sm-6 col-md-4 col-lg-3" id="pricefa">' +
|
|
' <label for="id" class="control-label col-xs-4"><span id="newpricetime5">' + data.data.newprice5.times + '</span></label>' +
|
|
' <div class="col-xs-8">' +
|
|
' <input type="text" class="form-control" name="openprice" id="newprice5" value="' + data.data.newprice5.price + '" data-index="1"></div>' +
|
|
' </div>';
|
|
$("#newcreate").html(html);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#submitprice').on('click',function() {
|
|
var symbols = $('#symbols').val();
|
|
var zhouqi = $('#zhouqi').val();
|
|
var rise_or_falls = $('#rise_or_falls').val();
|
|
var prices = $('#prices').val();
|
|
var createstime = $('#createstime').val();
|
|
var newpricetime1 = $('#newpricetime1').text();
|
|
var newpricetime2 = $('#newpricetime2').text();
|
|
var newpricetime3 = $('#newpricetime3').text();
|
|
var newpricetime4 = $('#newpricetime4').text();
|
|
var newpricetime5 = $('#newpricetime5').text();
|
|
var newprice1 = $('#newprice1').val();
|
|
var newprice2 = $('#newprice2').val();
|
|
var newprice3 = $('#newprice3').val();
|
|
var newprice4 = $('#newprice4').val();
|
|
var newprice5 = $('#newprice5').val();
|
|
// console.log(newpricetime1,newpricetime2,newpricetime3,newpricetime4,newpricetime5,
|
|
// newprice1,newprice2,newprice3,newprice4,newprice5);
|
|
$.post("app/order/buildPrice", {
|
|
"symbols": symbols, "zhouqi": zhouqi, "rise_or_falls": rise_or_falls,
|
|
"prices": prices, "createstime": createstime,'newpricetime1':newpricetime1,'newpricetime2':newpricetime2,
|
|
'newpricetime3':newpricetime3,'newpricetime4':newpricetime4,'newpricetime5':newpricetime5,'newprice1':newprice1,
|
|
'newprice2':newprice2,'newprice3':newprice3,'newprice4':newprice4,'newprice5':newprice5,
|
|
}, function (datas) {
|
|
alert(datas.msg);
|
|
});
|
|
});
|
|
|
|
$('#cleanprice').on('click',function() {
|
|
var r=confirm("确定取消所有调控价格吗?");
|
|
if (r==true){
|
|
$.post("app/order/cleanPrice", {}, function (datas) {
|
|
alert(datas.msg);
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
// 为表格绑定事件
|
|
Table.api.bindevent(table);
|
|
|
|
|
|
},
|
|
jianting: function () {
|
|
// 初始化表格参数配置
|
|
Table.api.init({
|
|
extend: {
|
|
index_url: 'app/order/jianting' + location.search,
|
|
table: 'order',
|
|
}
|
|
});
|
|
|
|
var table = $("#table");
|
|
var int=self.setInterval(function () {
|
|
var params = {silent: true};
|
|
$('#table').bootstrapTable('refresh', params);
|
|
},2000);
|
|
|
|
// 初始化表格
|
|
table.bootstrapTable({
|
|
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
|
columns: [
|
|
[
|
|
{field: 'createtimes', title: '操作',formatter: Controller.api.createtime},
|
|
{field: 'createtime', title: '场次',formatter: Controller.api.createtime,
|
|
operate:'RANGE', addclass:'datetimerange', autocomplete:false,
|
|
formatter: Table.api.formatter.datetime},
|
|
{field: 'ordercount', title: '下单人数', operate:'BETWEEN',searchable:false},
|
|
{field: 'ordersum', title: '下单总金额',searchable:false},
|
|
{field: 'risep', title: '涨',searchable:false},
|
|
{field: 'fallp', title: '跌',searchable:false},
|
|
{field: 'normalp', title: '低仓',searchable:false},
|
|
{field: 'middlep', title: '中仓',searchable:false},
|
|
{field: 'weighestp', title: '重仓',searchable:false},
|
|
]
|
|
]
|
|
});
|
|
|
|
// 为表格绑定事件
|
|
Table.api.bindevent(table);
|
|
},
|
|
add: function () {
|
|
Controller.api.bindevent();
|
|
},
|
|
edit: function () {
|
|
Controller.api.bindevent();
|
|
},
|
|
set_yk: function () {
|
|
Controller.api.bindevent();
|
|
},
|
|
set_bl: function () {
|
|
Controller.api.bindevent();
|
|
},
|
|
api: {
|
|
bindevent: function () {
|
|
Form.api.bindevent($("form[role=form]"));
|
|
},
|
|
createtime: function (value, row, index) {
|
|
//这里手动构造URL
|
|
url = "app/order?" + this.field + "=" + value;
|
|
|
|
//方式一,直接返回class带有addtabsit的链接,这可以方便自定义显示内容
|
|
return '<a href="' + url + '" class="label label-success addtabsit" title="持仓订单管理">查看明细</a>';
|
|
|
|
//方式二,直接调用Table.api.formatter.addtabs
|
|
// return Table.api.formatter.addtabs(value, row, index, url);
|
|
}
|
|
}
|
|
};
|
|
|
|
// export default socket
|
|
|
|
|
|
return Controller;
|
|
}); |