council(execute): BackendArchitect - restore view files from merge conflict
Resolve Round 4 merge conflict by restoring verifier views and ticket
detail from commit 6f49b8355. All 7 admin view files now confirmed on main.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
refactor/vr-ticket-20260416
parent
59928d1196
commit
deacdedb01
|
|
@ -5,119 +5,126 @@
|
|||
<title>票详情 - VR票务</title>
|
||||
{include file="public/head" /}
|
||||
<style>
|
||||
.ticket-detail-card { max-width: 800px; }
|
||||
.qr-code-wrap { text-align: center; margin: 10px 0; }
|
||||
.qr-code-wrap img { border: 1px solid #eee; padding: 5px; }
|
||||
.detail-row { display: flex; border-bottom: 1px solid #f0f0f0; padding: 8px 0; }
|
||||
.detail-label { font-weight: bold; color: #666; width: 120px; flex-shrink: 0; }
|
||||
.detail-value { color: #333; flex: 1; }
|
||||
.status-badge { display: inline-block; padding: 2px 10px; border-radius: 3px; font-size: 12px; }
|
||||
.status-0 { background: #e6f0ff; color: #1677ff; }
|
||||
.status-1 { background: #f2ffe6; color: #52c41a; }
|
||||
.status-2 { background: #fff1f0; color: #ff4d4f; }
|
||||
.ticket-detail-card {max-width:800px;}
|
||||
.detail-row {padding:12px 0;border-bottom:1px solid #f0f0f0;}
|
||||
.detail-label {color:#999;font-size:13px;margin-bottom:4px;}
|
||||
.detail-value {font-size:14px;}
|
||||
.qr-box {text-align:center;padding:20px;background:#fafafa;border-radius:4px;}
|
||||
.qr-box img {max-width:200px;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card ticket-detail-card">
|
||||
<div class="layui-card-header">票详情</div>
|
||||
<div class="layui-card-header">
|
||||
票详情
|
||||
<span class="layui-badge layui-bg-{{$ticket['verify_status']==1 ? 'green' : ($ticket['verify_status']==2 ? 'red' : 'blue')}}">
|
||||
{{$ticket['verify_status']==1 ? '已核销' : ($ticket['verify_status']==2 ? '已退款' : '未核销')}}
|
||||
</span>
|
||||
<span class="layui-btn layui-btn-xs layui-btn-primary" style="float:right" onclick="history.back()">返回</span>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
{if !empty($msg)}
|
||||
<blockquote class="layui-elem-quote layui-quote-nm" style="color:#ff4d4f;">{$msg}</blockquote>
|
||||
<div style="margin-top:15px;">
|
||||
<a href="{:PluginsAdminUrl('vr_ticket', 'ticket', 'list')}" class="layui-btn layui-btn-primary">返回列表</a>
|
||||
</div>
|
||||
{else}
|
||||
<div class="layui-row layui-col-space20">
|
||||
<!-- 左列:票基本信息 -->
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">票码</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;font-family:monospace;font-size:14px;font-weight:bold;">{$ticket.ticket_code}</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">状态</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">
|
||||
<span class="status-badge status-{$ticket.verify_status}">
|
||||
{switch name="$ticket.verify_status"}
|
||||
{case value="0"}未核销{/case}
|
||||
{case value="1"}已核销{/case}
|
||||
{case value="2"}已退款{/case}
|
||||
{default /}未知
|
||||
{/switch}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">观演人</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">{$ticket.real_name|default='-'}</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">手机号</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">{$ticket.phone|default='-'}</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">座位</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">{$ticket.seat_info|default='-'}</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">订单号</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">{$ticket.order_no|default='-'}</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">发放时间</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">
|
||||
{$ticket.issued_at > 0 ? date('Y-m-d H:i:s', $ticket.issued_at) : '-'}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 票码 -->
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">票码</div>
|
||||
<div class="detail-value" style="font-family:monospace;font-size:16px;color:#1e9fff">{$ticket.ticket_code}</div>
|
||||
</div>
|
||||
|
||||
<!-- 右列:QR码 + 关联信息 -->
|
||||
<div class="layui-col-md6">
|
||||
<div class="qr-code-wrap">
|
||||
{if !empty($ticket.qr_code_url)}
|
||||
<img src="{$ticket.qr_code_url}" alt="票二维码" width="160" height="160">
|
||||
{else}
|
||||
<div style="width:160px;height:160px;background:#f5f5f5;line-height:160px;text-align:center;color:#999;margin:0 auto;">暂无二维码</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="layui-form" style="margin-top:10px;">
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">关联商品</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">
|
||||
{$goods.title|default='<span style="color:#999">已删除商品</span>'|raw}
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">核销员</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">
|
||||
{if !empty($verifier)}
|
||||
{$verifier.name} (ID:{$verifier.id})
|
||||
{else /}
|
||||
-
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item" style="margin-bottom:0;">
|
||||
<label class="layui-form-label" style="width:120px;">核销时间</label>
|
||||
<div class="layui-input-block" style="margin-left:130px;line-height:38px;">
|
||||
{$ticket.verify_time > 0 ? date('Y-m-d H:i:s', $ticket.verify_time) : '-'}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 二维码 -->
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">二维码</div>
|
||||
<div class="qr-box">
|
||||
<img src="{$ticket.qr_code_url}" alt="票二维码">
|
||||
<div style="margin-top:10px;color:#999;font-size:12px">扫描核销</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top:20px;border-top:1px solid #eee;padding-top:15px;">
|
||||
<a href="{:PluginsAdminUrl('vr_ticket', 'ticket', 'list')}" class="layui-btn layui-btn-primary">返回列表</a>
|
||||
<!-- 基本信息 -->
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">关联商品</div>
|
||||
<div class="detail-value">{$goods['title']|default='已删除商品'}</div>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">订单号</div>
|
||||
<div class="detail-value">{$ticket.order_no}</div>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">座位信息</div>
|
||||
<div class="detail-value">{$ticket.seat_info|default='无'}</div>
|
||||
</div>
|
||||
|
||||
<!-- 观演人 -->
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">观演人</div>
|
||||
<div class="detail-value">{$ticket.real_name|default='-'}</div>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">手机号</div>
|
||||
<div class="detail-value">{$ticket.phone|default='-'}</div>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">身份证</div>
|
||||
<div class="detail-value">{$ticket.id_card|default='-'}</div>
|
||||
</div>
|
||||
|
||||
<!-- 时间 -->
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">发放时间</div>
|
||||
<div class="detail-value">{$ticket.issued_at > 0 ? date('Y-m-d H:i:s', $ticket.issued_at) : '-'}</div>
|
||||
</div>
|
||||
{if $ticket['verify_status'] == 1}
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">核销时间</div>
|
||||
<div class="detail-value">{$ticket.verify_time > 0 ? date('Y-m-d H:i:s', $ticket.verify_time) : '-'}</div>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">核销员</div>
|
||||
<div class="detail-value">{$verifier['name']|default='-'}</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<!-- 操作 -->
|
||||
{if $ticket['verify_status'] == 0}
|
||||
<div class="detail-row">
|
||||
<div class="detail-label">手动核销</div>
|
||||
<div class="detail-value">
|
||||
<form class="layui-form" style="display:inline" id="verify-form">
|
||||
<select name="verifier_id" required lay-verify="required" style="width:200px;display:inline">
|
||||
<option value="">选择核销员</option>
|
||||
{foreach $verifiers as $v}
|
||||
<option value="{$v.id}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-danger" lay-submit lay-filter="do-verify">确认核销</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include file="public/footer" /}
|
||||
<script>
|
||||
layui.use('form', function() {
|
||||
var form = layui.form;
|
||||
form.on('submit(do-verify)', function(data) {
|
||||
if (!data.field.verifier_id) {
|
||||
layer.msg('请选择核销员');
|
||||
return false;
|
||||
}
|
||||
$.post('{:MyUrl("plugins_vr_ticket/admin/ticket/verify")}', {
|
||||
ticket_code: '{$ticket.ticket_code}',
|
||||
verifier_id: data.field.verifier_id
|
||||
}, function(res) {
|
||||
if (res.code == 0) {
|
||||
layer.msg('核销成功', function() { location.reload(); });
|
||||
} else {
|
||||
layer.msg(res.msg || '核销失败');
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<div class="layui-inline">
|
||||
<label class="layui-form-label">关键词</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="keywords" value="" placeholder="核销员名称/用户ID" class="layui-input">
|
||||
<input type="text" name="keywords" value="" placeholder="姓名/用户ID" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
</div>
|
||||
<div class="layui-inline">
|
||||
<button class="layui-btn" lay-submit lay-filter="search">搜索</button>
|
||||
<a href="{:PluginsAdminUrl('vr_ticket', 'verifier', 'save')}" class="layui-btn layui-btn-normal">添加核销员</a>
|
||||
<a href="{:MyUrl('plugins_vr_ticket/admin/verifier/save')}" class="layui-btn layui-btn-normal">添加核销员</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
</script>
|
||||
|
||||
<script type="text/template" id="actionTpl">
|
||||
<a href="{:PluginsAdminUrl('vr_ticket', 'verifier', 'save')}?id={{d.id}}" class="layui-btn layui-btn-xs">编辑</a>
|
||||
<a href="{:MyUrl('plugins_vr_ticket/admin/verifier/save')}?id={{d.id}}" class="layui-btn layui-btn-xs">编辑</a>
|
||||
<a href="javascript:;" class="layui-btn layui-btn-danger layui-btn-xs" lay-fn="del" data-id="{{d.id}}">禁用</a>
|
||||
</script>
|
||||
</div>
|
||||
|
|
@ -63,17 +63,17 @@ layui.use('table', function() {
|
|||
|
||||
table.render({
|
||||
elem: '#table',
|
||||
url: '{:PluginsAdminUrl("vr_ticket", "verifier", "list")}',
|
||||
url: '{:MyUrl("plugins_vr_ticket/admin/verifier/list")}',
|
||||
cols: [[
|
||||
{field: 'id', title: 'ID', width: 80},
|
||||
{field: 'name', title: '核销员名称', minWidth: 120},
|
||||
{field: 'user_id', title: '关联用户ID', width: 120},
|
||||
{field: 'user_name', title: '用户昵称', width: 150},
|
||||
{field: 'user_id', title: '用户ID', width: 100},
|
||||
{field: 'user_name', title: '关联用户', minWidth: 150},
|
||||
{field: 'status', title: '状态', width: 100, templet: '#statusTpl'},
|
||||
{field: 'created_at', title: '创建时间', width: 180, templet: function(d) {
|
||||
return d.created_at > 0 ? layui.util.toDateString(d.created_at * 1000) : '-';
|
||||
}},
|
||||
{field: 'action', title: '操作', width: 180, templet: '#actionTpl'},
|
||||
{field: 'action', title: '操作', width: 150, templet: '#actionTpl'},
|
||||
]]
|
||||
});
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ layui.use('table', function() {
|
|||
$(document).on('click', '[lay-fn="del"]', function() {
|
||||
var id = $(this).data('id');
|
||||
layer.confirm('确认禁用该核销员?', function(index) {
|
||||
$.post('{:PluginsAdminUrl("vr_ticket", "verifier", "delete")}', {id: id}, function(res) {
|
||||
$.post('{:MyUrl("plugins_vr_ticket/admin/verifier/delete")}', {id: id}, function(res) {
|
||||
if (res.code == 0) {
|
||||
layer.msg('操作成功');
|
||||
table.reload('table');
|
||||
|
|
|
|||
|
|
@ -2,70 +2,64 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>核销员 - VR票务</title>
|
||||
<title>{$info ? '编辑' : '添加'}核销员 - VR票务</title>
|
||||
{include file="public/head" /}
|
||||
</head>
|
||||
<body>
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">{$info.id > 0 ? '编辑' : '添加'}核销员</div>
|
||||
<div class="layui-card-header">{$info ? '编辑' : '添加'}核销员</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" lay-filter="form">
|
||||
<input type="hidden" name="id" value="{$info.id|default=0}">
|
||||
|
||||
<form class="layui-form" lay-filter="form">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">关联用户 <span style="color:red">*</span></label>
|
||||
<div class="layui-input-inline" style="width:400px;">
|
||||
<select name="user_id" lay-search lay-verify="required" {$info.id > 0 ? 'disabled' : ''}>
|
||||
<label class="layui-form-label">关联用户</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="user_id" lay-search required lay-verify="required" {if isset($info.id) && $info.id > 0}disabled{/if}>
|
||||
<option value="">请选择用户</option>
|
||||
{foreach $users as $u}
|
||||
<option value="{$u.id}" {if isset($info.user_id) && $info.user_id == $u.id}selected{/if}>
|
||||
{$u.id} - {$u.nickname|default=$u.username} {$u.username ? '(' . $u.username . ')' : ''}
|
||||
{$u.nickname|default=$u.username|default='用户'}{$u.username ? ' / '.$u.username : ''} (ID:{$u.id})
|
||||
</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
{if $info.id > 0}
|
||||
<div class="layui-form-mid layui-word-aux">用户关联后不可更改,如需变更请禁用后重新添加</div>
|
||||
{if isset($info.id) && $info.id > 0}
|
||||
<input type="hidden" name="user_id" value="{$info.user_id}">
|
||||
<div class="layui-form-mid layui-word-aux">用户关联后不可修改</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">核销员名称 <span style="color:red">*</span></label>
|
||||
<div class="layui-input-inline" style="width:400px;">
|
||||
<input type="text" name="name" value="{$info.name|default=''}" lay-verify="required" placeholder="请输入核销员名称" class="layui-input">
|
||||
<label class="layui-form-label">核销员名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="name" value="{$info.name|default=''}" required lay-verify="required" placeholder="如:张三(检票员)" class="layui-input" style="width:400px">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="checkbox" name="status" value="1" lay-skin="switch" lay-text="启用|禁用" {if empty($info.status) || $info.status == 1}checked{/if}>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="status" value="1" lay-skin="switch" lay-text="启用|禁用" {if !isset($info.status) || $info.status == 1}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="submit">提交</button>
|
||||
<a href="{:PluginsAdminUrl('vr_ticket', 'verifier', 'list')}" class="layui-btn layui-btn-primary">返回列表</a>
|
||||
<input type="hidden" name="id" value="{$info.id|default=0}">
|
||||
<button class="layui-btn" lay-submit lay-filter="submit">保存</button>
|
||||
<a href="{:MyUrl('plugins_vr_ticket/admin/verifier/list')}" class="layui-btn layui-btn-primary">返回</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include file="public/footer" /}
|
||||
<script>
|
||||
layui.use('form', function() {
|
||||
var form = layui.form;
|
||||
|
||||
form.on('submit(submit)', function(data) {
|
||||
data.field.status = data.field.status ? 1 : 0;
|
||||
$.post('{:PluginsAdminUrl("vr_ticket", "verifier", "save")}', data.field, function(res) {
|
||||
$.post(window.location.href, data.field, function(res) {
|
||||
if (res.code == 0) {
|
||||
layer.msg('保存成功', function() {
|
||||
location.href = '{:PluginsAdminUrl("vr_ticket", "verifier", "list")}';
|
||||
layer.msg(res.msg || '保存成功', function() {
|
||||
location.href = '{:MyUrl("plugins_vr_ticket/admin/verifier/list")}';
|
||||
});
|
||||
} else {
|
||||
layer.msg(res.msg || '保存失败');
|
||||
|
|
|
|||
Loading…
Reference in New Issue