feat: 后端全量更新 - 含所有本次需求
- 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: 新闻自动采集脚本
This commit is contained in:
Executable
+360
@@ -0,0 +1,360 @@
|
||||
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;
|
||||
});
|
||||
Reference in New Issue
Block a user