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
+23
View File
@@ -0,0 +1,23 @@
<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="kefu/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">{:__('Admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-admin_id" data-rule="required" data-source="auth/admin/index" data-field="nickname" class="form-control selectpage" name="row[admin_id]" type="text" value="">
</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>
+23
View File
@@ -0,0 +1,23 @@
<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="kefu/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">{:__('Admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-admin_id" data-rule="required" data-source="auth/admin/index" data-field="nickname" class="form-control selectpage" name="row[admin_id]" type="text" value="{$row.admin_id|htmlentities}">
</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>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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('kefu/blacklist/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('kefu/blacklist/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('kefu/blacklist/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/blacklist/edit')}"
data-operate-del="{:$auth->check('kefu/blacklist/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+243
View File
@@ -0,0 +1,243 @@
<style type="text/css">
.panel-body {
padding-top: 0;
}
.middle_inline {
display: inline-block;
vertical-align: middle;
margin-bottom: 0;
}
.kefu_form_control .sp_container {
width: 100% !important;
}
</style>
<div class="row animated fadeInRight">
<div class="col-md-8 col-md-offset-2">
<div class="box box-success">
<div class="panel-heading tabbable">
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active">
<a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab">常规配置</a>
</li>
<li role="presentation">
<a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab">会话窗口</a>
</li>
<li role="presentation">
<a href="#tab3" aria-controls="tab3" role="tab" data-toggle="tab">自动邀请</a>
</li>
<li role="presentation">
<a href="#tab5" aria-controls="tab5" role="tab" data-toggle="tab">微信小程序</a>
</li>
<li role="presentation">
<a href="javascript:;" class="run_config">运行配置</a>
</li>
</ul>
</div>
<div class="panel-body">
<form id="update-form" role="form" data-toggle="validator" method="POST" action="{:url('kefu.config/update')}">
<div class="box-body tab-content">
<div role="tabpanel" class="tab-pane fade in active" id="tab1">
<div class="form-group">
<label for="chat_name" class="control-label">{:__('Chat name')}:</label>
<input type="text" class="form-control" id="chat_name" name="row[chat_name]" value="{$config_list.chat_name|htmlentities}"/>
</div>
<div class="form-group">
<label class="control-label">{:__('Ecs Exit')}:</label>
{:build_radios('row[ecs_exit]', ['1'=>__('Ecs Exit 1'), '0'=>__('Ecs Exit 0')], $config_list.ecs_exit)}
</div>
<div class="form-group">
<label class="control-label">{:__('Send message key')}:</label>
{:build_radios('row[send_message_key]', ['1'=>__('Send message key 1'), '0'=>__('Send message key 0')], $config_list.send_message_key)}
</div>
<div class="form-group">
<label class="control-label">{:__('Input status display')}:</label>
{:build_radios('row[input_status_display]', ['0'=>__('Input status display 0'), '1'=>__('Input status display 1'), '2'=>__('Input status display 2')], $config_list.input_status_display)}
</div>
<div class="form-group">
<label for="new_user_tip" class="control-label">{:__('New user tip')}:</label>
<input type="text" class="form-control" id="new_user_tip" name="row[new_user_tip]" value="{$config_list.new_user_tip|htmlentities}"/>
</div>
<div class="form-group">
<label for="new_user_msg" class="control-label">{:__('New user msg')}:</label>
<textarea rows="3" class="form-control" id="new_user_msg" name="row[new_user_msg]" value="">{$config_list.new_user_msg|htmlentities}</textarea>
<span class="help-block">自动发送给新用户的消息,客服代表的欢迎语留空时,使用此处设置的作为欢迎语</span>
</div>
<div class="form-group">
<label class="control-label">客服分配方式:</label>
{:build_radios('row[csr_distribution]', ['0' => '按工作强度', '1' => '智能分配', '2' => '轮流分配'], $config_list.csr_distribution)}
<span class="help-block" id="distribution_help">
{switch name="config_list.csr_distribution"}
{case value="0"}按工作强度:优先分配给当前接待量最少的客服,若有多个客服接待量相同,则分配给其中最久未进行接待的客服{/case}
{case value="1"}智能分配:根据接待上限和当前接待量,分配给最能接待的客服{/case}
{case value="2"}轮流分配:每次都分配给最久未进行接待的客服{/case}
{default /}
{/switch}
</span>
</div>
<div class="form-group">
<label class="control-label">轨迹保存方案:</label>
{:build_radios('row[trajectory_save_cycle]', ['0'=> '保留7天', '1'=> '保留30天', '2'=> '保留60天', '3'=> '永久保留'], $config_list.trajectory_save_cycle)}
</div>
<div class="form-group">
<label class="control-label">知识库自动回复(总开关):</label>
{:build_radios('row[kbs_switch]', ['0'=> '关闭', '1'=> '开启'], $config_list.kbs_switch)}
</div>
<div class="form-group">
<label for="new_message_notice" class="control-label">新留言钉钉通知:</label>
<textarea rows="3" class="form-control" id="new_message_notice" name="row[new_message_notice]" value="">{$config_list.new_message_notice|htmlentities}</textarea>
<span class="help-block">此功能依赖插件《<a target="_blank" href="https://www.fastadmin.net/store/dinghorn.html">钉钉小喇叭</a>》,请在此处填写机器人ID,一行一个</span>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="tab2">
<div class="form-group">
<label class="control-label">收到新消息抖动窗口:</label>
{:build_radios('row[new_message_shake]', ['3'=> '抖动', '2'=> '仅客服端抖动', '1'=> '仅用户端抖动', '0'=> '不抖动'], $config_list.new_message_shake)}
<span class="help-block">窗口为打开状态时,才会抖动</span>
</div>
<div class="form-group">
<label for="announcement" class="control-label">{:__('Announcement')}:</label>
<textarea rows="3" class="form-control" id="announcement" name="row[announcement]" value="">{$config_list.announcement|htmlentities}</textarea>
</div>
<div class="form-group">
<label class="control-label">{:__('Slider images')}:</label>
<div class="input-group">
<input id="c-slider_images" class="form-control" size="50" name="row[slider_images]" type="text" value="{$config_list.slider_images}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-slider_images" class="btn btn-danger plupload" data-input-id="c-slider_images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-slider_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-slider_images" class="btn btn-primary fachoose" data-input-id="c-slider_images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-slider_images"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-slider_images"></ul>
</div>
<div class="form-group">
<label class="control-label">{:__('Chat introduces')}:</label>
<textarea id="c-chat_introduces" class="form-control editor" rows="5" name="row[chat_introduces]" cols="50">{$config_list.chat_introduces|htmlentities}</textarea>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="tab3">
<div class="form-group">
<label class="control-label middle_inline">开启自动邀请:</label>
<div class="middle_inline">
{:Form::switcher('row[auto_invitation_switch]', $config_list.auto_invitation_switch, ['color'=>'success'])}
</div>
<span class="help-block">开启时,将在指定时机,为用户弹出“邀请对话”窗口</span>
</div>
<div class="form-group">
<label class="control-label middle_inline">仅首次访问自动邀请:</label>
<div class="middle_inline">
{:Form::switcher('row[only_first_invitation]', $config_list.only_first_invitation, ['color'=>'success'])}
</div>
<span class="help-block">开启时,只在新用户首次访问时自动弹出邀请框</span>
</div>
<div class="form-group">
<label class="control-label middle_inline">仅客服在线自动邀请:</label>
<div class="middle_inline">
{:Form::switcher('row[only_csr_online_invitation]', $config_list.only_csr_online_invitation, ['color'=>'success'])}
</div>
<span class="help-block">开启时,只在有客服在线时自动弹出邀请框</span>
</div>
<div class="form-group">
<label for="auto_invitation_timing" class="control-label">自动邀请时机:</label>
<div class="input-group">
<div class="input-group-addon">停留</div>
<input type="text" class="form-control" id="auto_invitation_timing" name="row[auto_invitation_timing]" value="{$config_list.auto_invitation_timing|htmlentities}"/>
<div class="input-group-addon"><span class="text-warning"></span></div>
</div>
<span class="help-block">用户停留此秒数后,为用户弹出“邀请对话”窗口</span>
</div>
<div class="form-group">
<label class="control-label">邀请框背景:</label>
<div class="input-group">
<input id="c-invite_box_img" class="form-control" size="50" name="row[invite_box_img]" type="text" value="{$config_list.invite_box_img}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-invite_box_img" class="btn btn-danger plupload" data-input-id="c-invite_box_img" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-invite_box_img"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-invite_box_img" class="btn btn-primary fachoose" data-input-id="c-invite_box_img" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-invite_box_img"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-invite_box_img"></ul>
<span class="help-block">建议大小:400px*180px</span>
</div>
</div>
<div role="tabpanel" class="tab-pane fade" id="tab5">
<div class="form-group">
<label for="wechat_app_id" class="control-label">小程序appId:</label>
<input type="text" class="form-control" id="wechat_app_id" name="row[wechat_app_id]" value="{$config_list.wechat_app_id|htmlentities}"/>
</div>
<div class="form-group">
<label for="wechat_app_secret" class="control-label">小程序appSecret:</label>
<input type="text" class="form-control" id="wechat_app_secret" name="row[wechat_app_secret]" value="{$config_list.wechat_app_secret|htmlentities}"/>
</div>
<hr class="divider">
<span class="help-block">
请登录小程序<a target="_blank" href="https://mp.weixin.qq.com/">MP后台</a>->开发->开发设置->消息推送->继续以下设置->请保存设置后微信端再进行验证
</span>
<div class="form-group">
<label for="wechat_app_secret" class="control-label">服务器地址(url):</label>
<input type="text" class="form-control" readonly="readonly" value="http://您的域名/api/kefu/acceptWxMsg"/>
</div>
<div class="form-group">
<label for="wechat_token" class="control-label">通信令牌(token):</label>
<input type="text" placeholder="英文或数字,3-32字符" class="form-control" id="wechat_token" name="row[wechat_token]" value="{$config_list.wechat_token|htmlentities}"/>
<span class="help-block">任意填写,需与MP后台->开发->开发设置->消息推送中的Token一致</span>
</div>
<div class="form-group">
<label for="wechat_encodingkey" class="control-label">解密密钥(EncodingAESKey):</label>
<input type="text" placeholder="英文或数字,43位字符" class="form-control" id="wechat_encodingkey" name="row[wechat_encodingkey]" value="{$config_list.wechat_encodingkey|htmlentities}"/>
<span class="help-block">任意填写,需与MP后台->开发->开发设置->消息推送中的EncodingAESKey一致</span>
</div>
<div class="form-group">
<label for="wechat_app_secret" class="control-label">消息加密模式:</label>
<input type="text" class="form-control" readonly="readonly" value="安全模式"/>
</div>
<div class="form-group">
<label for="wechat_app_secret" class="control-label">数据格式:</label>
<input type="text" class="form-control" readonly="readonly" value="JSON"/>
</div>
</div>
<div class="form-group" style="margin-top: 15px;">
<button type="submit" class="btn btn-success">{:__('Submit')}</button>
<button type="reset" class="btn btn-default">{:__('Reset')}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+38
View File
@@ -0,0 +1,38 @@
<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">{:__('Admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-source="auth/admin/index" data-field="nickname" class="form-control selectpage" name="row[admin_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Ceiling')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-ceiling" data-rule="required" class="form-control" name="row[ceiling]" type="number" value="1">
<span class="help-block">设置接待上限有助于自动分配客服,不会造成游客无人接待的情况,详见客服分配方式</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Keep Alive')}:</label>
<div class="col-xs-12 col-sm-8">
{:Form::switcher('row[keep_alive]', 0, ['color'=>'success'])}
<span class="help-block">开启时,客服代表将永久保持在线状态;关闭后,客服需完成一次上下线,状态才能显示正常</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Welcome Msg')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-welcome_msg" class="form-control editor" rows="3" name="row[welcome_msg]" cols="50"></textarea>
<span class="help-block">{:__('Welcome Msg Introduce')}</span>
</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>
+40
View File
@@ -0,0 +1,40 @@
<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">{:__('Admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-source="auth/admin/index" data-field="nickname" class="form-control selectpage" name="row[admin_id]" type="text" value="{$row.admin_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Ceiling')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-ceiling" data-rule="required" class="form-control" name="row[ceiling]" type="number" value="{$row.ceiling|htmlentities}">
<span class="help-block">设置接待上限有助于自动分配客服,不会造成游客无人接待的情况,详见客服分配方式</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Keep Alive')}:</label>
<div class="col-xs-12 col-sm-8">
{:Form::switcher('row[keep_alive]', $row.keep_alive, ['color'=>'success'])}
<span class="help-block">开启时,客服代表将永久保持在线状态;关闭后,客服需完成一次上下线,状态才能显示正常</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Welcome Msg')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-welcome_msg" class="form-control editor" rows="3" name="row[welcome_msg]" cols="50">{$row.welcome_msg|htmlentities}</textarea>
<span class="help-block">{:__('Welcome Msg Introduce')}</span>
</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>
+52
View File
@@ -0,0 +1,52 @@
<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="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li><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('kefu/csrkpi/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('kefu/csrkpi/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('kefu/csrkpi/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a> -->
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('kefu/csrkpi/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('kefu/csrkpi/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=0"><i class="fa fa-eye"></i> {:__('Set to Status 0')}</a>
</li>
<li>
<a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=1"><i class="fa fa-eye-slash"></i> {:__('Set to Status 1')}</a>
</li>
<li>
<a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=2"><i class="fa fa-eye-slash"></i> {:__('Set to Status 2')}</a>
</li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/csrkpi/edit')}"
data-operate-del="{:$auth->check('kefu/csrkpi/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+46
View File
@@ -0,0 +1,46 @@
<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">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" rows="5" name="row[content]" cols="50"></textarea>
</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="1" }checked{/in} /> {$vo}
</label>
{/foreach}
</div>
</div>
</div>
{eq name="isSuperAdmin" value="1"}
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">通用快捷回复:</label>
<div class="col-xs-12 col-sm-8">
{:Form::radios('row[is_general]', ['1'=>'是', '0'=>'否'], '0', ['data-rule'=>'required'])}
</div>
</div>
{/eq}
<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>
+44
View File
@@ -0,0 +1,44 @@
<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">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-content" data-rule="required" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content|htmlentities}</textarea>
</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>
{eq name="isSuperAdmin" value="1"}
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">通用快捷回复:</label>
<div class="col-xs-12 col-sm-8">
{:Form::radios('row[is_general]', ['1'=>'是', '0'=>'否'], $row.is_general, ['data-rule'=>'required'])}
</div>
</div>
{/eq}
<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>
+49
View File
@@ -0,0 +1,49 @@
<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="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li><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('kefu/fastreply/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('kefu/fastreply/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('kefu/fastreply/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('kefu/fastreply/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('kefu/fastreply/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=0"><i class="fa fa-eye"></i> {:__('Set to Status 0')}</a>
</li>
<li>
<a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=1"><i class="fa fa-eye-slash"></i> {:__('Set to Status 1')}</a>
</li>
</ul>
</div>
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('kefu/fastreply/recyclebin')?'':'hide'}" href="kefu/fastreply/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/fastreply/edit')}"
data-operate-del="{:$auth->check('kefu/fastreply/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('kefu/fastreply/restore')?'':'hide'}" href="javascript:;" data-url="kefu/fastreply/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('kefu/fastreply/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/fastreply/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('kefu/fastreply/restore')?'':'hide'}" href="javascript:;" data-url="kefu/fastreply/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('kefu/fastreply/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/fastreply/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('kefu/fastreply/restore')}"
data-operate-destroy="{:$auth->check('kefu/fastreply/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+57
View File
@@ -0,0 +1,57 @@
<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">{:__('Questions')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-questions" class="form-control " rows="5" name="row[questions]" cols="50"></textarea>
<span class="help-block">一行一个问法,用户以任意一个问法达到匹配度,则自动回复</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Match')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-match" data-rule="required;range(1~100)" class="form-control" name="row[match]" type="number" value="100">
<span class="help-block">用户提问达到此匹配度,则自动回复 <a class="test_match" href="javascript:;">匹配度测试</a></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Answer')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-answer" class="form-control editor" rows="5" name="row[answer]" cols="50"></textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
{:Form::selectpages('row[admin_id]', null, 'auth/admin/index', 'nickname', 'id', [])}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="0">
</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="1" }checked{/in} /> {$vo}</label>
{/foreach}
<span class="help-block">万能知识:当所有知识点均无法匹配时,则自动回复万能知识</span>
</div>
</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>
+55
View File
@@ -0,0 +1,55 @@
<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">{:__('Questions')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-questions" class="form-control " rows="5" name="row[questions]" cols="50">{$row.questions|htmlentities}</textarea>
<span class="help-block">一行一个问法,用户以任意一个问法达到匹配度,则自动回复</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Match')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-match" data-rule="required;range(1~100)" class="form-control" name="row[match]" type="number" value="{$row.match|htmlentities}">
<span class="help-block">用户提问达到此匹配度,则自动回复 <a class="test_match" href="javascript:;">匹配度测试</a></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Answer')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-answer" class="form-control editor" rows="5" name="row[answer]" cols="50">{$row.answer|htmlentities}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Admin_id')}:</label>
<div class="col-xs-12 col-sm-8">
{:Form::selectpages('row[admin_id]', $row.admin_id, 'auth/admin/index', 'nickname', 'id', [])}
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-weigh" data-rule="required" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
</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}
<span class="help-block">万能知识:当所有知识点均无法匹配时,则自动回复万能知识</span>
</div>
</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>
+49
View File
@@ -0,0 +1,49 @@
<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="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li><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('kefu/kbs/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('kefu/kbs/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('kefu/kbs/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!--<a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('kefu/kbs/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('kefu/kbs/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=0"><i class="fa fa-eye"></i> {:__('Set to 0')}</a>
</li>
<li>
<a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=1"><i class="fa fa-eye-slash"></i> {:__('Set to 1')}</a>
</li>
</ul>
</div>
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('kefu/kbs/recyclebin')?'':'hide'}" href="kefu/kbs/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/kbs/edit')}"
data-operate-del="{:$auth->check('kefu/kbs/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('kefu/kbs/restore')?'':'hide'}" href="javascript:;" data-url="kefu/kbs/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('kefu/kbs/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/kbs/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('kefu/kbs/restore')?'':'hide'}" href="javascript:;" data-url="kefu/kbs/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('kefu/kbs/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/kbs/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('kefu/kbs/restore')}"
data-operate-destroy="{:$auth->check('kefu/kbs/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
+47
View File
@@ -0,0 +1,47 @@
<style type="text/css">
.panel-body {
padding-top: 0;
}
.progress {
width: 80%;
display: none;
margin: 0 auto;
}
.bg-success {
padding: 15px;
}
</style>
<div class="row animated fadeInRight">
<div class="col-md-8 col-md-offset-2">
<div class="box box-success">
<div class="panel-heading tabbable"></div>
<div class="panel-body form-horizontal">
<p class="bg-success">本功能用于测试两句话的匹配度,以方便您配置知识库自动回复</p>
<div class="form-group">
<label for="str1" class="control-label col-xs-12 col-sm-2">语料一:</label>
<div class="col-xs-12 col-sm-8">
<textarea name="str1" id="str1" cols="30" rows="3"></textarea>
</div>
</div>
<div class="form-group">
<label for="str2" class="control-label col-xs-12 col-sm-2">语料二:</label>
<div class="col-xs-12 col-sm-8">
<textarea name="str2" id="str2" cols="30" rows="3"></textarea>
<span class="help-block">请输入两段语料以测试它们的匹配度</span>
</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="button" class="btn btn-success btn-embossed post_test_match">测试匹配度</button>
</div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-success" id="match" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="min-width: 20%;width: 100%">
未开始匹配
</div>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+34
View File
@@ -0,0 +1,34 @@
<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">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Contact')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-contact" data-rule="required" class="form-control" name="row[contact]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Message')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-message" class="form-control " rows="5" name="row[message]" cols="50"></textarea>
</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>
+50
View File
@@ -0,0 +1,50 @@
<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">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Contact')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-contact" data-rule="required" class="form-control" name="row[contact]" type="text" value="{$row.contact|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Message')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-message" class="form-control " rows="5" name="row[message]" cols="50">{$row.message|htmlentities}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Trajectory')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="table-responsive">
<table class="table table-striped table-nowrap">
<tr>
<th class="text-center">时间</th>
<th class="text-center">访问页面</th>
<th class="text-center">来路</th>
</tr>
{volist name="trajectory" id="item"}
<tr>
<td>{$item.createtime}</td>
<td>{$item.url}</td>
<td>{$item.referrer}</td>
</tr>
{/volist}
</table>
</div>
</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>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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('kefu/leavemessage/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('kefu/leavemessage/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('kefu/leavemessage/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/leavemessage/edit')}"
data-operate-del="{:$auth->check('kefu/leavemessage/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+64
View File
@@ -0,0 +1,64 @@
<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">{:__('Session_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-session_id" data-rule="required" data-source="session/index" class="form-control selectpage" name="row[session_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sender_identity')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-sender_identity" data-rule="required" class="form-control selectpicker" name="row[sender_identity]">
{foreach name="senderIdentityList" 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">{:__('Sender_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sender_id" data-rule="required" data-source="sender/index" class="form-control selectpage" name="row[sender_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Message_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-message_type" data-rule="required" class="form-control selectpicker" name="row[message_type]">
{foreach name="messageTypeList" 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">{:__('Message')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-message" class="form-control " rows="5" name="row[message]" cols="50"></textarea>
</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 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>
+64
View File
@@ -0,0 +1,64 @@
<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">{:__('Session_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-session_id" class="form-control" name="row[session_id]" type="text" value="{$row.session_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sender_identity')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-sender_identity" data-rule="required" class="form-control selectpicker" name="row[sender_identity]">
{foreach name="senderIdentityList" item="vo"}
<option value="{$key}" {in name="key" value="$row.sender_identity" }selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Sender_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-sender_id" class="form-control" name="row[sender_id]" type="text" value="{$row.sender_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Message_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-message_type" data-rule="required" class="form-control selectpicker" name="row[message_type]">
{foreach name="messageTypeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.message_type" }selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Message')}:</label>
<div class="col-xs-12 col-sm-8">
<textarea id="c-message" class="form-control editor" rows="5" name="row[message]" cols="50">{$row.message|htmlentities}</textarea>
</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 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>
+50
View File
@@ -0,0 +1,50 @@
<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="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li><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('kefu/record/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('kefu/record/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('kefu/record/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('kefu/record/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('kefu/record/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=0"><i class="fa fa-eye"></i> {:__('Set to Status 0')}</a>
</li>
<li>
<a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=1"><i class="fa fa-eye-slash"></i> {:__('Set to Status 1')}</a>
</li>
</ul>
</div>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/record/edit')}"
data-operate-del="{:$auth->check('kefu/record/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
+135
View File
@@ -0,0 +1,135 @@
<style type="text/css">
.chat {
box-sizing: border-box;
overflow: hidden;
padding: 0;
width: 100%;
}
.record_item {
margin-top: 8px;
}
.user_name {
font-weight: bold;
}
.bubble {
font-size: 16px;
position: relative;
display: inline-block;
clear: both;
left: 6px;
margin-bottom: 8px;
padding: 13px 14px;
vertical-align: top;
border-radius: 5px;
word-wrap: break-word;
word-break: break-all;
}
.bubble.you {
background: #eceff1;
color: #1a1a1a;
}
.bubble.me {
background: #00b0ff;
color: #fff;
}
.bubble:before {
position: absolute;
top: 19px;
display: block;
width: 8px;
height: 6px;
content: '\00a0';
-webkit-transform: rotate(29deg) skew(-35deg);
transform: rotate(29deg) skew(-35deg);
}
.bubble.you:before {
left: -4px;
background-color: #eceff1;
}
.bubble.me:before {
left: -4px;
background-color: #00b0ff;
}
.bubble .emoji {
width: 40px;
height: 40px;
}
.bubble .record {
max-height: 200px;
color: #fff;
}
.status {
position: relative;
float: right;
width: 100%;
/* margin: 20px 0; */
margin-bottom: 10px;
text-align: center;
}
.status span {
font-size: 12px;
display: inline-block;
background: #ccc;
color: #fff;
line-height: 12px;
border-radius: 5px;
padding: 3px 10px;
}
.record_card {
width: 400px;
background: #fff;
border-radius: 10px;
display: flex;
align-items: center;
padding: 8px 8px 8px 8px;
}
.record_card img {
width: 90px;
height: 90px;
min-width: 90px;
}
.record_card .record_card_body {
height: 90px;
width: 100%;
margin: 0 8px;
cursor: pointer;
}
.record_card .record_card_title {
font-size: 15px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-height: 18px;
height: 36px;
color: #0d0d0d;
}
.record_card .record_card_note {
font-size: 14px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-height: 16px;
height: 32px;
color: #999999;
margin-top: 3px;
}
.record_card .record_card_price span:last-child {
margin-left: 10px;
color: #999999;
font-size: 14px;
}
.record_card .record_card_price span:first-child {
margin-left: -3px;
font-size: 18px;
color: rgba(231, 76, 60, 1);
}
</style>
<div class="chat">
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+22
View File
@@ -0,0 +1,22 @@
<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">{:__('Csr_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-csr_id" data-rule="required" data-source="csr/index" class="form-control selectpage" name="row[csr_id]" type="text" value="">
</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>
+22
View File
@@ -0,0 +1,22 @@
<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">{:__('Csr_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-csr_id" data-rule="required" data-source="csr/index" class="form-control selectpage" name="row[csr_id]" type="text" value="{$row.csr_id|htmlentities}">
</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>
+27
View File
@@ -0,0 +1,27 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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('kefu/session/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('kefu/session/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('kefu/session/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
<!-- <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('kefu/session/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> -->
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('kefu/session/recyclebin')?'':'hide'}" href="kefu/session/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit=""
data-operate-del="{:$auth->check('kefu/session/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('kefu/session/restore')?'':'hide'}" href="javascript:;" data-url="kefu/session/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('kefu/session/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/session/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('kefu/session/restore')?'':'hide'}" href="javascript:;" data-url="kefu/session/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('kefu/session/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/session/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('kefu/session/restore')}"
data-operate-destroy="{:$auth->check('kefu/session/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+48
View File
@@ -0,0 +1,48 @@
<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">{:__('Mark')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-mark" data-rule="required" class="form-control" name="row[mark]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Icon_image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-icon_image" class="form-control" size="50" name="row[icon_image]" type="text" value="">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-icon_image" class="btn btn-danger plupload" data-input-id="c-icon_image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-icon_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-icon_image" class="btn btn-primary fachoose" data-input-id="c-icon_image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-icon_image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-icon_image"></ul>
</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="1" }checked{/in} /> {$vo}</label>
{/foreach}
</div>
</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>
+62
View File
@@ -0,0 +1,62 @@
<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">{:__('Mark')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-mark" readonly class="form-control" name="row[mark]" type="text" value="{$row.mark|htmlentities}">
</div>
</div>
<div class="form-group data_api" style="display: none">
<label class="control-label col-xs-12 col-sm-2">{:__('Data_api')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-data_api" placeholder="" class="form-control" name="row[data_api]" type="text" value="{$row.data_api|htmlentities}">
<span class="help-block">{:__('Data Api Tip')}</span>
</div>
</div>
<div class="form-group data_api" style="display: none">
<label class="control-label col-xs-12 col-sm-2">{:__('Card_url')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-card_url" placeholder="" class="form-control" name="row[card_url]" type="text" value="{$row.card_url|htmlentities}">
<span class="help-block">{:__('Card Api Tip')}</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Icon_image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-icon_image" class="form-control" size="50" name="row[icon_image]" type="text" value="{$row.icon_image|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-icon_image" class="btn btn-danger plupload" data-input-id="c-icon_image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-icon_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-icon_image" class="btn btn-primary fachoose" data-input-id="c-icon_image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-icon_image"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-icon_image"></ul>
</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 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>
+39
View File
@@ -0,0 +1,39 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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('kefu/toolbar/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('kefu/toolbar/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('kefu/toolbar/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
<div class="dropdown btn-group {:$auth->check('kefu/toolbar/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=1"><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=0"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a>
</li>
</ul>
</div>
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('kefu/toolbar/recyclebin')?'':'hide'}" href="kefu/toolbar/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/toolbar/edit')}"
data-operate-del="{:$auth->check('kefu/toolbar/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('kefu/toolbar/restore')?'':'hide'}" href="javascript:;" data-url="kefu/toolbar/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('kefu/toolbar/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/toolbar/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('kefu/toolbar/restore')?'':'hide'}" href="javascript:;" data-url="kefu/toolbar/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('kefu/toolbar/destroy')?'':'hide'}" href="javascript:;" data-url="kefu/toolbar/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('kefu/toolbar/restore')}"
data-operate-destroy="{:$auth->check('kefu/toolbar/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+66
View File
@@ -0,0 +1,66 @@
<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-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">{:__('Avatar')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-avatar" class="form-control" size="50" name="row[avatar]" type="text" value="">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-avatar" class="btn btn-danger plupload" data-input-id="c-avatar" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-avatar"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-avatar" class="btn btn-primary fachoose" data-input-id="c-avatar" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-avatar"></span>
</div>
<ul class="row list-inline plupload-preview" id="p-avatar"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Referrer')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-referrer" data-rule="required" class="form-control" name="row[referrer]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Contact')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-contact" data-rule="required" class="form-control" name="row[contact]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Note')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-note" data-rule="required" class="form-control" name="row[note]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Token')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-token" data-rule="required" class="form-control" name="row[token]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Wechat_openid')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-wechat_openid" data-rule="required" class="form-control" name="row[wechat_openid]" type="text" value="">
</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>
+41
View File
@@ -0,0 +1,41 @@
<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-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">{:__('Nickname')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="{$row.nickname|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Referrer')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-referrer" class="form-control" name="row[referrer]" type="text" value="{$row.referrer|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Contact')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-contact" class="form-control" name="row[contact]" type="text" value="{$row.contact|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Note')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-note" class="form-control" name="row[note]" type="text" value="{$row.note|htmlentities}">
</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>
+25
View File
@@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<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('kefu/user/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('kefu/user/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('kefu/user/del')?'':'hide'}" title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('kefu/user/edit')}"
data-operate-del="{:$auth->check('kefu/user/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB