You've already forked guangan
UserShare
This commit is contained in:
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace plugin\ticket\controller;
|
namespace plugin\ticket\controller;
|
||||||
|
|
||||||
|
use plugin\points_mall\service\UserPointService;
|
||||||
|
use plugin\ticket\model\TicketTicket;
|
||||||
use plugin\ticket\model\TicketType;
|
use plugin\ticket\model\TicketType;
|
||||||
use plugin\ticket\model\TicketUserShare;
|
use plugin\ticket\model\TicketUserShare;
|
||||||
use think\admin\Controller;
|
use think\admin\Controller;
|
||||||
@ -49,6 +51,52 @@ class UserShare extends Controller
|
|||||||
]);
|
]);
|
||||||
$this->vo = TicketUserShare::mk()->where($where)->with(['linked_ticket'])->findOrEmpty();
|
$this->vo = TicketUserShare::mk()->where($where)->with(['linked_ticket'])->findOrEmpty();
|
||||||
if ($this->vo->isEmpty()) $this->error('用户随手拍不存在!');
|
if ($this->vo->isEmpty()) $this->error('用户随手拍不存在!');
|
||||||
|
if (!$this->vo->linked_ticket_id) {
|
||||||
|
$this->ticket_list = TicketTicket::mk()->scope(['avail'])->select();
|
||||||
|
} else {
|
||||||
|
$this->ticket_list = [];
|
||||||
|
}
|
||||||
|
$this->type_list = TicketType::getList();
|
||||||
|
$this->user_list = [];
|
||||||
$this->fetch('detail');
|
$this->fetch('detail');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function link()
|
||||||
|
{
|
||||||
|
$basic_data = $this->_vali([
|
||||||
|
'id.require' => '随手拍ID不能为空',
|
||||||
|
'_type.require' => '类型不能为空',
|
||||||
|
'content.require' => '回复内容不能为空',
|
||||||
|
'point_aware.require' => '奖励积分不能为空',
|
||||||
|
'point_aware.number' => '奖励积分必须为数字',
|
||||||
|
]);
|
||||||
|
$userShare = TicketUserShare::mk()->where(['id' => $basic_data['id']])->findOrEmpty();
|
||||||
|
if ($userShare->isEmpty()) $this->error('用户随手拍不存在!');
|
||||||
|
if ($userShare->status !== 0) $this->error('用户随手拍已处理!');
|
||||||
|
$ticket_id = null;
|
||||||
|
switch ($basic_data['_type']) {
|
||||||
|
case 'new':
|
||||||
|
$data = $this->_vali([
|
||||||
|
'type_id.require' => '类型不能为空',
|
||||||
|
'user_id.require' => '请选择处理人员',
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
case 'exist':
|
||||||
|
$data = $this->_vali([
|
||||||
|
'ticket_id.require' => '请选择处理工单',
|
||||||
|
]);
|
||||||
|
$ticket_id = $data['ticket_id'];
|
||||||
|
$ticket = TicketTicket::mk()->where(['id' => $data['ticket_id']])->findOrEmpty();
|
||||||
|
if ($ticket->isEmpty()) $this->error('工单不存在!');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$this->error('参数错误');
|
||||||
|
}
|
||||||
|
$userShare->linked_ticket_id = $ticket_id;
|
||||||
|
$userShare->response = $basic_data['content'];
|
||||||
|
$userShare->point_aware = $basic_data['point_aware'];
|
||||||
|
UserPointService::addUserPoint($userShare->user_id, $basic_data['point_aware'], '用户随手拍奖励积分');
|
||||||
|
$userShare->status = 1;
|
||||||
|
$userShare->save();
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,9 +1,7 @@
|
|||||||
<div class="layui-tab layui-tab-brief">
|
<div class="layui-tab layui-tab-brief">
|
||||||
<ul class="layui-tab-title">
|
<ul class="layui-tab-title">
|
||||||
<li class="layui-this">基本信息</li>
|
<li class="layui-this">基本信息</li>
|
||||||
{if $vo.linked_ticket_id}
|
|
||||||
<li>关联工单</li>
|
<li>关联工单</li>
|
||||||
{/if}
|
|
||||||
</ul>
|
</ul>
|
||||||
<div class="layui-tab-content">
|
<div class="layui-tab-content">
|
||||||
<div class="layui-tab-item layui-show">
|
<div class="layui-tab-item layui-show">
|
||||||
@ -36,37 +34,46 @@
|
|||||||
<td>随手拍图片</td>
|
<td>随手拍图片</td>
|
||||||
<td>
|
<td>
|
||||||
<div>
|
<div>
|
||||||
|
{if count($vo.imgs_arr) > 0}
|
||||||
{foreach $vo.imgs_arr as $img}
|
{foreach $vo.imgs_arr as $img}
|
||||||
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
|
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
|
||||||
<span> </span>
|
<span> </span>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
{else}
|
||||||
|
无图片
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
{if $vo.status}
|
||||||
|
<tr>
|
||||||
|
<td>回复内容</td>
|
||||||
|
<td>{$vo.content|default=""}</td>
|
||||||
|
</tr>
|
||||||
|
{/if}
|
||||||
|
{if $vo.ticket_lat && $vo.ticket_lng}
|
||||||
|
<tr>
|
||||||
|
<td>位置</td>
|
||||||
|
<td>
|
||||||
|
<div id="map" style="height: 320px;"></div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/if}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{if $vo.ticket_lat && $vo.ticket_lng}
|
{if $vo.ticket_lat && $vo.ticket_lng}
|
||||||
<div class="layui-card">
|
|
||||||
<div class="layui-card-header">地图位置</div>
|
|
||||||
<div class="layui-card-body">
|
|
||||||
<div id="map" style="height: 400px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="https://map.qq.com/api/gljs?v=1.exp&key=T6XBZ-L33CB-TMFUL-JQ4D6-MKBTK-KNBED"></script>
|
<script src="https://map.qq.com/api/gljs?v=1.exp&key=T6XBZ-L33CB-TMFUL-JQ4D6-MKBTK-KNBED"></script>
|
||||||
<script>
|
<script>
|
||||||
var map;
|
|
||||||
//地图初始化函数,本例取名为init,开发者可根据实际情况定义
|
|
||||||
function initMap() {
|
function initMap() {
|
||||||
//定义地图中心点坐标
|
//定义地图中心点坐标
|
||||||
var center = new TMap.LatLng("{$vo.ticket_lat}", "{$vo.ticket_lng}")
|
var center = new TMap.LatLng("{$vo.ticket_lat}", "{$vo.ticket_lng}")
|
||||||
//定义map变量,调用 TMap.Map() 构造函数创建地图
|
//定义map变量,调用 TMap.Map() 构造函数创建地图
|
||||||
map = new TMap.Map(document.getElementById('map'), {
|
var map = new TMap.Map(document.getElementById('map'), {
|
||||||
center: center,//设置地图中心点坐标
|
center: center,//设置地图中心点坐标
|
||||||
zoom: 17.2, //设置地图缩放级别
|
zoom: 17.2, //设置地图缩放级别
|
||||||
pitch: 43.5, //设置俯仰角
|
pitch: 30, //设置俯仰角
|
||||||
rotation: 45 //设置地图旋转角度
|
|
||||||
});
|
});
|
||||||
var marker = new TMap.MultiMarker({
|
var marker = new TMap.MultiMarker({
|
||||||
map: map,
|
map: map,
|
||||||
@ -88,16 +95,165 @@
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
(function () {
|
var mapInit = setInterval(function () {
|
||||||
initMap()
|
if (window.TMap) {
|
||||||
})()
|
clearInterval(mapInit)
|
||||||
|
initMap()
|
||||||
|
}
|
||||||
|
}, 500)
|
||||||
</script>
|
</script>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{if $vo.linked_ticket_id}
|
|
||||||
<div class="layui-tab-item">
|
<div class="layui-tab-item">
|
||||||
123
|
{if $vo.linked_ticket_id}
|
||||||
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-header">关联工单</div>
|
||||||
|
<div class="layui-card-body">
|
||||||
|
<table class="layui-table">
|
||||||
|
<tbody class="layui-table-body">
|
||||||
|
<tr>
|
||||||
|
<td style="width: 120px">工单编号</td>
|
||||||
|
<td>{$vo.ticket.id|default=""}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>工单类型</td>
|
||||||
|
<td>{$vo.ticket.type_name|default=""}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{else}
|
||||||
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-header">关联工单</div>
|
||||||
|
<div class="layui-card-body">
|
||||||
|
<form action="{:url('link')}" method="post" class="layui-form">
|
||||||
|
<input type="hidden" name="id" value="{$vo.id}">
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">工单类型</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="_type" lay-verify="required" lay-filter="Type">
|
||||||
|
<option value="">请选择绑定方式</option>
|
||||||
|
<option value="new">新建工单</option>
|
||||||
|
<option value="exist">已有工单</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item new_ticket">
|
||||||
|
<label class="layui-form-label">核实人员</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="user_id" lay-search="{caseSensitive:false, fuzzy: false}">
|
||||||
|
<option value="">请选择核实人员</option>
|
||||||
|
<option value="0">TEST</option>
|
||||||
|
{foreach $user_list as $user}
|
||||||
|
<option value="{$user.id}">{$user.name}</option>
|
||||||
|
{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item exist_ticket">
|
||||||
|
<label class="layui-form-label">关联工单</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="ticket_id" lay-search="{caseSensitive:false, fuzzy: false}">
|
||||||
|
<option value="">请选择已有工单</option>
|
||||||
|
{foreach $ticket_list as $ticket}
|
||||||
|
<option value="{$ticket.id}">{$ticket.id} - {$ticket.type_name}</option>
|
||||||
|
{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item new_ticket">
|
||||||
|
<label class="layui-form-label">工单类型</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<select name="type_id" lay-verify="required">
|
||||||
|
<option value="">请选择工单类型</option>
|
||||||
|
{foreach $type_list as $type}
|
||||||
|
<option value="{$type.id}">{$type.name}</option>
|
||||||
|
{/foreach}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">用户反馈</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<textarea name="content" placeholder="请输入给用户反馈的内容" class="layui-textarea" lay-verify="required"></textarea>
|
||||||
|
<div class="layui-form-mid layui-word-aux">给用户反馈的内容,会发送给用户,请谨慎填写</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">积分奖励</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input value="0" name="point_aware" type="number" min="0" step="1" placeholder="请输入积分奖励" class="layui-input layui-input-number" lay-verify="required">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<button class="layui-btn" lay-submit lay-filter="submit">提交</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
const $new = $(".new_ticket");
|
||||||
|
const $exist = $(".exist_ticket");
|
||||||
|
$new.hide()
|
||||||
|
$exist.hide()
|
||||||
|
layui.use(['form'], function () {
|
||||||
|
var form = layui.form;
|
||||||
|
form.on('select(Type)', function (data) {
|
||||||
|
$new.hide()
|
||||||
|
$exist.hide()
|
||||||
|
switch (data.value) {
|
||||||
|
case 'new':
|
||||||
|
$new.show();
|
||||||
|
break;
|
||||||
|
case 'exist':
|
||||||
|
$exist.show();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
form.on('submit(submit)', function (data) {
|
||||||
|
const field = data.field
|
||||||
|
const _type = field._type
|
||||||
|
switch (_type) {
|
||||||
|
case 'new':
|
||||||
|
if (!field.user_id) {
|
||||||
|
layer.msg('请选择核实人员')
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!field.type_id) {
|
||||||
|
layer.msg('请选择工单类型')
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'exist':
|
||||||
|
if (!field.ticket_id) {
|
||||||
|
layer.msg('请选择工单')
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
console.log(data)
|
||||||
|
$.post("{:url('link')}", field, function (res) {
|
||||||
|
if (res.code === 0) {
|
||||||
|
layer.msg(res.info, {icon: 1, time: 1500}, function () {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
layer.msg(res.info, {icon: 2, anim: 6, time: 3000}, function () {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,6 +52,13 @@
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
{field:'status', title:'回复状态', width:100, templet:function(item){
|
||||||
|
if (item.status == 0) {
|
||||||
|
return '<span class="layui-badge layui-bg-red">未回复</span>';
|
||||||
|
} else {
|
||||||
|
return '<span class="layui-badge layui-bg-green">已回复</span>';
|
||||||
|
}
|
||||||
|
}},
|
||||||
{fixed: 'right', title:'操作', toolbar: '#toolbar', width:200}
|
{fixed: 'right', title:'操作', toolbar: '#toolbar', width:200}
|
||||||
]],
|
]],
|
||||||
page: true
|
page: true
|
||||||
|
@ -24,6 +24,16 @@
|
|||||||
<input data-date-range name="create_at" value="{:input('get.create_at')}" placeholder="请选择创建时间" class="layui-input">
|
<input data-date-range name="create_at" value="{:input('get.create_at')}" placeholder="请选择创建时间" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="layui-form-item layui-inline">
|
||||||
|
<label class="layui-form-label">回复状态</label>
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<select class="layui-select" name="status">
|
||||||
|
<option value=''>-- 全部 --</option>
|
||||||
|
<option value='0'>未回复</option>
|
||||||
|
<option value='1'>已回复</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="layui-form-item layui-inline">
|
<div class="layui-form-item layui-inline">
|
||||||
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="searchData"><i class="layui-icon"></i> 搜 索</button>
|
<button class="layui-btn layui-btn-primary" lay-submit lay-filter="searchData"><i class="layui-icon"></i> 搜 索</button>
|
||||||
|
Reference in New Issue
Block a user