工单关联内容

This commit is contained in:
2024-12-03 17:00:39 +08:00
parent a6c7d1de15
commit 9b9785fbb4
7 changed files with 527 additions and 144 deletions

View File

@ -0,0 +1,24 @@
<?php
namespace plugin\ticket\model;
use plugin\inspection\model\InspectionStaff;
use think\admin\Model;
class TicketRepair extends Model
{
public function ticket()
{
return $this->belongsTo(TicketTicket::class, 'ticket_id');
}
public function staff()
{
return $this->belongsTo(InspectionStaff::class, 'staff_id');
}
public function getImgsArrAttr($value, $data)
{
return str2arr($data['imgs'] ?: '', '|');
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace plugin\ticket\model;
use plugin\inspection\model\InspectionStaff;
use think\admin\Model;
class TicketRepairAccept extends Model
{
public function ticket()
{
return $this->belongsTo(TicketTicket::class, 'ticket_id');
}
public function staff()
{
return $this->belongsTo(InspectionStaff::class, 'staff_id');
}
public function getImgsArrAttr($value, $data)
{
return str2arr($data['imgs'] ?: '', '|');
}
}

View File

@ -105,6 +105,21 @@ class TicketTicket extends Model
return $this->belongsTo(TicketDept::class, 'dept_id');
}
public function verify()
{
return $this->hasMany(TicketVerify::class, 'ticket_id')->order('create_at', 'desc');
}
public function repair()
{
return $this->hasMany(TicketRepair::class, 'ticket_id')->order('create_at', 'desc');
}
public function repair_accept()
{
return $this->hasMany(TicketRepairAccept::class, 'ticket_id')->order('create_at', 'desc');
}
public function scopeUnConf($query)
{
return $query->where('state', '=', '0');

View File

@ -0,0 +1,24 @@
<?php
namespace plugin\ticket\model;
use plugin\inspection\model\InspectionStaff;
use think\admin\Model;
class TicketVerify extends Model
{
public function ticket()
{
return $this->belongsTo(TicketTicket::class, 'ticket_id');
}
public function staff()
{
return $this->belongsTo(InspectionStaff::class, 'staff_id');
}
public function getImgsArrAttr($value, $data)
{
return str2arr($data['imgs'] ?: '', '|');
}
}

View File

@ -1,37 +1,125 @@
<div class="layui-card">
<div class="layui-card-header">工单内容</div>
<div class="layui-card-body">
<div class="layui-row">
工单编号:{$vo.id|default=""}
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title">
<li class="layui-this">基本信息</li>
<li>现场核实情况</li>
<li>关联随手拍</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-card">
<div class="layui-card-header">工单内容</div>
<div class="layui-card-body">
<div class="layui-row">
工单编号:{$vo.id|default=""}
</div>
<div class="layui-row">
工单标题:{$vo.title|default=""}
</div>
<div class="layui-row">
反馈人信息:{$vo.contact_name|default="未填写名称"}
联系方式:{$vo.contact_phone|default="未填写联系方式"}
联系地址:{$vo.contact_address|default="未填写地址"}
</div>
<div class="layui-row">
工单类型:{$vo.type_name|default=""}
</div>
<div class="layui-row">
工单地址:{$vo.ticket_address|default=""}
</div>
<div class="layui-row">
工单内容:{$vo.content|default=""}
</div>
<div class="layui-row">
工单图片:
<div>
{foreach $vo.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
工单标题:{$vo.title|default=""}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">现场核实情况</div>
{if $vo.verify}
<div class="layui-card-body">
{foreach $vo.verify as $verify}
<table class="layui-table">
<tbody class="layui-table-body">
<tr>
<td style="width: 120px">提交时间</td>
<td>{$verify.create_at|default=""}</td>
</tr>
<tr>
<td>核实人</td>
<td>{$verify.staff.name|default=""}【联系方式:{$verify.staff.phone|default=""}</td>
</tr>
<tr>
<td>核实结果</td>
<td>{$verify.content|default=""}</td>
</tr>
<tr>
<td>图片</td>
<td>
<div>
{foreach $verify.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</td>
</tr>
<tr>
<td>预估工作量</td>
<td>{$verify.work_days|default=""}</td>
</tr>
</tbody>
</table>
</div>
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无核实记录
</div>
</div>
{/if}
</div>
</div>
<div class="layui-row">
反馈人信息:{$vo.contact_name|default="未填写名称"}
联系方式:{$vo.contact_phone|default="未填写联系方式"}
联系地址:{$vo.contact_address|default="未填写地址"}
</div>
<div class="layui-row">
工单类型:{$vo.type_name|default=""}
</div>
<div class="layui-row">
工单地址:{$vo.ticket_address|default=""}
</div>
<div class="layui-row">
工单内容:{$vo.content|default=""}
</div>
<div class="layui-row">
工单图片:
<div>
{foreach $vo.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">关联随手拍</div>
<div class="layui-card-body">
<table class="layui-table">
<thead>
<tr>
<th>随手拍编号</th>
<th>问题类型</th>
<th>反馈人</th>
<th>联系方式</th>
<th>反馈时间</th>
</tr>
</thead>
<tbody class="layui-table-body">
{foreach $vo.userShares as $user_share}
<tr>
<td><a data-modal="{:url('user_share/detail', ['id' => $user_share.id])}" data-height="90%" data-width="60%" class="layui-btn layui-btn-xs layui-btn-normal" title="随手拍详情">{$user_share.id}</a></td>
<td>{$user_share.type_name|default=""}</td>
<td>{$user_share.contact_name|default=""}</td>
<td>{$user_share.contact_phone|default=""}</td>
<td>{$user_share.create_at|default=""}</td>
</tr>
</tbody>
{/foreach}
</table>
</div>
</div>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">工单流转详情</div>
<div class="layui-card-body">

View File

@ -1,65 +1,198 @@
<div class="layui-card">
<div class="layui-card-header">工单内容</div>
<div class="layui-card-body">
<div class="layui-row">
工单编号:{$vo.id|default=""}
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title">
<li class="layui-this">基本信息</li>
<li>核实情况</li>
<li>维修情况</li>
<li>验收情况</li>
<li>结算情况</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-card">
<div class="layui-card-header">工单内容</div>
<div class="layui-card-body">
<div class="layui-row">
工单编号:{$vo.id|default=""}
</div>
<div class="layui-row">
工单标题:{$vo.title|default=""}
</div>
<div class="layui-row">
反馈人信息:{$vo.contact_name|default="未填写名称"}
联系方式:{$vo.contact_phone|default="未填写联系方式"}
联系地址:{$vo.contact_address|default="未填写地址"}
</div>
<div class="layui-row">
工单类型:{$vo.type_name|default=""}
</div>
<div class="layui-row">
工单地址:{$vo.ticket_address|default=""}
</div>
<div class="layui-row">
工单内容:{$vo.content|default=""}
</div>
<div class="layui-row">
工单图片:
<div>
{foreach $vo.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
工单标题:{$vo.title|default=""}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">现场核实情况</div>
{if $vo.verify}
<div class="layui-card-body">
{foreach $vo.verify as $verify}
<table class="layui-table">
<tbody class="layui-table-body">
<tr>
<td style="width: 120px">提交时间</td>
<td>{$verify.create_at|default=""}</td>
</tr>
<tr>
<td>核实人</td>
<td>{$verify.staff.name|default=""}【联系方式:{$verify.staff.phone|default=""}</td>
</tr>
<tr>
<td>核实结果</td>
<td>{$verify.content|default=""}</td>
</tr>
<tr>
<td>图片</td>
<td>
<div>
{foreach $verify.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</td>
</tr>
<tr>
<td>预估工作量</td>
<td>{$verify.work_days|default=""}</td>
</tr>
</tbody>
</table>
</div>
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无核实记录
</div>
</div>
{/if}
</div>
</div>
<div class="layui-row">
反馈人信息:{$vo.contact_name|default="未填写名称"}
联系方式:{$vo.contact_phone|default="未填写联系方式"}
联系地址:{$vo.contact_address|default="未填写地址"}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">工单维修情况</div>
{if $vo.repair}
<div class="layui-card-body">
{foreach $vo.repair as $repair}
<table class="layui-table">
<tbody class="layui-table-body">
<tr>
<td style="width: 120px">提交时间</td>
<td>{$repair.create_at|default=""}</td>
</tr>
<tr>
<td>维修人</td>
<td>{$repair.staff.name|default=""}【联系方式:{$repair.staff.phone|default=""}</td>
</tr>
<tr>
<td>维修结果</td>
<td>{$repair.content|default=""}</td>
</tr>
<tr>
<td>图片</td>
<td>
<div>
{foreach $repair.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</td>
</tr>
</tbody>
</table>
{/foreach}
</div>
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无维修记录
</div>
</div>
{/if}
</div>
</div>
<div class="layui-row">
工单类型:{$vo.type_name|default=""}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">工单验收情况</div>
{if $vo.repair_accept}
<div class="layui-card-body">
{foreach $vo.repair_accept as $accept}
<table class="layui-table">
<tbody class="layui-table-body">
<tr>
<td style="width: 120px">提交时间</td>
<td>{$accept.create_at|default=""}</td>
</tr>
<tr>
<td>验收人</td>
<td>{$accept.staff.name|default=""}【联系方式:{$accept.staff.phone|default=""}</td>
</tr>
<tr>
<td>验收结果</td>
<td>{$accept.content|default=""}</td>
</tr>
<tr>
<td>图片</td>
<td>
<div>
{foreach $accept.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</td>
</tr>
</tbody>
</table>
{/foreach}
</div>
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无验收记录
</div>
</div>
{/if}
</div>
</div>
<div class="layui-row">
工单地址:{$vo.ticket_address|default=""}
</div>
<div class="layui-row">
工单内容:{$vo.content|default=""}
</div>
<div class="layui-row">
工单图片:
<div>
{foreach $vo.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">工单结算情况</div>
{if $vo.calculate}
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无结算记录
</div>
<div class="layui-row">
<a data-confirm="确定要做结算操作吗?" data-action="{:url('calculate')}" data-value="id#{{ d.id }}" data-csrf="{:systoken('calculate')}" class="layui-btn layui-btn-xs layui-btn-danger" title="结算">结算</a>
</div>
</div>
{/if}
</div>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">工单流转详情</div>
<div class="layui-card-body">
<table id="replyTable" class="layui-table">
<thead>
<tr>
<th lay-data='{field: "username", width: "120px"}'>工单处理人</th>
<th lay-data='{field: "type_name", width: "120px"}'>处理类型</th>
<th lay-data='{field: "create_at", width: "180px"}'>工单处理时间</th>
<th lay-data='{field: "content", minWidth: "200px"}'>处理内容</th>
</tr>
</thead>
<tbody>
{notempty name='vo.reply'}
{foreach $vo.reply as $reply}
<tr>
<td>{$reply.username|default=""}</td>
<td>{$reply.type_name|default=""}</td>
<td>{$reply.create_at|default=""}</td>
<td>{$reply.content|default=""}</td>
</tr>
{/foreach}
{else}
<tr>
<td colspan="999" class="text-center">暂无工单流转记录</td>
</tr>
{/notempty}
</tbody>
</table>
</div>
</div>

View File

@ -1,65 +1,140 @@
<div class="layui-card">
<div class="layui-card-header">工单内容</div>
<div class="layui-card-body">
<div class="layui-row">
工单编号:{$vo.id|default=""}
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title">
<li class="layui-this">基本信息</li>
<li>核实情况</li>
<li>维修情况</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-card">
<div class="layui-card-header">工单内容</div>
<div class="layui-card-body">
<div class="layui-row">
工单编号:{$vo.id|default=""}
</div>
<div class="layui-row">
工单标题:{$vo.title|default=""}
</div>
<div class="layui-row">
反馈人信息:{$vo.contact_name|default="未填写名称"}
联系方式:{$vo.contact_phone|default="未填写联系方式"}
联系地址:{$vo.contact_address|default="未填写地址"}
</div>
<div class="layui-row">
工单类型:{$vo.type_name|default=""}
</div>
<div class="layui-row">
工单地址:{$vo.ticket_address|default=""}
</div>
<div class="layui-row">
工单内容:{$vo.content|default=""}
</div>
<div class="layui-row">
工单图片:
<div>
{foreach $vo.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
工单标题:{$vo.title|default=""}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">现场核实情况</div>
{if $vo.verify}
<div class="layui-card-body">
{foreach $vo.verify as $verify}
<table class="layui-table">
<tbody class="layui-table-body">
<tr>
<td style="width: 120px">提交时间</td>
<td>{$verify.create_at|default=""}</td>
</tr>
<tr>
<td>核实人</td>
<td>{$verify.staff.name|default=""}【联系方式:{$verify.staff.phone|default=""}</td>
</tr>
<tr>
<td>核实结果</td>
<td>{$verify.content|default=""}</td>
</tr>
<tr>
<td>图片</td>
<td>
<div>
{foreach $verify.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</td>
</tr>
<tr>
<td>预估工作量</td>
<td>{$verify.work_days|default=""}</td>
</tr>
</tbody>
</table>
</div>
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无核实记录
</div>
</div>
{/if}
</div>
</div>
<div class="layui-row">
反馈人信息:{$vo.contact_name|default="未填写名称"}
联系方式:{$vo.contact_phone|default="未填写联系方式"}
联系地址:{$vo.contact_address|default="未填写地址"}
</div>
<div class="layui-row">
工单类型:{$vo.type_name|default=""}
</div>
<div class="layui-row">
工单地址:{$vo.ticket_address|default=""}
</div>
<div class="layui-row">
工单内容:{$vo.content|default=""}
</div>
<div class="layui-row">
工单图片:
<div>
{foreach $vo.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
<div class="layui-tab-item">
<div class="layui-card">
<div class="layui-card-header">工单维修情况</div>
{if $vo.repair}
<div class="layui-card-body">
{foreach $vo.repair as $repair}
<table class="layui-table">
<tbody class="layui-table-body">
<tr>
<td style="width: 120px">提交时间</td>
<td>{$repair.create_at|default=""}</td>
</tr>
<tr>
<td>维修人</td>
<td>{$repair.staff.name|default=""}【联系方式:{$repair.staff.phone|default=""}</td>
</tr>
<tr>
<td>维修结果</td>
<td>{$repair.content|default=""}</td>
</tr>
<tr>
<td>图片</td>
<td>
<div>
{foreach $repair.imgs_arr as $img}
<img data-tips-image src="{$img}" alt="image" style="height: 100px;">
<span>&nbsp;</span>
{/foreach}
</div>
</td>
</tr>
<tr>
<td>预估工作量</td>
<td>{$verify.work_days|default=""}</td>
</tr>
</tbody>
</table>
{/foreach}
</div>
{else /}
<div class="layui-card-body">
<div class="layui-row">
暂无维修记录
</div>
</div>
{/if}
</div>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">工单流转详情</div>
<div class="layui-card-body">
<table id="replyTable" class="layui-table">
<thead>
<tr>
<th lay-data='{field: "username", width: "120px"}'>工单处理人</th>
<th lay-data='{field: "type_name", width: "120px"}'>处理类型</th>
<th lay-data='{field: "create_at", width: "180px"}'>工单处理时间</th>
<th lay-data='{field: "content", minWidth: "200px"}'>处理内容</th>
</tr>
</thead>
<tbody>
{notempty name='vo.reply'}
{foreach $vo.reply as $reply}
<tr>
<td>{$reply.username|default=""}</td>
<td>{$reply.type_name|default=""}</td>
<td>{$reply.create_at|default=""}</td>
<td>{$reply.content|default=""}</td>
</tr>
{/foreach}
{else}
<tr>
<td colspan="999" class="text-center">暂无工单流转记录</td>
</tr>
{/notempty}
</tbody>
</table>
</div>
</div>