浏览代码

后台增加培训意愿

linwu 2 年之前
父节点
当前提交
7e875b9f22

+ 123 - 0
app/admin/controller/Train.php

@@ -0,0 +1,123 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\BaseController;
+use app\common\model\Train as TrainModel;
+
+class Train extends BaseController
+{
+    public function index()
+    {
+        return view('train/index');
+    }
+
+    public function form()
+    {
+        $id   = input('id/d, 0');
+        $info = TrainModel::findOrEmpty($id);
+        return view('train/form', [
+            'info' => $info,
+        ]);
+    }
+
+    public function list()
+    {
+        $limit = input('limit');
+        $page  = input('page');
+
+        $where = [];
+        $title = input('title', '');
+        if (!empty($title)) {
+            $where[] = ['title', 'like', "%{$title}%"];
+        }
+        $contact = input('contact', '');
+        if (!empty($contact)) {
+            $where[] = ['contact|mobile', 'like', "%{$contact}%"];
+        }
+        $status = input('status', 0);
+        if (!empty($status)) {
+            $where[] = ['status', '=', $status];
+        }
+
+        $list  = TrainModel::order(['priority' => 'desc', 'id' => 'desc'])->where($where)->limit($limit)->page($page)->select()->append(['status_text']);
+        $count = TrainModel::where($where)->count();
+        if ($count == 0) {
+            exit(json_encode([
+                'code' => 1,
+                'msg'  => "未查询到数据",
+            ]));
+        }
+        exit(json_encode([
+            'code'  => 0,
+            'msg'   => "",
+            'count' => $count,
+            'data'  => $list,
+        ]));
+    }
+
+    public function field()
+    {
+        $id   = input('id/d');
+        $info = TrainModel::find($id);
+        if ($info == null) {
+            exit(json_encode([
+                'code' => 1,
+                'msg'  => "数据不存在",
+            ]));
+        } else {
+            $info->save([
+                input('field/s') => input('value/s'),
+            ]);
+        }
+        exit(json_encode([
+            'code' => 0,
+        ]));
+    }
+
+    public function edit()
+    {
+        $id = input('id/d');
+        if (empty($id)) {
+            TrainModel::create([
+                'title'       => input('title/s'),
+                'contact'     => input('contact/s'),
+                'mobile'      => input('mobile/s'),
+                'address'     => input('address/s'),
+                'status'      => input('status/d') == 1 ? 1 : 2,
+                'priority'    => input('priority/d'),
+                'create_time' => time(),
+            ]);
+        } else {
+            $info = TrainModel::find($id);
+            $info->save([
+                'title'    => input('title/s'),
+                'contact'  => input('contact/s'),
+                'mobile'   => input('mobile/s'),
+                'address'  => input('address/s'),
+                'status'   => input('status/d') == 1 ? 1 : 2,
+                'priority' => input('priority/d'),
+            ]);
+        }
+        exit(json_encode([
+            'code' => 0,
+        ]));
+    }
+
+    public function del()
+    {
+        $id     = input('id/d');
+        $info   = TrainModel::where('id', $id)->select();
+        $result = $info->delete();
+        if ($result) {
+            exit(json_encode([
+                'code' => 0,
+                'msg'  => "",
+            ]));
+        }
+        exit(json_encode([
+            'code' => 1,
+            'msg'  => "删除失败,请稍后重试",
+        ]));
+    }
+}

+ 102 - 0
app/admin/controller/Trainjoin.php

