Files
li 1b24994e74 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: 新闻自动采集脚本
2026-03-30 20:16:32 +08:00

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;
});