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
+29
View File
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{$chat_name}</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 在线客服依赖以下css和js文件,请按需引入 -->
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<link href="__CDN__/assets/addons/kefu/css/kefu_default.css" rel="stylesheet">
<script src=https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.staticfile.org/layer/2.3/layer.js"></script>
<script src="__CDN__/assets/addons/kefu/js/kefu.js"></script>
</head>
<body>
<script type="text/javascript">
KeFu.initialize(document.domain, 'index', function () {
KeFu.toggle_window('show');// 打开窗口
});
// 参数一为在线客服所在网站的域名(启动Workerman服务的网站的域名)
// 参数二为模块名,站外直接填写index
// 参数三为初始化完成后的回调方法
// 参数四为指定客服,可在此处填写客服代表的后台账户id
// 若要站外调用,请于后台-》插件管理-》本插件的配置中-》跨站调用允许域名-》填写外站的域名
</script>
</body>
</html>
+116
View File
@@ -0,0 +1,116 @@
<!-- FastAdmin在线客服插件不是开源产品,所有文字、图片、样式、风格等版权归在线客服作者所有,如有复制、仿冒、抄袭、盗用,FastAdmin和在线客服作者将追究法律责任 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{$chat_name}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="renderer" content="webkit">
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="__CDN__/assets/addons/kefu/css/kefu_mobile.css" rel="stylesheet">
</head>
<body>
<div class="kefu_container">
<header class="main_header">
<span id="header_title"></span>
<span id="csr_status" style="color: rgb(60, 118, 61);"></span>
<span id="kefu_error">链接中...</span>
<!-- <i class="fa fa-close fa-lg fa-fw back_page"></i> -->
</header>
<div class="content_wrapper">
<!-- 聊天消息列表 -->
<div class="chat_wrapper"></div>
<!--留言板-->
<div id="kefu_leave_message" style="display: none;" class="panel panel-success kefu_window_view">
<div class="panel-heading">非常抱歉,当前无客服在线,您留言后我们将尽快与您联系</div>
<div class="panel-body">
<form method="get" action="" class="form-horizontal">
<div class="form-group">
<label for="c-name" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
<input type="text" name="name" class="form-control" id="c-name" placeholder="请输入您的姓名">
</div>
</div>
<div class="form-group">
<label for="c-contact" class="col-sm-2 control-label">联系方式</label>
<div class="col-sm-10">
<input type="text" name="contact" class="form-control" id="c-contact" placeholder="请输入手机/QQ/微信号">
</div>
</div>
<div class="form-group">
<label for="c-message" class="col-sm-2 control-label">留言内容</label>
<div class="col-sm-10">
<textarea rows="5" name="message" class="form-control" id="c-message" placeholder="遇到的问题、所需服务、产品等,我们将尽快与您取得联系"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="button" class="btn btn-success">确认留言</button>
</div>
</div>
</form>
</div>
</div>
<!-- 消息输入 -->
<div id="kefu_emoji"></div>
<!--客服输入状态-->
<div id="kefu_input_status"></div>
<div class="write">
<div class="widget_textarea">
<textarea id="kefu_message" spellcheck="false" style="height: 35px;"></textarea>
</div>
<div class="write_right">
{present name="toolbar.expression"}
<i class="smiley" title="{$toolbar.expression.title}" style="background: url('{$toolbar.expression.icon_image}') no-repeat center;background-size: 100% 100%;"></i>
{/present}
<i class="more" style="background:url('__CDN__/assets/addons/kefu/img/more.png') no-repeat center;background-size:100% 100%;"></i>
<button class="btn btn-success btn-sm send_btn">发送</button>
</div>
</div>
<div style="display: none;" class="footer_div">
<div class="toolbar">
{present name="toolbar.file"}
<div class="toolbar_item select_file">
<input id="chatfile" size="1" width="20" type="file" name="chatfile">
<img src="{$toolbar.file.icon_image}" alt="{$toolbar.file.title}" />
<div>{$toolbar.file.title}</div>
</div>
{/present}
{present name="toolbar.goods"}
<div class="toolbar_item" data-toolbar_type="goods">
<img src="{$toolbar.goods.icon_image}" alt="{$toolbar.goods.title}" />
<div>{$toolbar.goods.title}</div>
</div>
{/present}
{present name="toolbar.order"}
<div class="toolbar_item" data-toolbar_type="order">
<img src="{$toolbar.order.icon_image}" alt="{$toolbar.order.title}" />
<div>{$toolbar.order.title}</div>
</div>
{/present}
</div>
</div>
<div style="display: none;" class="select_model">
<div class="close_select_model">关闭</div>
<div class="card_list"></div>
</div>
</div>
</div>
<script src=https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.staticfile.org/layer/2.3/layer.js"></script>
<script src="__CDN__/assets/addons/kefu/js/kefu_mobile.js"></script>
<script>
KeFu.initialize(document.domain, 'index');
</script>
</body>
</html>
+262
View File
@@ -0,0 +1,262 @@
<!-- KeFu-Admin-Template -->
<ins class="KeFu">
<!-- 右侧悬浮按钮 -->
<img src="{$cdnurl}/assets/addons/kefu/img/buoy1.png" class="kefu_button" id="kefu_button" data-html="true" data-container="body" data-toggle="popover" data-placement="left" data-content="" alt="客服浮标" />
<!-- 右侧悬浮按钮-end -->
<!-- 聊天窗口 -->
<div class="modal fade bs-example-modal-lg" id="KeFuModal" tabindex="-1" role="dialog" aria-labelledby="KeFuModal">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">
<span id="modal-title">在线客服</span>
<div class="dropdown" id="kefu_csr_status">
<button class="btn btn-default btn-xs dropdown-toggle" type="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<span class="kefu_status">状态</span>
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="kefu_status_menu">
<li><a data-status="3" href="#">在线</a></li>
<li><a data-status="2" href="#">离开</a></li>
<li><a data-status="1" href="#">繁忙</a></li>
</ul>
</div>
<span id="kefu_error">链接中...</span>
</h4>
</div>
<div class="modal-body">
<div class="kefu-left">
<div class="top">
<input type="text" autocomplete="off" id="kefu_search_input" placeholder="搜索其实很简单"/>
</div>
<div id="session_list_search" class="search_users">
</div>
<div class="panel-group" id="session_panel" role="tablist" aria-multiselectable="false">
<!-- data-parent="#session_panel" 若需自动折叠,可在a标签上添加此属性 -->
<div class="panel panel-info dialogue_panel">
<div class="panel-heading" role="tab" id="heading_dialogue">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" href="#collapse_dialogue"
aria-expanded="false" aria-controls="collapse_dialogue">对话中<span
class="red_dot text-danger"></span></a>
</h4>
</div>
<div id="collapse_dialogue" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="heading_dialogue">
<div class="panel-body">
<ul id="session_list_dialogue" class="people">
<div class="none_session">这里没有会话哦~</div>
</ul>
</div>
</div>
</div>
<div class="panel panel-info invitation_panel">
<div class="panel-heading" role="tab" id="heading_invitation">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" href="#collapse_invitation"
aria-expanded="false" aria-controls="collapse_invitation">可邀请<span
class="red_dot text-danger"></span></a>
</h4>
</div>
<div id="collapse_invitation" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="heading_invitation">
<div class="panel-body">
<ul id="session_list_invitation" class="people">
<div class="none_session">这里没有会话哦~</div>
</ul>
</div>
</div>
</div>
<div class="panel panel-info recently_panel">
<div class="panel-heading" role="tab" id="heading_recently">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" href="#collapse_recently"
aria-expanded="false" aria-controls="collapse_recently">最近沟通<span
class="red_dot text-danger"></span></a>
</h4>
</div>
<div id="collapse_recently" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="heading_recently">
<div class="panel-body">
<ul id="session_list_recently" class="people">
<div class="none_session">这里没有会话哦~</div>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="kefu-right">
<div class="top">
<span>
<span id="session_user_name" class="name">无会话</span>
<span class="top_span" id="kefu_blacklist">拉黑名单</span>
<span class="top_span" id="kefu_view_trajectory">查看轨迹</span>
<span class="top_span" id="kefu_view_user_card">用户名片</span>
</span>
</div>
<div class="chat">
<div class="chat_scroll kefu_window_view" id="kefu_scroll">
</div>
<div class="VivaTimeline kefu_window_view" id="kefu_trajectory">
<dl id="kefu_trajectory_log"></dl>
</div>
<div class="panel panel-success kefu_window_view" id="kefu_user_card">
<div class="panel-heading">用户名片</div>
<div class="panel-body">
<form method="get" action="" class="form-horizontal">
<div class="form-group">
<label class="col-sm-3 control-label">用户</label>
<div class="col-sm-7">
<input id="card-user" type="text" readonly="readonly"
class="form-control"/>
</div>
</div>
<div class="form-group">
<label for="card-nickname" class="col-sm-3 control-label">用户昵称</label>
<div class="col-sm-7">
<input id="card-nickname" name="nickname" type="text"
placeholder="请输入用户昵称" class="form-control"/>
</div>
</div>
<div class="form-group">
<label for="card-referrer" class="col-sm-3 control-label">用户来路</label>
<div class="col-sm-7">
<textarea id="card-referrer" name="referrer" rows="2"
class="form-control" placeholder=""></textarea>
</div>
</div>
<div class="form-group">
<label for="card-contact" class="col-sm-3 control-label">联系方式</label>
<div class="col-sm-7">
<textarea id="card-contact" name="contact" rows="2" class="form-control"
placeholder="QQ/微信/手机号等"></textarea>
</div>
</div>
<div class="form-group">
<label for="card-note" class="col-sm-3 control-label">备注</label>
<div class="col-sm-7">
<textarea id="card-note" name="note" rows="4" class="form-control"
placeholder="请输入备注,备注信息用户不可见"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-7">
<button id="card-button" type="button" class="btn btn-success">确认修改
</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- 按需渲染表情包 -->
{present name="toolbar.expression"}
<div class="kefu_emoji">
<div id="kefu_emoji">
{for start="1" end="37"}
<img class="emoji" title="" src="{$cdnurl}/assets/addons/kefu/img/emoji/{$i}.png">
{/for}
</div>
</div>
{/present}
<!-- 按需渲染自动回复 -->
{present name="toolbar.fastreply"}
<div class="kefu_fast_reply_list">
<table class="table table-striped table-hover" id="kefu_fast_reply_list">
{volist name="fast_reply" id="reply"}
<tr data-id='{$reply.id}'>
<td>{$reply.title}</td>
</tr>
{/volist}
</table>
</div>
{/present}
<!-- 准备链接输入面板 -->
{present name="toolbar.link"}
<div class="kefu_link_form">
<div id="kefu_link_form">
<div class="input-group">
<span class="input-group-addon">链接说明</span>
<input type="text" placeholder="选填" class="form-control" id="kefu_link_form_ins"/>
</div>
<div class="input-group">
<span class="input-group-addon">链接地址</span>
<input type="text" value="http://" class="form-control" id="kefu_link_form_url"/>
</div>
<div class="link_form_buttons">
<button type="button" class="btn btn-success btn-sm">确认</button>
<button type="button" class="btn btn-default btn-sm">取消</button>
</div>
</div>
</div>
{/present}
<!--用户输入状态-->
<div class="input_status">
<div id="kefu_input_status"></div>
</div>
<div class="write">
<div class="write_top">
{present name="toolbar.expression"}
<i class="toolbar_icon smiley" title="{$toolbar.expression.title}" style="background: url('{$toolbar.expression.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
{/present}
{present name="toolbar.file"}
<div class="select_file">
<input title="{$toolbar.file.title}" id="chatfile" size="1" width="20" type="file" name="chatfile">
<i class="attach toolbar_icon" style="background: url('{$toolbar.file.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
</div>
{/present}
{present name="toolbar.link"}
<i class="toolbar_icon link" title="{$toolbar.link.title}" style="background: url('{$toolbar.link.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
{/present}
<span title="按下Ctrl+Enter换行" class="write_top_span" id="send_tis">按下Enter发送消息</span>
{present name="toolbar.fastreply"}
<span class="write_top_span kefu_fast_reply">{$toolbar.fastreply.title}</span>
{/present}
</div>
<pre contenteditable="plaintext-only" id="kefu_message"></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 客服端右击用户菜单 -->
<ul class="dropdown-menu" style="z-index: 1060;" id="kefu_menu">
<li class="kefu_menu_item transfer" data-action="transfer"><a href="#">转接会话</a></li>
<li class="kefu_menu_item invitation" data-action="invitation"><a href="#">邀请对话</a></li>
<li class="kefu_menu_item" data-action="edit_nickname"><a href="#">修改昵称</a></li>
<li class="kefu_menu_item" data-action="del"><a href="#">删除会话</a></li>
</ul>
<!-- 聊天窗口-end -->
</ins>
<!-- KeFu-Template-end
+149
View File
@@ -0,0 +1,149 @@
<!-- KeFu-Template -->
<ins class="KeFu">
<!-- 右侧悬浮按钮 -->
<img src="{$cdnurl}/assets/addons/kefu/img/buoy1.png" class="kefu_button" id="kefu_button" data-html="true" data-container="body" data-toggle="popover" data-placement="left" data-content="" alt="客服浮标" />
<!-- 右侧悬浮按钮-end -->
<!-- 聊天窗口 -->
<div class="modal fade bs-example-modal-lg" id="KeFuModal" tabindex="-1" role="dialog" aria-labelledby="KeFuModal">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">
<span id="modal-title"></span>
<span id="csr_status"></span>
<span id="kefu_error">链接中...</span>
</h4>
</div>
<div class="modal-body">
<div class="kefu-left">
<div class="alert alert-warning-light announcement">
<i class="fa fa-bell-o"></i><span id="announcement"></span>
</div>
<div class="chat">
<div class="chat_scroll kefu_window_view" id="kefu_scroll"></div>
<div id="kefu_leave_message" style="display: none;" class="panel panel-success kefu_window_view">
<div class="panel-heading">非常抱歉,当前无客服在线,您留言后我们将尽快与您联系</div>
<div class="panel-body">
<form method="get" action="" class="form-horizontal">
<div class="form-group">
<label for="c-name" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
<input type="text" name="name" class="form-control" id="c-name" placeholder="请输入您的姓名">
</div>
</div>
<div class="form-group">
<label for="c-contact" class="col-sm-2 control-label">联系方式</label>
<div class="col-sm-10">
<input type="text" name="contact" class="form-control" id="c-contact" placeholder="请输入手机/QQ/微信号">
</div>
</div>
<div class="form-group">
<label for="c-message" class="col-sm-2 control-label">留言内容</label>
<div class="col-sm-10">
<textarea rows="5" name="message" class="form-control" id="c-message" placeholder="遇到的问题、所需服务、产品等,我们将尽快与您取得联系"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="button" class="btn btn-success">确认留言</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- 按需渲染表情包 -->
{present name="toolbar.expression"}
<div class="kefu_emoji">
<div id="kefu_emoji">
{for start="1" end="37"}
<img class="emoji" src="{$cdnurl}/assets/addons/kefu/img/emoji/{$i}.png">
{/for}
</div>
</div>
{/present}
<!-- 准备链接输入面板 -->
{present name="toolbar.link"}
<div class="kefu_link_form">
<div id="kefu_link_form">
<div class="input-group">
<span class="input-group-addon">链接说明</span>
<input type="text" placeholder="选填" class="form-control" id="kefu_link_form_ins"/>
</div>
<div class="input-group">
<span class="input-group-addon">链接地址</span>
<input type="text" value="http://" class="form-control" id="kefu_link_form_url"/>
</div>
<div class="link_form_buttons">
<button type="button" class="btn btn-success btn-sm">确认</button>
<button type="button" class="btn btn-default btn-sm">取消</button>
</div>
</div>
</div>
{/present}
<!--商品和订单选择框-->
<div class="goods_select_model">
<div id="goods_select_model">
<div class="project_list"></div>
</div>
</div>
<!--客服输入状态-->
<div class="input_status">
<div id="kefu_input_status"></div>
</div>
<div class="write">
<div class="write_top">
{present name="toolbar.expression"}
<i class="toolbar_icon smiley" title="{$toolbar.expression.title}" style="background: url('{$toolbar.expression.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
{/present}
{present name="toolbar.file"}
<div class="select_file">
<input title="{$toolbar.file.title}" id="chatfile" size="1" width="20" type="file" name="chatfile">
<i class="attach toolbar_icon" style="background: url('{$toolbar.file.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
</div>
{/present}
<!--防止xss,链接功能取消-->
<!--{present name="toolbar.link"}
<i class="toolbar_icon link" title="{$toolbar.link.title}" style="background: url('{$toolbar.link.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
{/present}-->
{present name="toolbar.goods"}
<i class="toolbar_icon goods" title="{$toolbar.goods.title}" style="background: url('{$toolbar.goods.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
{/present}
{present name="toolbar.order"}
<i class="toolbar_icon order" title="{$toolbar.order.title}" style="background: url('{$toolbar.order.icon_image}') no-repeat center;background-size: 80% 80%;"></i>
{/present}
<span title="按下Ctrl+Enter换行" id="send_tis">按下Enter发送消息</span>
</div>
<pre contenteditable="plaintext-only" id="kefu_message"></pre>
</div>
</div>
<div class="kefu-right">
<div id="kefu_chat_slide_f"></div>
<div class="chat_introduces"></div>
</div>
</div>
</div>
</div>
</div>
<!-- 聊天窗口-end -->
</ins>
<!-- KeFu-Template-end -->