@@ -0,0 +1,102 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\BaseController;
+use app\common\model\TrainJoin as TrainJoinModel;
+
+class Trainjoin extends BaseController
+{
+    public function index()
+    {
+        return view('trainjoin/index');
+    }
+
+    public function list()
+    {
+        $limit = input('limit');
+        $page  = input('page');
+
+        $where    = [];
+        $keywords = input('keywords', '');
+        if (!empty($keywords)) {
+            $where[] = ['t.title|u.nickname|u.mobile', 'like', "%{$keywords}%"];
+        }
+        $status = input('status', 0);
+        if (!empty($status)) {
+            $where[] = ['tj.status', '=', $status];
+        }
+
+        $list  = TrainJoinModel::alias('tj')
+            ->field(['tj.*', 't.title', 'u.nickname', 'u.mobile'])
+            ->leftJoin('user u', 'u.id = tj.user_id')
+            ->leftJoin('train t', 't.id = tj.train_id')
+            ->where($where)
+            ->limit($limit)->page($page)->select()->append(['status_text']);
+        $count = TrainJoinModel::alias('tj')
+            ->field(['tj.*', 't.title', 'u.nickname', 'u.mobile'])
+            ->leftJoin('user u', 'u.id = tj.user_id')
+            ->leftJoin('train t', 't.id = tj.train_id')
+            ->where($where)->count();
+        if ($count == 0) {
+            exit(json_encode([
+                'code' => 1,
+                'msg'  => "未查询到数据",
+            ]));
+        }
+        exit(json_encode([
+            'code'  => 0,
+            'msg'   => "",
+            'count' => $count,
+            'data'  => $list,
+        ]));
+    }
+
+    public function field()
+    {
+        $id   = input('id/d');
+        $info = TrainJoinModel::find($id);
+        if ($info == null) {
+            exit(json_encode([
+                'code' => 1,
+                'msg'  => "数据不存在",
+            ]));
+        } else {
+            $info->save([
+                input('field/s') => input('value/s'),
+            ]);
+        }
+        exit(json_encode([
+            'code' => 0,
+        ]));
+    }
+
+    public function del()
+    {
+        $id     = input('id/d');
+        $info   = TrainJoinModel::where('id', $id)->select();
+        $result = $info->delete();
+        if ($result) {
+            exit(json_encode([
+                'code' => 0,
+                'msg'  => "",
+            ]));
+        }
+        exit(json_encode([
+            'code' => 1,
+            'msg'  => "删除失败,请稍后重试",
+        ]));
+    }
+
+    public function status()
+    {
+        $idarr  = input('idarr/a');
+        $status = input('status/d');
+        TrainJoinModel::whereIn('id', $idarr)->update(['status' => $status]);
+
+        exit(json_encode([
+            'code' => 0,
+            'msg'  => "",
+        ]));
+    }
+}

+ 94 - 0
app/admin/view/train/form.html

