diff --git a/shopxo/app/plugins/vr_ticket/Hook.php b/shopxo/app/plugins/vr_ticket/Hook.php index bded8c0..7ada838 100644 --- a/shopxo/app/plugins/vr_ticket/Hook.php +++ b/shopxo/app/plugins/vr_ticket/Hook.php @@ -68,16 +68,7 @@ class Hook 'url' => PluginsAdminUrl('vr_ticket', 'admin', 'VenueList'), 'power' => 'vr_ticket-venueList', ], - [ - 'id' => 'plugins-vr_ticket-seat', - 'name' => '座位模板', - 'title' => '座位模板', - 'is_show' => 1, - 'control' => 'admin', - 'action' => 'SeatTemplateList', - 'url' => PluginsAdminUrl('vr_ticket', 'admin', 'SeatTemplateList'), - 'power' => 'vr_ticket-seatTemplateList', - ], + [ 'id' => 'plugins-vr_ticket-ticket', 'name' => '电子票', diff --git a/shopxo/app/plugins/vr_ticket/admin/Admin.php b/shopxo/app/plugins/vr_ticket/admin/Admin.php index 6b2c97a..70e4e8b 100644 --- a/shopxo/app/plugins/vr_ticket/admin/Admin.php +++ b/shopxo/app/plugins/vr_ticket/admin/Admin.php @@ -110,200 +110,6 @@ class Admin extends Common } - // ============================================================ - // 座位模板(SeatTemplate) - // 视图: admin/view/seat_template/{action}.html - // ============================================================ - - /** - * 座位模板列表 - * URL: /plugins/vr_ticket/admin/seatTemplateList - * → PluginsService ucfirst('admin')=Admin + ucfirst('seatTemplateList')=SeatTemplateList - */ - public function SeatTemplateList() - { - $where = []; - - $name = input('name', '', null); - if ($name !== '') { - $where[] = ['name', 'like', "%{$name}%"]; - } - - $status = input('status', '', null); - if ($status !== '' && $status !== null) { - $where[] = ['status', '=', intval($status)]; - } - - $list = \think\facade\Db::name('vr_seat_templates') - ->where($where) - ->order('id', 'desc') - ->paginate(20); - $list_data = $list->toArray(); - - // 关联分类名 - $category_ids = array_filter(array_column($list_data['data'], 'category_id')); - if (!empty($category_ids)) { - $categories = \think\facade\Db::name('GoodsCategory') - ->where('id', 'in', $category_ids) - ->column('name', 'id'); - foreach ($list_data['data'] as &$item) { - $item['category_name'] = $categories[$item['category_id']] ?? '未知分类'; - $item['seat_count'] = $this->countSeats($item['seat_map']); - } - unset($item); - } - - // Leading / = ThinkPHP absolute path resolved from app/admin/view/default/ - // Files are at: app/admin/view/default/plugins/view/vr_ticket/admin/view/seat_template/list.html - return MyView('../../../plugins/vr_ticket/view/admin/seat_template/list', [ - 'list' => $list_data['data'], - 'page' => $list->render() ?: '', - 'count' => $list_data['total'], - ]); - } - - /** - * 添加/编辑座位模板 - */ - public function SeatTemplateSave() - { - $id = input('id', 0, 'intval'); - - if ((request()->isAjax() && request()->isPost())) { - $data = [ - 'name' => input('name', '', null, 'trim'), - 'category_id' => input('category_id', 0, 'intval'), - 'seat_map' => input('seat_map', '', null, 'trim'), - 'spec_base_id_map' => input('spec_base_id_map', '', null, 'trim'), - 'status' => input('status', 1, 'intval'), - 'upd_time' => time(), - ]; - - if (empty($data['name'])) { - return DataReturn('模板名称不能为空', -1); - } - if (empty($data['category_id'])) { - return DataReturn('请选择绑定的分类', -1); - } - - // 验证 seat_map 为合法 JSON - $seat_map = json_decode($data['seat_map'], true); - if (empty($seat_map) && $data['seat_map'] !== '[]' && $data['seat_map'] !== '{}') { - return DataReturn('座位地图JSON格式错误', -1); - } - - if ($id > 0) { - \think\facade\Db::name('vr_seat_templates')->where('id', $id)->update($data); - return DataReturn('更新成功', 0); - } else { - $data['add_time'] = time(); - $data['upd_time'] = time(); - \think\facade\Db::name('vr_seat_templates')->insert($data); - return DataReturn('添加成功', 0); - } - } - - // 编辑时加载数据 - $info = []; - if ($id > 0) { - $info = \think\facade\Db::name('vr_seat_templates')->find($id); - } - - // 加载分类列表(用于下拉选择) - $categories = \think\facade\Db::name('GoodsCategory') - ->where('is_enable', 1) - ->order('id', 'asc') - ->select(); - - return MyView('../../../plugins/vr_ticket/view/admin/seat_template/save', [ - 'info' => $info, - 'categories' => $categories, - ]); - } - - /** - * 删除座位模板(软删除) - */ - public function SeatTemplateDelete() - { - if (!(request()->isAjax() && request()->isPost())) { - return DataReturn('非法请求', -1); - } - - $id = input('id', 0, 'intval'); - if ($id <= 0) { - return DataReturn('参数错误', -1); - } - - $hardDelete = input('hard_delete', 0, 'intval'); - $template = \think\facade\Db::name('vr_seat_templates')->where('id', $id)->find(); - - if (empty($template)) { - return DataReturn('记录不存在', -1); - } - - if ($hardDelete) { - // 检查是否有关联商品(ShopXO 使用 is_delete_time 做软删除判断) - $goods = \think\facade\Db::name('Goods') - ->where('vr_goods_config', 'like', '%"template_id":' . $id . '%') - ->where('is_delete_time', 0) - ->find(); - \think\facade\Db::name('vr_seat_templates')->where('id', $id)->delete(); - \app\plugins\vr_ticket\service\AuditService::log( - \app\plugins\vr_ticket\service\AuditService::ACTION_DELETE_TEMPLATE, - \app\plugins\vr_ticket\service\AuditService::TARGET_TEMPLATE, - $id, - ['name' => $template['name'], 'has_goods' => !empty($goods)], - "模板: {$template['name']}" - ); - return DataReturn('删除成功', 0, ['has_goods' => !empty($goods)]); - } - - // 软删除(禁用) - \think\facade\Db::name('vr_seat_templates') - ->where('id', $id) - ->update(['status' => 0, 'upd_time' => time()]); - - - \app\plugins\vr_ticket\service\AuditService::log( - \app\plugins\vr_ticket\service\AuditService::ACTION_DISABLE_TEMPLATE, - \app\plugins\vr_ticket\service\AuditService::TARGET_TEMPLATE, - $id, - ['before_status' => $template['status'] ?? 1], - $template ? "模板: {$template['name']}" : "ID:{$id}" - ); - - return DataReturn('已禁用', 0); - } - - public function SeatTemplateEnable() - { - if (!(request()->isAjax() && request()->isPost())) { - return DataReturn('非法请求', -1); - } - - $id = input('id', 0, 'intval'); - if ($id <= 0) { - return DataReturn('参数错误', -1); - } - - \think\facade\Db::name('vr_seat_templates') - ->where('id', $id) - ->update(['status' => 1, 'upd_time' => time()]); - - \think\facade\Db::name('vr_seat_templates') - ->where('id', $id) - ->update(['status' => 1, 'upd_time' => time()]); - \app\plugins\vr_ticket\service\AuditService::log( - \app\plugins\vr_ticket\service\AuditService::ACTION_ENABLE_TEMPLATE, - \app\plugins\vr_ticket\service\AuditService::TARGET_TEMPLATE, - $id, - ['after_status' => 1], - "模板ID:{$id}" - ); - return DataReturn('已启用', 0); - } - // ============================================================ // 电子票(Ticket) // 视图: admin/view/ticket/{action}.html diff --git a/shopxo/app/plugins/vr_ticket/view/admin/seat_template/list.html b/shopxo/app/plugins/vr_ticket/view/admin/seat_template/list.html deleted file mode 100644 index a102645..0000000 --- a/shopxo/app/plugins/vr_ticket/view/admin/seat_template/list.html +++ /dev/null @@ -1,107 +0,0 @@ -{{:ModuleInclude('public/header')}} - -
-
- - 返回 - - 座位模板 -
- - -
-
-
-
- -
-
- -
- - - 添加模板 - -
-
- - - - - - - - - - - - - - - {{if !empty($list)}} - {{foreach $list as $item}} - - - - - - - - - {{/foreach}} - {{else}} - - - - {{/if}} - -
ID模板名称座位数状态添加时间操作
{{$item.id}}{{$item.name}}{{$item.seat_count|default=0}} - {{if $item.status == 1}} - 启用 - {{else}} - 禁用 - {{/if}} - {{if !empty($item.created_at)}}{{date('Y-m-d H:i', $item.created_at)}}{{/if}} - - 编辑 - - -
暂无数据
- - - {{if !empty($page)}}{{$page|raw}}{{/if}} -
-
- - - -{{:ModuleInclude('public/footer')}} \ No newline at end of file diff --git a/shopxo/app/plugins/vr_ticket/view/admin/seat_template/save.html b/shopxo/app/plugins/vr_ticket/view/admin/seat_template/save.html deleted file mode 100644 index e8eedbf..0000000 --- a/shopxo/app/plugins/vr_ticket/view/admin/seat_template/save.html +++ /dev/null @@ -1,113 +0,0 @@ -{{:ModuleInclude('public/header')}} - - - -
-
- - 返回 - - {{if !empty($info)}}编辑模板{{else}}添加座位模板{{/if}} -
- -
-
- {{if !empty($info)}} - - {{/if}} - -
- - -
- -
- - -
- -
- - -
- -
- - -
- 请填写符合规范的 JSON 格式座位数据。编辑模式下此字段将更新。 -
-
- -
- -
-
-
-
- -{{:ModuleInclude('public/footer')}} \ No newline at end of file