feat: 牛牛单独限红 - 新增limit_low_nn/limit_high_nn字段,代理端添加/编辑代理和会员支持牛牛限红设置,语言包三语支持
This commit is contained in:
Vendored
BIN
Binary file not shown.
@@ -95,16 +95,30 @@
|
||||
layui.use('laydate', function () {
|
||||
var laydate = layui.laydate;
|
||||
|
||||
// 计算默认时间:今天07:00:00 ~ 明天06:59:59
|
||||
var now = new Date();
|
||||
var y = now.getFullYear();
|
||||
var m = ('0' + (now.getMonth() + 1)).slice(-2);
|
||||
var d = ('0' + now.getDate()).slice(-2);
|
||||
var tomorrow = new Date(now.getTime() + 86400000);
|
||||
var ty = tomorrow.getFullYear();
|
||||
var tm = ('0' + (tomorrow.getMonth() + 1)).slice(-2);
|
||||
var td = ('0' + tomorrow.getDate()).slice(-2);
|
||||
var defaultStart = y + '-' + m + '-' + d + ' 07:00:00';
|
||||
var defaultEnd = ty + '-' + tm + '-' + td + ' 06:59:59';
|
||||
|
||||
// 开始时间
|
||||
laydate.render({
|
||||
elem: '#start',
|
||||
type: 'datetime'
|
||||
type: 'datetime',
|
||||
value: defaultStart
|
||||
});
|
||||
|
||||
// 结束时间
|
||||
laydate.render({
|
||||
elem: '#end',
|
||||
type: 'datetime'
|
||||
type: 'datetime',
|
||||
value: defaultEnd
|
||||
});
|
||||
});
|
||||
function get_profit(){
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
{include file="public/header" /}
|
||||
<body>
|
||||
<div class="x-body">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">会话信息</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-skin="nob">
|
||||
<tr>
|
||||
<td width="120"><strong>会话ID:</strong></td>
|
||||
<td>{$session.id}</td>
|
||||
<td width="120"><strong>用户名:</strong></td>
|
||||
<td>{$session.username}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>用户余额:</strong></td>
|
||||
<td>{$session.money}</td>
|
||||
<td><strong>客服:</strong></td>
|
||||
<td>{$session.admin_username|default='未分配'}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>来源:</strong></td>
|
||||
<td>
|
||||
{switch name="session.source"}
|
||||
{case value="1"}PC{/case}
|
||||
{case value="2"}Game{/case}
|
||||
{case value="3"}Portal{/case}
|
||||
{/switch}
|
||||
</td>
|
||||
<td><strong>状态:</strong></td>
|
||||
<td>
|
||||
{switch name="session.status"}
|
||||
{case value="0"}待分配{/case}
|
||||
{case value="1"}进行中{/case}
|
||||
{case value="2"}已结束{/case}
|
||||
{/switch}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>开始时间:</strong></td>
|
||||
<td>{$session.create_time|date='Y-m-d H:i:s',###}</td>
|
||||
<td><strong>结束时间:</strong></td>
|
||||
<td>{if condition="$session.end_time"}{$session.end_time|date='Y-m-d H:i:s',###}{else/}-{/if}</td>
|
||||
</tr>
|
||||
{if condition="$session.rating"}
|
||||
<tr>
|
||||
<td><strong>评分:</strong></td>
|
||||
<td colspan="3">
|
||||
<span style="color: #FFB800;">{$session.rating}星</span>
|
||||
{if condition="$session.rating_content"}
|
||||
<br><span style="color: #666;">{$session.rating_content}</span>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card" style="margin-top: 20px;">
|
||||
<div class="layui-card-header">聊天记录</div>
|
||||
<div class="layui-card-body" style="height: 400px; overflow-y: auto; background: #f8f8f8;">
|
||||
{volist name="messages" id="msg"}
|
||||
<div style="margin-bottom: 15px; {eq name='msg.sender_type' value='2'}text-align: right;{/eq}">
|
||||
<div style="display: inline-block; max-width: 60%; text-align: left;">
|
||||
<div style="font-size: 12px; color: #999; margin-bottom: 3px;">
|
||||
{eq name="msg.sender_type" value="1"}
|
||||
用户
|
||||
{else/}
|
||||
客服
|
||||
{/eq}
|
||||
· {$msg.create_time|date='Y-m-d H:i:s',###}
|
||||
</div>
|
||||
<div style="padding: 10px; background: {eq name='msg.sender_type' value='1'}#fff{else/}#1E9FFF{/eq};
|
||||
color: {eq name='msg.sender_type' value='1'}#333{else/}#fff{/eq};
|
||||
border-radius: 5px; word-break: break-all;">
|
||||
{eq name="msg.msg_type" value="2"}
|
||||
<img src="{$msg.content}" style="max-width: 300px;">
|
||||
{else/}
|
||||
{$msg.content}
|
||||
{/eq}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/volist}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,117 @@
|
||||
{include file="public/header" /}
|
||||
<body>
|
||||
<div class="x-nav">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="">首页</a>
|
||||
<a><cite>聊天记录查询</cite></a>
|
||||
</span>
|
||||
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" href="javascript:location.replace(location.href);" title="刷新">
|
||||
<i class="layui-icon" style="line-height:30px">ဂ</i></a>
|
||||
</div>
|
||||
<div class="x-body">
|
||||
<div class="layui-row">
|
||||
<form class="layui-form layui-col-md12 x-so" method="get">
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="username" value="{$get.username|default=''}"
|
||||
placeholder="用户名" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<select name="admin_id">
|
||||
<option value="">全部客服</option>
|
||||
{volist name="admins" id="admin"}
|
||||
<option value="{$admin.id}" {if condition="isset($get['admin_id']) && $get['admin_id'] == $admin['id']"}selected{/if}>
|
||||
{$admin.nickname|default=$admin.username}
|
||||
</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="startDate" id="startDate" value="{$get.startDate|default=''}"
|
||||
placeholder="开始日期" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="endDate" id="endDate" value="{$get.endDate|default=''}"
|
||||
placeholder="结束日期" class="layui-input">
|
||||
</div>
|
||||
<button class="layui-btn" type="submit"><i class="layui-icon"></i></button>
|
||||
<button class="layui-btn layui-btn-warm" type="submit" name="export" value="1">
|
||||
<i class="layui-icon"></i>导出
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<table class="layui-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>会话ID</th>
|
||||
<th>用户名</th>
|
||||
<th>客服</th>
|
||||
<th>来源</th>
|
||||
<th>状态</th>
|
||||
<th>评分</th>
|
||||
<th>开始时间</th>
|
||||
<th>结束时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{volist name="list" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.id}</td>
|
||||
<td>{$vo.username}</td>
|
||||
<td>{$vo.admin_username|default='未分配'}</td>
|
||||
<td>
|
||||
{switch name="vo.source"}
|
||||
{case value="1"}PC{/case}
|
||||
{case value="2"}Game{/case}
|
||||
{case value="3"}Portal{/case}
|
||||
{/switch}
|
||||
</td>
|
||||
<td>
|
||||
{switch name="vo.status"}
|
||||
{case value="0"}<span class="layui-badge layui-bg-gray">待分配</span>{/case}
|
||||
{case value="1"}<span class="layui-badge layui-bg-blue">进行中</span>{/case}
|
||||
{case value="2"}<span class="layui-badge">已结束</span>{/case}
|
||||
{/switch}
|
||||
</td>
|
||||
<td>
|
||||
{if condition="$vo.rating"}
|
||||
<span style="color: #FFB800;">{$vo.rating}星</span>
|
||||
{else/}
|
||||
-
|
||||
{/if}
|
||||
</td>
|
||||
<td>{$vo.create_time|date='Y-m-d H:i:s',###}</td>
|
||||
<td>{if condition="$vo.end_time"}{$vo.end_time|date='Y-m-d H:i:s',###}{else/}-{/if}</td>
|
||||
<td class="td-manage">
|
||||
<a title="查看详情" onclick="x_admin_show('会话详情','/chat/detail?session_id={$vo.id}',900,600)" href="javascript:;">
|
||||
<i class="layui-icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="page">
|
||||
{$list->render()}
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['laydate', 'form'], function(){
|
||||
var laydate = layui.laydate;
|
||||
var form = layui.form;
|
||||
|
||||
laydate.render({
|
||||
elem: '#startDate',
|
||||
type: 'date'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#endDate',
|
||||
type: 'date'
|
||||
});
|
||||
|
||||
form.render();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,70 @@
|
||||
{include file="public/header" /}
|
||||
<body>
|
||||
<div class="x-body">
|
||||
<form class="layui-form" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">分类</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="category" value="{$info.category|default=''}"
|
||||
placeholder="可选,如:常见问题、充值相关等" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><span class="x-red">*</span>标题</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="title" required lay-verify="required"
|
||||
value="{$info.title|default=''}" placeholder="请输入标题" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
<label class="layui-form-label"><span class="x-red">*</span>内容</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="content" required lay-verify="required"
|
||||
placeholder="请输入回复内容" class="layui-textarea">{$info.content|default=''}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">排序</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="number" name="sort" value="{$info.sort|default='0'}"
|
||||
placeholder="数字越小越靠前" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="status" value="1" title="启用"
|
||||
{if condition="!isset($info['status']) || $info['status'] == 1"}checked{/if}>
|
||||
<input type="radio" name="status" value="0" title="禁用"
|
||||
{if condition="isset($info['status']) && $info['status'] == 0"}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<button class="layui-btn" lay-submit lay-filter="add">提交</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['form', 'layer'], function(){
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
form.on('submit(add)', function(data){
|
||||
$.post('', data.field, function(res){
|
||||
if(res.code == 0 || res.code == 1){
|
||||
layer.alert(res.msg || '操作成功', {icon: 1}, function(){
|
||||
var index = parent.layer.getFrameIndex(window.name);
|
||||
parent.layer.close(index);
|
||||
parent.location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.alert(res.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,134 @@
|
||||
{include file="public/header" /}
|
||||
<body>
|
||||
<div class="x-nav">
|
||||
<span class="layui-breadcrumb">
|
||||
<a href="">首页</a>
|
||||
<a><cite>快捷回复管理</cite></a>
|
||||
</span>
|
||||
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" href="javascript:location.replace(location.href);" title="刷新">
|
||||
<i class="layui-icon" style="line-height:30px">ဂ</i></a>
|
||||
</div>
|
||||
<div class="x-body">
|
||||
<div class="layui-row">
|
||||
<form class="layui-form layui-col-md12 x-so" method="get">
|
||||
<div class="layui-input-inline">
|
||||
<select name="category">
|
||||
<option value="">全部分类</option>
|
||||
{volist name="categories" id="cat"}
|
||||
<option value="{$cat}" {if condition="isset($get['category']) && $get['category'] == $cat"}selected{/if}>{$cat}</option>
|
||||
{/volist}
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<select name="status">
|
||||
<option value="">全部状态</option>
|
||||
<option value="1" {if condition="isset($get['status']) && $get['status'] == '1'"}selected{/if}>启用</option>
|
||||
<option value="0" {if condition="isset($get['status']) && $get['status'] == '0'"}selected{/if}>禁用</option>
|
||||
</select>
|
||||
</div>
|
||||
<button class="layui-btn" type="submit"><i class="layui-icon"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
<xblock>
|
||||
<button class="layui-btn" onclick="x_admin_show('添加快捷回复','/chat_quick_reply/add',600,400)">
|
||||
<i class="layui-icon"></i>添加
|
||||
</button>
|
||||
</xblock>
|
||||
<table class="layui-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>分类</th>
|
||||
<th>标题</th>
|
||||
<th>内容</th>
|
||||
<th>排序</th>
|
||||
<th>状态</th>
|
||||
<th>创建时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{volist name="list" id="vo"}
|
||||
<tr>
|
||||
<td>{$vo.id}</td>
|
||||
<td>{$vo.category|default='无'}</td>
|
||||
<td>{$vo.title}</td>
|
||||
<td style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title="{$vo.content}">{$vo.content}</td>
|
||||
<td>
|
||||
<input type="text" class="layui-input" value="{$vo.sort}"
|
||||
onchange="updateSort({$vo.id}, this.value)"
|
||||
style="width: 60px; display: inline-block;">
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" name="status" lay-skin="switch" lay-text="启用|禁用"
|
||||
{eq name="vo.status" value="1"}checked{/eq}
|
||||
onchange="updateStatus({$vo.id}, this.checked ? 1 : 0)">
|
||||
</td>
|
||||
<td>{$vo.create_time|date='Y-m-d H:i:s',###}</td>
|
||||
<td class="td-manage">
|
||||
<a title="编辑" onclick="x_admin_show('编辑','/chat_quick_reply/edit?id={$vo.id}',600,400)" href="javascript:;">
|
||||
<i class="layui-icon"></i>
|
||||
</a>
|
||||
<a title="删除" onclick="member_del(this,'{$vo.id}')" href="javascript:;">
|
||||
<i class="layui-icon"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="page">
|
||||
{$list->render()}
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
layui.use(['form', 'layer'], function(){
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
form.render();
|
||||
});
|
||||
|
||||
// 删除
|
||||
function member_del(obj, id){
|
||||
layer.confirm('确认要删除吗?', function(index){
|
||||
$.ajax({
|
||||
url: '/chat_quick_reply/del',
|
||||
type: 'POST',
|
||||
data: {id: id},
|
||||
success: function(res){
|
||||
if(res.code == 0){
|
||||
$(obj).parents("tr").remove();
|
||||
layer.msg('删除成功', {icon: 1, time: 1000});
|
||||
} else {
|
||||
layer.msg(res.msg, {icon: 2, time: 1000});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 更新状态
|
||||
function updateStatus(id, status){
|
||||
$.post('/chat_quick_reply/status', {id: id, status: status}, function(res){
|
||||
if(res.code == 0){
|
||||
layer.msg('操作成功', {icon: 1, time: 1000});
|
||||
} else {
|
||||
layer.msg(res.msg, {icon: 2, time: 1000});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 更新排序
|
||||
function updateSort(id, sort){
|
||||
$.post('/chat_quick_reply/sort', {id: id, sort: sort}, function(res){
|
||||
if(res.code == 0){
|
||||
layer.msg('操作成功', {icon: 1, time: 1000});
|
||||
} else {
|
||||
layer.msg(res.msg, {icon: 2, time: 1000});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -122,6 +122,17 @@
|
||||
<li><a _href="/Tip/optimum"><i class="iconfont"></i><cite>今日最佳记录</cite></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:;">
|
||||
<cite class="main-nav">客服管理</cite>
|
||||
<i class="iconfont nav_right"></i>
|
||||
</a>
|
||||
<ul class="sub-menu">
|
||||
<li><a _href="/chat/index"><i class="iconfont"></i><cite>客服工作台</cite></a></li>
|
||||
<li><a _href="/chat/record"><i class="iconfont"></i><cite>聊天记录查询</cite></a></li>
|
||||
<li><a _href="/chat_quick_reply/index"><i class="iconfont"></i><cite>快捷回复管理</cite></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</div>
|
||||
<div id="configure_list" style="display: none;">
|
||||
<li class="open">
|
||||
|
||||
Reference in New Issue
Block a user