@@ -0,0 +1,94 @@
+<div class="layui-fluid">
+	<div class="layui-row layui-col-space15">
+		<div class="layui-col-md12">
+			<div class="layui-card">
+				<div class="layui-card-header">分类信息</div>
+				<div class="layui-card-body" pad15>
+
+					<div class="layui-form layui-form-pane" lay-filter="LAY-mall-cateform-edit">
+						<input type="hidden" name="id" value="{$info.id}">
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>标题</label>
+							<div class="layui-input-block">
+								<input type="text" name="title" value="{$info.title}" lay-verify="required" placeholder="请输入标题" autocomplete="off"
+								 class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>联系人</label>
+							<div class="layui-input-block">
+								<input type="text" name="contact" value="{$info.contact}" lay-verify="required" placeholder="请输入联系人" autocomplete="off"
+									   class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>联系电话</label>
+							<div class="layui-input-block">
+								<input type="text" name="mobile" value="{$info.mobile}" lay-verify="required" placeholder="请输入联系电话" autocomplete="off"
+									   class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>联系地址</label>
+							<div class="layui-input-block">
+								<input type="text" name="address" value="{$info.address}" lay-verify="required" placeholder="请输入联系地址" autocomplete="off"
+									   class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>排序</label>
+							<div class="layui-input-block">
+								<input type="text" name="priority" value="{$info.priority|default=0}" lay-verify="required" placeholder="请输入排序值(倒序,值越大越靠前)"
+								 autocomplete="off" class="layui-input">
+								<div class="layui-form-mid layui-word-aux">倒序,值越大越靠前</div>
+							</div>
+						</div>
+						<div class="layui-form-item" pane>
+							<label class="layui-form-label">状态</label>
+							<div class="layui-input-block">
+								<input type="checkbox" lay-filter="switch" name="status" {eq name="info.status|default=1" value="1" }checked{/eq}
+								 lay-skin="switch" lay-text="显示|隐藏" value="1" />
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<div class="layui-input-block">
+								<input type="button" lay-submit lay-filter="LAY-train-form-edit-submit" value="确认提交" class="layui-btn">
+							</div>
+						</div>
+					</div>
+
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script>
+	layui.config({
+		base: '/static/echoui/' //静态资源所在路径
+	}).extend({
+		index: 'lib/index' //主入口模块
+	}).use(['index', 'form', 'set', 'upload'], function() {
+		var $ = layui.$,
+			setter = layui.setter,
+			admin = layui.admin,
+			form = layui.form,
+			upload = layui.upload;
+		form.render();
+
+		form.on('submit(LAY-train-form-edit-submit)', function(obj) {
+			var index = parent.layer.getFrameIndex(window.name);
+			admin.req({
+				url: setter.baseAdminUrl + 'train/edit',
+				data: obj.field,
+				done: function(res) {
+					layer.msg("提交成功", {
+						icon: 1
+					});
+					parent.layui.table.reload('LAY-train-index-table'); //重载表格
+					parent.layer.close(index);
+				}
+			});
+		});
+	});
+</script>

+ 156 - 0
app/admin/view/train/index.html

@@ -0,0 +1,156 @@
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-form layui-form-pane layui-card-header layuiadmin-card-header-auto"
+             lay-filter="LAY-trainjoin-index-search">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">标题</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="title" placeholder="请输入标题" autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label">联系人</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="contact" placeholder="请输入联系人或联系电话" autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">全部状态</option>
+                            <option value="1">显示</option>
+                            <option value="2">隐藏</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <button class="layui-btn" lay-submit lay-filter="LAY-train-index-btn">
+                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
+                    </button>
+                </div>
+            </div>
+        </div>
+
+        <div class="layui-card-body">
+            <div style="padding-bottom: 10px;">
+                <button class="layui-btn layuiadmin-btn" data-type="add">添加</button>
+            </div>
+            <table id="LAY-train-index-table" lay-filter="LAY-train-index-table"></table>
+            <script type="text/html" id="setTpl">
+                <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i
+                        class="layui-icon layui-icon-edit"></i>编辑</a>
+                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i
+                        class="layui-icon layui-icon-delete"></i>删除</a>
+            </script>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.config({
+        base: '/static/echoui/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'form', 'set', 'table'], function () {
+        var $ = layui.$,
+            setter = layui.setter,
+            admin = layui.admin,
+            form = layui.form,
+            table = layui.table;
+        form.render();
+
+        table.render({
+            elem: '#LAY-train-index-table',
+            url: setter.baseAdminUrl + 'train/list',
+            cols: [
+                [
+                    {field: 'title', title: '标题', edit: 'text'},
+                    {field: 'contact', width: 120, title: '联系人', edit: 'text'},
+                    {field: 'mobile', width: 120, title: '联系电话', edit: 'text'},
+                    {field: 'address', title: '联系地址', edit: 'text'},
+                    {field: 'priority', width: 80, title: '排序', sort: true, edit: 'text'},
+                    {field: 'status_text', width: 80, title: '状态', minWidth: 80, align: 'center'},
+                    {title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#setTpl'}
+                ]
+            ],
+            page: true,
+            limit: 50,
+            cellMinWidth: 150,
+            text: '对不起,加载出现异常!'
+        });
+
+        //事件
+        var active = {
+            add: function () {
+                var index = layer.open({
+                    type: 2,
+                    title: '添加分类',
+                    content: 'form.html?id=0',
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        };
+
+        form.on('submit(LAY-train-index-btn)', function(data) {
+            table.reload('LAY-train-index-table', {
+                where: data.field,
+                page: {
+                    curr: 1
+                }
+            });
+        });
+
+        //监听单元格编辑
+        table.on('edit(LAY-train-index-table)', function (obj) {
+            var id = obj.data.id,
+                field = obj.field,
+                value = obj.value;
+            admin.req({
+                url: setter.baseAdminUrl + 'train/field',
+                data: {id: id, field: field, value: value},
+                done: function (res) {
+                    layer.msg('修改成功');
+                    layui.table.reload('LAY-train-index-table');
+                }
+            });
+        });
+
+        //监听工具条
+        table.on('tool(LAY-train-index-table)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除此分类吗?', function (index) {
+                    admin.req({
+                        url: setter.baseAdminUrl + 'train/del',
+                        data: {
+                            id: data.id
+                        },
+                        done: function (res) {
+                            obj.del();
+                            layer.msg('已删除');
+                        }
+                    });
+                    layer.close(index);
+                });
+            } else if (obj.event === 'edit') {
+                var index = layer.open({
+                    type: 2,
+                    title: '编辑分类',
+                    content: 'form.html?id=' + data.id,
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        });
+
+        $('.layui-btn.layuiadmin-btn').on('click', function () {
+            var type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+    });
+</script>

+ 94 - 0
app/admin/view/trainjoin/form.html

@@ -0,0 +1,94 @@
+<div class="layui-fluid">
+	<div class="layui-row layui-col-space15">
+		<div class="layui-col-md12">
+			<div class="layui-card">
+				<div class="layui-card-header">分类信息</div>
+				<div class="layui-card-body" pad15>
+
+					<div class="layui-form layui-form-pane" lay-filter="LAY-mall-cateform-edit">
+						<input type="hidden" name="id" value="{$info.id}">
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>标题</label>
+							<div class="layui-input-block">
+								<input type="text" name="title" value="{$info.title}" lay-verify="required" placeholder="请输入标题" autocomplete="off"
+								 class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>联系人</label>
+							<div class="layui-input-block">
+								<input type="text" name="contact" value="{$info.contact}" lay-verify="required" placeholder="请输入联系人" autocomplete="off"
+									   class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>联系电话</label>
+							<div class="layui-input-block">
+								<input type="text" name="mobile" value="{$info.mobile}" lay-verify="required" placeholder="请输入联系电话" autocomplete="off"
+									   class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>联系地址</label>
+							<div class="layui-input-block">
+								<input type="text" name="address" value="{$info.address}" lay-verify="required" placeholder="请输入联系地址" autocomplete="off"
+									   class="layui-input">
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<label class="layui-form-label"><span style="color:#f90c05;">*</span>排序</label>
+							<div class="layui-input-block">
+								<input type="text" name="priority" value="{$info.priority|default=0}" lay-verify="required" placeholder="请输入排序值(倒序,值越大越靠前)"
+								 autocomplete="off" class="layui-input">
+								<div class="layui-form-mid layui-word-aux">倒序,值越大越靠前</div>
+							</div>
+						</div>
+						<div class="layui-form-item" pane>
+							<label class="layui-form-label">状态</label>
+							<div class="layui-input-block">
+								<input type="checkbox" lay-filter="switch" name="status" {eq name="info.status|default=1" value="1" }checked{/eq}
+								 lay-skin="switch" lay-text="显示|隐藏" value="1" />
+							</div>
+						</div>
+						<div class="layui-form-item">
+							<div class="layui-input-block">
+								<input type="button" lay-submit lay-filter="LAY-train-form-edit-submit" value="确认提交" class="layui-btn">
+							</div>
+						</div>
+					</div>
+
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script>
+	layui.config({
+		base: '/static/echoui/' //静态资源所在路径
+	}).extend({
+		index: 'lib/index' //主入口模块
+	}).use(['index', 'form', 'set', 'upload'], function() {
+		var $ = layui.$,
+			setter = layui.setter,
+			admin = layui.admin,
+			form = layui.form,
+			upload = layui.upload;
+		form.render();
+
+		form.on('submit(LAY-train-form-edit-submit)', function(obj) {
+			var index = parent.layer.getFrameIndex(window.name);
+			admin.req({
+				url: setter.baseAdminUrl + 'train/edit',
+				data: obj.field,
+				done: function(res) {
+					layer.msg("提交成功", {
+						icon: 1
+					});
+					parent.layui.table.reload('LAY-train-index-table'); //重载表格
+					parent.layer.close(index);
+				}
+			});
+		});
+	});
+</script>

+ 189 - 0
app/admin/view/trainjoin/index.html

@@ -0,0 +1,189 @@
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-form layui-form-pane layui-card-header layuiadmin-card-header-auto"
+             lay-filter="LAY-trainjoin-index-search">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">关键字</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="keywords" placeholder="请输入" autocomplete="off" class="layui-input">
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">全部状态</option>
+                            <option value="1">未处理</option>
+                            <option value="2">已处理</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <button class="layui-btn" lay-submit lay-filter="LAY-trainjoin-index-btn">
+                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
+                    </button>
+                </div>
+            </div>
+        </div>
+        <div class="layui-card-body">
+            <div style="padding-bottom: 10px;">
+                <button class="layui-btn layuiadmin-btn" data-type="status1">设为未处理</button>
+                <button class="layui-btn layuiadmin-btn" data-type="status2">设为已处理</button>
+            </div>
+            <table id="LAY-trainjoin-index-table" lay-filter="LAY-trainjoin-index-table"></table>
+            <script type="text/html" id="setTpl">
+                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i
+                        class="layui-icon layui-icon-delete"></i>删除</a>
+            </script>
+        </div>
+    </div>
+</div>
+<script>
+    layui.config({
+        base: '/static/echoui/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'form', 'set', 'table'], function () {
+        var $ = layui.$,
+            setter = layui.setter,
+            admin = layui.admin,
+            form = layui.form,
+            table = layui.table;
+        form.render();
+
+        table.render({
+            elem: '#LAY-trainjoin-index-table',
+            url: setter.baseAdminUrl + 'trainjoin/list',
+            cols: [
+                [
+                    {type: 'checkbox', fixed: 'left'},
+                    {field: 'title', title: '标题', edit: 'text'},
+                    {field: 'nickname', title: '联系人', edit: 'text'},
+                    {field: 'mobile', title: '联系电话', edit: 'text'},
+                    {field: 'comment', title: '备注', edit: 'textarea'},
+                    {field: 'status_text', title: '状态', minWidth: 80, align: 'center'},
+                    {title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#setTpl'}
+                ]
+            ],
+            page: true,
+            limit: 50,
+            cellMinWidth: 150,
+            text: '对不起,加载出现异常!'
+        });
+
+        //事件
+        var active = {
+            status1: function () {
+                var checkStatus = table.checkStatus('LAY-trainjoin-index-table'),
+                    checkData = checkStatus.data; //得到选中的数据
+                if (checkData.length === 0) {
+                    return layer.msg('请选择数据');
+                }
+                var idarr = [];
+                for (var i = 0; i < checkData.length; i++) {
+                    idarr.push(checkData[i].id);
+                }
+
+                layer.confirm('确定设为未处理?', function (index) {
+                    admin.req({
+                        url: setter.baseAdminUrl + 'Trainjoin/status',
+                        data: {
+                            status: 1,
+                            idarr: idarr
+                        },
+                        done: function (res) {
+                            table.reload('LAY-trainjoin-index-table');
+                            layer.msg('已更改');
+                        }
+                    });
+                    layer.close(index);
+                });
+            },
+            status2: function () {
+                var checkStatus = table.checkStatus('LAY-trainjoin-index-table'),
+                    checkData = checkStatus.data; //得到选中的数据
+                if (checkData.length === 0) {
+                    return layer.msg('请选择数据');
+                }
+                var idarr = [];
+                for (var i = 0; i < checkData.length; i++) {
+                    idarr.push(checkData[i].id);
+                }
+
+                layer.confirm('确定设为已处理?', function (index) {
+                    admin.req({
+                        url: setter.baseAdminUrl + 'Trainjoin/status',
+                        data: {
+                            status: 2,
+                            idarr: idarr
+                        },
+                        done: function (res) {
+                            table.reload('LAY-trainjoin-index-table');
+                            layer.msg('已更改');
+                        }
+                    });
+                    layer.close(index);
+                });
+            }
+        };
+
+        form.on('submit(LAY-trainjoin-index-btn)', function(data) {
+            table.reload('LAY-trainjoin-index-table', {
+                where: data.field,
+                page: {
+                    curr: 1
+                }
+            });
+        });
+
+        //监听单元格编辑
+        table.on('edit(LAY-trainjoin-index-table)', function (obj) {
+            var id = obj.data.id,
+                field = obj.field,
+                value = obj.value;
+            admin.req({
+                url: setter.baseAdminUrl + 'trainjoin/field',
+                data: {id: id, field: field, value: value},
+                done: function (res) {
+                    layer.msg('修改成功');
+                    layui.table.reload('LAY-trainjoin-index-table');
+                }
+            });
+        });
+
+        //监听工具条
+        table.on('tool(LAY-trainjoin-index-table)', function (obj) {
+            var data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除此分类吗?', function (index) {
+                    admin.req({
+                        url: setter.baseAdminUrl + 'trainjoin/del',
+                        data: {
+                            id: data.id
+                        },
+                        done: function (res) {
+                            obj.del();
+                            layer.msg('已删除');
+                        }
+                    });
+                    layer.close(index);
+                });
+            } else if (obj.event === 'edit') {
+                var index = layer.open({
+                    type: 2,
+                    title: '编辑分类',
+                    content: 'form.html?id=' + data.id,
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        });
+
+        $('.layui-btn.layuiadmin-btn').on('click', function () {
+            var type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+    });
+</script>

+ 30 - 0
app/common/model/Train.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace app\common\model;
+
+use think\Model;
+
+class Train extends Model
+{
+    // 设置字段信息
+    protected $schema = [
+        'id'          => 'int',
+        'title'       => 'string',
+        'contact'     => 'string',
+        'mobile'      => 'string',
+        'address'     => 'string',
+        'create_time' => 'int',
+        'priority'    => 'int',
+    ];
+
+    // 设置字段自动转换类型
+    protected $type = [
+        'create_time' => 'timestamp:Y-m-d H:i',
+    ];
+
+    public function getStatusTextAttr($value, $data)
+    {
+        $status = [1 => '显示', 2 => '隐藏'];
+        return $status[$data['status']];
+    }
+}

+ 39 - 0
app/common/model/TrainJoin.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\common\model;
+
+use think\Model;
+
+class TrainJoin extends Model
+{
+    // 设置字段信息
+    protected $schema = [
+        'id'          => 'int',
+        'train_id'    => 'int',
+        'user_id'     => 'int',
+        'comment'     => 'string',
+        'create_time' => 'int',
+        'status'      => 'int',
+    ];
+
+    // 设置字段自动转换类型
+    protected $type = [
+        'create_time' => 'timestamp:Y-m-d H:i',
+    ];
+
+    public function user()
+    {
+        return $this->hasOne(User::class, 'id', 'user_id');
+    }
+
+    public function train()
+    {
+        return $this->hasOne(Train::class, 'id', 'train_id');
+    }
+
+    public function getStatusTextAttr($value, $data)
+    {
+        $status = [1 => '未处理', 2 => '已处理'];
+        return $status[$data['status']];
+    }
+}