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:
li
2026-03-30 20:16:32 +08:00
commit 1b24994e74
6721 changed files with 1308571 additions and 0 deletions
+158
View File
@@ -0,0 +1,158 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Coin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-coin_id" data-rule="required" data-source="app/app_ai_coin/index" data-field="coinname" class="form-control selectpage" name="row[coin_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('First_num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-first_num" class="form-control" step="0.0001" name="row[first_num]" type="number" value="10.0000">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-num" class="form-control" name="row[num]" type="number">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Zy_percent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-zy_percent" class="form-control" step="0.0001" name="row[zy_percent]" type="number" value="0.0130">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Zy_ht')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-zy_ht" class="form-control" step="0.0001" name="row[zy_ht]" type="number" value="0.0030">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Bcjson')}:</label>
<div class="col-xs-12 col-sm-8">
<dl class="fieldlist" data-name="row[bcjson]">
<dd>
<ins>{:__('Key')}</ins>
<ins>{:__('Value')}</ins>
</dd>
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
<textarea name="row[bcjson]" class="form-control hide" cols="30" rows="5">{"1":"0.02","2":"0.03","3":"0.04","4":"0.05","5":"0.06","6":"0.07","7":"0.08"}</textarea>
</dl>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Bc_ht')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-bc_ht" class="form-control" step="0.0001" name="row[bc_ht]" type="number" value="0.0030">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cc_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cc_price" class="form-control" step="0.00000001" name="row[cc_price]" type="number" value="0.00000000">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cc_num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cc_num" class="form-control" step="0.00000001" name="row[cc_num]" type="number" value="0.00000000">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cc_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cc_amount" class="form-control" step="0.00000001" name="row[cc_amount]" type="number" value="0.00000000">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<option value="{$key}" {in name="key" value="1"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_double')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-is_double" class="form-control selectpicker" name="row[is_double]">
{foreach name="isDoubleList" item="vo"}
<option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Double_max')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-double_max" class="form-control" step="0.000001" name="row[double_max]" type="number" value="10000.000000">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pc_status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="pcStatusList" item="vo"}
<label for="row[pc_status]-{$key}"><input id="row[pc_status]-{$key}" name="row[pc_status]" type="radio" value="{$key}" {in name="key" value="0"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('In_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-in_price" class="form-control" step="0.00000001" name="row[in_price]" type="number" value="0.00000000">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_now')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-is_now" class="form-control selectpicker" name="row[is_now]">
{foreach name="isNowList" item="vo"}
<option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
+158
View File
@@ -0,0 +1,158 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
</div>
</div>
<!-- <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Coin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-coin_id" data-rule="required" data-source="coin/index" class="form-control selectpage" name="row[coin_id]" type="text" value="{$row.coin_id|htmlentities}">
</div>
</div>-->
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="statusList" item="vo"}
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('First_num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-first_num" class="form-control" step="0.0001" name="row[first_num]" type="number" value="{$row.first_num|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-num" class="form-control" name="row[num]" type="number" value="{$row.num|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Zy_percent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-zy_percent" class="form-control" step="0.0001" name="row[zy_percent]" type="number" value="{$row.zy_percent|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Zy_ht')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-zy_ht" class="form-control" step="0.0001" name="row[zy_ht]" type="number" value="{$row.zy_ht|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Bcjson')}:</label>
<div class="col-xs-12 col-sm-8">
<dl class="fieldlist" data-name="row[bcjson]">
<dd>
<ins>{:__('Key')}</ins>
<ins>{:__('Value')}</ins>
</dd>
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
<textarea name="row[bcjson]" class="form-control hide" cols="30" rows="5">{$row.bcjson|htmlentities}</textarea>
</dl>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Bc_ht')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-bc_ht" class="form-control" step="0.0001" name="row[bc_ht]" type="number" value="{$row.bc_ht|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cc_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cc_price" class="form-control" step="0.00000001" name="row[cc_price]" type="number" value="{$row.cc_price|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cc_num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cc_num" class="form-control" step="0.00000001" name="row[cc_num]" type="number" value="{$row.cc_num|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cc_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cc_amount" class="form-control" step="0.00000001" name="row[cc_amount]" type="number" value="{$row.cc_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.type"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_double')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-is_double" class="form-control selectpicker" name="row[is_double]">
{foreach name="isDoubleList" item="vo"}
<option value="{$key}" {in name="key" value="$row.is_double"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Double_max')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-double_max" class="form-control" step="0.000001" name="row[double_max]" type="number" value="{$row.double_max|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pc_status')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
{foreach name="pcStatusList" item="vo"}
<label for="row[pc_status]-{$key}"><input id="row[pc_status]-{$key}" name="row[pc_status]" type="radio" value="{$key}" {in name="key" value="$row.pc_status"}checked{/in} /> {$vo}</label>
{/foreach}
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('In_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-in_price" class="form-control" step="0.00000001" name="row[in_price]" type="number" value="{$row.in_price|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_now')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-is_now" class="form-control selectpicker" name="row[is_now]">
{foreach name="isNowList" item="vo"}
<option value="{$key}" {in name="key" value="$row.is_now"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
+45
View File
@@ -0,0 +1,45 @@
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
<ul class="nav nav-tabs" data-field="status">
<li class="{:$Think.get.status === null ? 'active' : ''}"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li class="{:$Think.get.status === (string)$key ? 'active' : ''}"><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
{/foreach}
</ul>
</div>
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('app/app_ai_strategy/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('app/app_ai_strategy/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('app/app_ai_strategy/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('app/app_ai_strategy/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> {:__('Import')}</a>
<div class="dropdown btn-group {:$auth->check('app/app_ai_strategy/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div>-->
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('app/app_ai_strategy/edit')}"
data-operate-del="{:$auth->check('app/app_ai_strategy/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB