linwu před 1 rokem
rodič
revize
75c29c6fb9
30 změnil soubory, kde provedl 1086 přidání a 10 odebrání
  1. 79 0
      app/admin/controller/Previous.php
  2. 77 0
      app/admin/controller/Reserved.php
  3. 2 2
      app/admin/middleware.php
  4. 158 0
      app/admin/view/previous/index.html
  5. 138 0
      app/admin/view/previous/previous_form.html
  6. 149 0
      app/admin/view/reserved/index.html
  7. 93 0
      app/admin/view/reserved/reserved_form.html
  8. 29 0
      app/common/model/PreviousModel.php
  9. 24 0
      app/common/model/ReservedModel.php
  10. 19 0
      app/common/validate/PreviousValidate.php
  11. 21 0
      app/common/validate/ReservedValidate.php
  12. 20 0
      app/home/common.php
  13. 13 1
      app/home/controller/Index.php
  14. 27 0
      app/home/controller/Previous.php
  15. 98 6
      app/home/view/index/index.html
  16. 90 0
      app/home/view/previous/index.html
  17. 1 1
      app/middleware.php
  18. 1 0
      public/static/common/js/layer/layer.js
  19. 1 0
      public/static/common/js/layer/mobile/layer.js
  20. 0 0
      public/static/common/js/layer/mobile/need/layer.css
  21. binární
      public/static/common/js/layer/skin/default/icon-ext.png
  22. binární
      public/static/common/js/layer/skin/default/icon.png
  23. 0 0
      public/static/common/js/layer/skin/default/layer.css
  24. binární
      public/static/common/js/layer/skin/default/loading-0.gif
  25. binární
      public/static/common/js/layer/skin/default/loading-1.gif
  26. binární
      public/static/common/js/layer/skin/default/loading-2.gif
  27. 46 0
      public/static/home/css/style.css
  28. binární
      public/static/home/images/index.jpg
  29. binární
      public/static/home/images/no_more.png
  30. binární
      public/static/home/images/qrcode_contact.png

+ 79 - 0
app/admin/controller/Previous.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\AdminBaseController;
+use app\common\model\PreviousModel;
+use app\common\validate\PreviousValidate;
+use think\exception\ValidateException;
+
+class Previous extends AdminBaseController
+{
+
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        return view('', [
+            'status_list' => PreviousModel::STATUS,
+            'month_list' => PreviousModel::MONTH,
+        ]);
+    }
+
+    public function listPrevious()
+    {
+        $map   = $this->dealEqualInput(['status','month']);
+        $list  = PreviousModel::where($map)
+            ->order(['priority' => 'desc','id'=>'desc'])
+            ->limit(input('limit'))
+            ->page(input('page'))
+            ->append(['status_text','month_text'])
+            ->select();
+        $count = PreviousModel::where($map)->count();
+        if ($count == 0) {
+            ajax_return(1, '未查询到数据');
+        }
+        list_return($list, $count);
+    }
+
+    public function delPrevious()
+    {
+        $id_arr = input('id_arr/a');
+        PreviousModel::destroy($id_arr);
+        ajax_return();
+    }
+
+    /**
+     * 编辑
+     */
+    public function previousForm()
+    {
+        $id      = input('id/d, 0');
+        $info = PreviousModel::find($id);
+
+        return view('', [
+            'info'     => $info,
+            'status_list' => PreviousModel::STATUS,
+            'month_list' => PreviousModel::MONTH,
+        ]);
+    }
+
+    public function editPrevious()
+    {
+        $data = input('post.');
+        try {
+            validate(PreviousValidate::class)->check($data);
+        } catch (ValidateException $e) {
+            ajax_return(1, $e->getError());
+        }
+
+        if (empty($data['id'])) {
+            PreviousModel::create($data);
+        } else {
+            PreviousModel::update($data, ['id' => $data['id']]);
+        }
+
+        ajax_return();
+    }
+}

+ 77 - 0
app/admin/controller/Reserved.php

@@ -0,0 +1,77 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\AdminBaseController;
+use app\common\model\ReservedModel;
+use app\common\validate\ReservedValidate;
+use think\exception\ValidateException;
+
+class Reserved extends AdminBaseController
+{
+
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        return view('', [
+            'status_list' => ReservedModel::STATUS,
+        ]);
+    }
+
+    public function listReserved()
+    {
+        $map   = $this->dealEqualInput(['status']);
+        $list  = ReservedModel::where($map)
+            ->order(['priority' => 'desc','id'=>'desc'])
+            ->limit(input('limit'))
+            ->page(input('page'))
+            ->append(['status_text'])
+            ->select();
+        $count = ReservedModel::where($map)->count();
+        if ($count == 0) {
+            ajax_return(1, '未查询到数据');
+        }
+        list_return($list, $count);
+    }
+
+    public function delReserved()
+    {
+        $id_arr = input('id_arr/a');
+        ReservedModel::destroy($id_arr);
+        ajax_return();
+    }
+
+    /**
+     * 编辑
+     */
+    public function reservedForm()
+    {
+        $id      = input('id/d, 0');
+        $info = ReservedModel::find($id);
+
+        return view('', [
+            'info'     => $info,
+            'status_list' => ReservedModel::STATUS,
+        ]);
+    }
+
+    public function editReserved()
+    {
+        $data = input('post.');
+        try {
+            validate(ReservedValidate::class)->check($data);
+        } catch (ValidateException $e) {
+            ajax_return(1, $e->getError());
+        }
+
+        if (empty($data['id'])) {
+            ReservedModel::create($data);
+        } else {
+            ReservedModel::update($data, ['id' => $data['id']]);
+        }
+
+        ajax_return();
+    }
+}

+ 2 - 2
app/admin/middleware.php

@@ -2,9 +2,9 @@
 // 全局中间件定义文件
 return [
     // 全局请求缓存
-    // \think\middleware\CheckRequestCache::class,
+//     \think\middleware\CheckRequestCache::class,
     // 多语言加载
     // \think\middleware\LoadLangPack::class,
     // Session初始化
-    // \think\middleware\SessionInit::class
+     \think\middleware\SessionInit::class
 ];

+ 158 - 0
app/admin/view/previous/index.html

@@ -0,0 +1,158 @@
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-form layui-form-pane  layui-card-header layuiadmin-card-header-auto">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">全部状态</option>
+                            {volist name="status_list" id="v"}
+                            <option value="{$key}">{$v}</option>
+                            {/volist}
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label">月份</label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">全部月份</option>
+                            {volist name="month_list" id="v"}
+                            <option value="{$key}">{$v}</option>
+                            {/volist}
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <button class="layui-btn" lay-submit lay-filter="{$lay_btn}">
+                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
+                    </button>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+            <button class="layui-btn layuiadmin-btn layui-btn-danger" data-type="del">删除</button>
+            <button class="layui-btn layuiadmin-btn" data-type="add">添加</button>
+        </div>
+
+        <div class="layui-card-body">
+            <table id="{$lay_table}" lay-filter="{$lay_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.use(['index', 'admin', 'form', 'table'], function () {
+        const $ = layui.$;
+        const admin = layui.admin;
+        const form = layui.form;
+        const table = layui.table;
+        form.render();
+
+        table.render({
+            elem: '#{$lay_table}',
+            url: "{:url('previous/listPrevious')}",
+            cols: [
+                [
+                    {type: 'checkbox', fixed: 'left'},
+                    {field: 'title', title: '标题'},
+                    {field: 'month_text', title: '月份', width: 80},
+                    {field: 'status_text', title: '状态', width: 80, align: 'center'},
+                    {field: 'priority', title: '排序', width: 80},
+                    {title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#setTpl'}
+                ]
+            ],
+            page: true,
+            limit: 50,
+            cellMinWidth: 150,
+            text: '对不起,加载出现异常!'
+        });
+
+        form.on('submit({$lay_btn})', function (data) {
+            table.reload('{$lay_table}', {
+                where: data.field,
+                page: {
+                    curr: 1
+                }
+            });
+        });
+
+        //事件
+        const active = {
+            del: function () {
+                const check_data = table.checkStatus('{$lay_table}').data; //得到选中的数据
+                if (check_data.length === 0) {
+                    return layer.msg('请选择数据');
+                }
+                const id_arr = [];
+                for (let i = 0; i < check_data.length; i++) {
+                    id_arr.push(check_data[i].id);
+                }
+                layer.confirm('确定删除吗?', function (index) {
+                    admin.req({
+                        url: "{:url('previous/delPrevious')}",
+                        data: {
+                            id_arr: id_arr
+                        },
+                        done: function (res) {
+                            table.reload('{$lay_table}');
+                        }
+                    });
+                    layer.close(index);
+                });
+            },
+            add: function () {
+                const index = layer.open({
+                    type: 2,
+                    title: '添加往期回顾',
+                    content: "{:url('previous/previousForm')}",
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        };
+
+        //监听工具条
+        table.on('tool({$lay_table})', function (obj) {
+            const data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除吗?', function (index) {
+                    admin.req({
+                        url: "{:url('previous/delPrevious')}",
+                        data: {
+                            id_arr: data.id
+                        },
+                        done: function (res) {
+                            layui.table.reload('{$lay_table}');
+                        }
+                    });
+                    layer.close(index);
+                });
+            } else if (obj.event === 'edit') {
+                const index = layer.open({
+                    type: 2,
+                    title: '编辑往期回顾',
+                    content: "{:url('previous/previousForm')}?id=" + data.id,
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        });
+
+        $('.layui-btn.layuiadmin-btn').on('click', function () {
+            const type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+    });
+</script>

+ 138 - 0
app/admin/view/previous/previous_form.html

@@ -0,0 +1,138 @@
+<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_table}">
+                        <input type="hidden" name="id" value="{:array_get($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="{:array_get($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">
+                                <select name="month" lay-verify="required">
+                                    {volist name="month_list" id="month"}
+                                    <option value="{$key}">{$month}</option>
+                                    {/volist}
+                                </select>
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label"><span style="color:#f90c05;">*</span>头图</label>
+                            <div class="layui-input-block">
+                                <div class="layui-upload">
+                                    <button type="button" class="layui-btn attachment-upload-images"
+                                            data-input="image" data-amount="1">上传图片
+                                    </button>
+                                    <div class="layui-inline layui-word-aux"> 最佳尺寸:896px*464px</div>
+                                    <div class="layui-upload-list echo-attachment-image-list" id="image">
+                                        {notempty name="info.image"}
+                                        <div>
+                                            <input type="hidden" name="image" value="{:array_get($info,'image')}">
+                                            <img src="{:array_get($info,'image')}">
+                                        </div>
+                                        {/notempty}
+                                    </div>
+                                </div>
+                            </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="{:array_get($info,'priority',255)}"
+                                       lay-verify="required|number" 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"><span style="color:#f90c05;">*</span>状态</label>
+                            <div class="layui-input-block">
+                                {volist name="status_list" id="v"}
+                                <input type="radio" name="status" value="{$key}" title="{$v}" {eq name=":array_get($info,'status',1)" value="$key" }checked{/eq}>
+                                {/volist}
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <div class="layui-input-block">
+                                <input type="button" lay-submit lay-filter="{$lay_btn}" value="确认提交" class="layui-btn">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['index', 'form', 'upload'], function () {
+        const $ = layui.$;
+        const admin = layui.admin;
+        const form = layui.form;
+        const upload = layui.upload;
+        form.render();
+
+        form.on('submit({$lay_btn})', function (obj) {
+            const index = parent.layer.getFrameIndex(window.name);
+            admin.req({
+                url: "{:url('previous/editPrevious')}",
+                type: 'post',
+                data: obj.field,
+                done: function (res) {
+                    layer.msg("提交成功", {
+                        icon: 1
+                    });
+                    parent.layui.table.reload('lay-previous-index-table'); //重载表格
+                    parent.layer.close(index);
+                }
+            });
+        });
+
+        $('.echo-attachment-image-list').on('click', '.attachment-del', function () {
+            $(this).parent().remove();
+        });
+
+        let upload_input = '';
+        let upload_amount = '';
+        upload.render({
+            elem: '.attachment-upload-images',
+            url: "{:url('upload/image')}",
+            accept: 'images',
+            exits: 'jpg|png|jpeg',
+            acceptMime: 'image/*',
+            size: 2048,
+            number: 1,
+            method: 'post',
+            before: function (obj) {
+                upload_input = $(this.item).data('input');
+                upload_amount = $(this.item).data('amount');
+                layer.load();
+            },
+            done: function (res, index, upload) {
+                layer.closeAll('loading');
+                let html = "";
+                if (upload_amount == 1) {
+                    html += '<div> <input type="hidden" name="' + upload_input + '" value="' + res.data.src + '"> ';
+                    html += '<img src="' + res.data.src + '"></div>';
+                    $("#" + upload_input).html(html);
+                } else {
+                    html += '<div> <input type="hidden" name="' + upload_input + '[]" value="' + res.data.src + '"> ';
+                    html += '<img src="' + res.data.src +
+                        '"> <button type="button" class="attachment-del layui-btn layui-btn-primary layui-btn-xs layui-btn-fluid">删除</button></div>';
+                    $("#" + upload_input).append(html);
+                }
+            },
+            error: function (index, upload) {
+                layer.closeAll('loading');
+            }
+        });
+    });
+</script>

+ 149 - 0
app/admin/view/reserved/index.html

@@ -0,0 +1,149 @@
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-form layui-form-pane  layui-card-header layuiadmin-card-header-auto">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">全部状态</option>
+                            {volist name="status_list" id="v"}
+                            <option value="{$key}">{$v}</option>
+                            {/volist}
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <button class="layui-btn" lay-submit lay-filter="{$lay_btn}">
+                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
+                    </button>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+            <button class="layui-btn layuiadmin-btn layui-btn-danger" data-type="del">删除</button>
+            <button class="layui-btn layuiadmin-btn" data-type="add">添加</button>
+        </div>
+
+        <div class="layui-card-body">
+            <table id="{$lay_table}" lay-filter="{$lay_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.use(['index', 'admin', 'form', 'table'], function () {
+        const $ = layui.$;
+        const admin = layui.admin;
+        const form = layui.form;
+        const table = layui.table;
+        form.render();
+
+        table.render({
+            elem: '#{$lay_table}',
+            url: "{:url('reserved/listReserved')}",
+            cols: [
+                [
+                    {type: 'checkbox', fixed: 'left'},
+                    {field: 'time', title: '活动时间', width: 160},
+                    {field: 'content', title: '活动内容'},
+                    {field: 'address', title: '活动场地', width: 240},
+                    {field: 'num', title: '参加人数', width: 80},
+                    {field: 'status_text', title: '状态', width: 80, align: 'center'},
+                    {field: 'priority', title: '排序', width: 80},
+                    {title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#setTpl'}
+                ]
+            ],
+            page: true,
+            limit: 50,
+            cellMinWidth: 150,
+            text: '对不起,加载出现异常!'
+        });
+
+        form.on('submit({$lay_btn})', function (data) {
+            table.reload('{$lay_table}', {
+                where: data.field,
+                page: {
+                    curr: 1
+                }
+            });
+        });
+
+        //事件
+        const active = {
+            del: function () {
+                const check_data = table.checkStatus('{$lay_table}').data; //得到选中的数据
+                if (check_data.length === 0) {
+                    return layer.msg('请选择数据');
+                }
+                const id_arr = [];
+                for (let i = 0; i < check_data.length; i++) {
+                    id_arr.push(check_data[i].id);
+                }
+                layer.confirm('确定删除吗?', function (index) {
+                    admin.req({
+                        url: "{:url('reserved/delReserved')}",
+                        data: {
+                            id_arr: id_arr
+                        },
+                        done: function (res) {
+                            table.reload('{$lay_table}');
+                        }
+                    });
+                    layer.close(index);
+                });
+            },
+            add: function () {
+                const index = layer.open({
+                    type: 2,
+                    title: '添加已预约活动',
+                    content: "{:url('reserved/reservedForm')}",
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        };
+
+        //监听工具条
+        table.on('tool({$lay_table})', function (obj) {
+            const data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除吗?', function (index) {
+                    admin.req({
+                        url: "{:url('reserved/delReserved')}",
+                        data: {
+                            id_arr: data.id
+                        },
+                        done: function (res) {
+                            layui.table.reload('{$lay_table}');
+                        }
+                    });
+                    layer.close(index);
+                });
+            } else if (obj.event === 'edit') {
+                const index = layer.open({
+                    type: 2,
+                    title: '编辑已预约活动',
+                    content: "{:url('reserved/reservedForm')}?id=" + data.id,
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            }
+        });
+
+        $('.layui-btn.layuiadmin-btn').on('click', function () {
+            const type = $(this).data('type');
+            active[type] ? active[type].call(this) : '';
+        });
+    });
+</script>

+ 93 - 0
app/admin/view/reserved/reserved_form.html

@@ -0,0 +1,93 @@
+<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_table}">
+                        <input type="hidden" name="id" value="{:array_get($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="time" value="{:array_get($info,'time')}" 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="content" value="{:array_get($info,'content')}" 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="{:array_get($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="number" name="num" value="{:array_get($info,'num',0)}" 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="{:array_get($info,'priority',255)}"
+                                       lay-verify="required|number" 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"><span style="color:#f90c05;">*</span>状态</label>
+                            <div class="layui-input-block">
+                                {volist name="status_list" id="v"}
+                                <input type="radio" name="status" value="{$key}" title="{$v}" {eq name=":array_get($info,'status',1)" value="$key" }checked{/eq}>
+                                {/volist}
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <div class="layui-input-block">
+                                <input type="button" lay-submit lay-filter="{$lay_btn}" value="确认提交" class="layui-btn">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['index', 'form', 'layedit', 'upload'], function () {
+        const admin = layui.admin;
+        const form = layui.form;
+        form.render();
+
+        form.on('submit({$lay_btn})', function (obj) {
+            const index = parent.layer.getFrameIndex(window.name);
+            admin.req({
+                url: "{:url('reserved/editReserved')}",
+                type: 'post',
+                data: obj.field,
+                done: function (res) {
+                    layer.msg("提交成功", {
+                        icon: 1
+                    });
+                    parent.layui.table.reload('lay-reserved-index-table'); //重载表格
+                    parent.layer.close(index);
+                }
+            });
+        });
+
+    });
+</script>

+ 29 - 0
app/common/model/PreviousModel.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace app\common\model;
+
+class PreviousModel extends BaseModel
+{
+    // 设置表名
+    protected $name = 'previous';
+
+    //自动完成
+    protected $autoWriteTimestamp = true;
+
+    // 常量
+    const STATUS = [1 => '显示', 2 => '隐藏'];
+    const MONTH  = [1 => '一月', 2 => '二月', 3 => '三月', 4 => '四月', 5 => '五月', 6 => '六月', 7 => '七月', 8 => '八月', 9 => '九月', 10 => '十月', 11 => '十一月', 12 => '十二月'];
+
+    const STATUS_SHOW = 1;
+    const STATUS_HIDE = 2;
+
+    public function getStatusTextAttr($value, $data)
+    {
+        return self::STATUS[$data['status']];
+    }
+
+    public function getMonthTextAttr($value, $data)
+    {
+        return self::MONTH[$data['month']];
+    }
+}

+ 24 - 0
app/common/model/ReservedModel.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace app\common\model;
+
+class ReservedModel extends BaseModel
+{
+    // 设置表名
+    protected $name = 'reserved';
+
+    //自动完成
+    protected $autoWriteTimestamp = true;
+
+    // 常量
+    const STATUS = [1 => '显示', 2 => '隐藏'];
+
+    const STATUS_SHOW = 1;
+    const STATUS_HIDE  = 2;
+
+    public function getStatusTextAttr($value, $data)
+    {
+        return self::STATUS[$data['status']];
+    }
+
+}

+ 19 - 0
app/common/validate/PreviousValidate.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace app\common\validate;
+
+use think\Validate;
+
+class PreviousValidate extends Validate
+{
+    protected $rule = [
+        'title' => 'require',
+        'image' => 'require',
+    ];
+
+    protected $message = [
+        'title' => '标题不能为空',
+        'image' => '请上传图片',
+    ];
+
+}

+ 21 - 0
app/common/validate/ReservedValidate.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace app\common\validate;
+
+use think\Validate;
+
+class ReservedValidate extends Validate
+{
+    protected $rule = [
+        'time'    => 'require',
+        'content' => 'require',
+        'address' => 'require',
+    ];
+
+    protected $message = [
+        'title'   => '活动时间不能为空',
+        'content' => '活动内容不能为空',
+        'address' => '活动场地不能为空',
+    ];
+
+}

+ 20 - 0
app/home/common.php

@@ -1,3 +1,23 @@
 <?php
 // 应用公共文件
 
+function array_split($arr,$num)
+{
+    $res = [];
+    $pre = 0;
+    $item = [];
+    foreach ($arr as $v) {
+        if ($pre != 0 && $pre % $num == 0) {
+            $res[] = $item;
+            $item = [];
+        }
+        $item[] = $v;
+        $pre++;
+    }
+
+    if (!empty($item)) {
+        $res[] = $item;
+    }
+
+    return $res;
+}

+ 13 - 1
app/home/controller/Index.php

@@ -2,13 +2,25 @@
 
 namespace app\home\controller;
 
+use app\common\model\PreviousModel;
+use app\common\model\ReservedModel;
 use app\home\HomeBaseController;
 
 class Index extends HomeBaseController
 {
     public function index()
     {
-        return view();
+        $reserved = ReservedModel::where('status', ReservedModel::STATUS_SHOW)
+            ->order(['priority' => 'desc', 'id' => 'desc'])
+            ->select();
+        $previous = PreviousModel::where('status', ReservedModel::STATUS_SHOW)
+            ->order(['priority' => 'desc', 'id' => 'desc'])
+            ->limit(3)
+            ->select();
+        return view('', [
+            'reserved' => $reserved,
+            'previous' => $previous,
+        ]);
     }
 
 }

+ 27 - 0
app/home/controller/Previous.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace app\home\controller;
+
+use app\common\model\PreviousModel;
+use app\common\model\ReservedModel;
+use app\home\HomeBaseController;
+
+class Previous extends HomeBaseController
+{
+    public function index()
+    {
+        $same_month = date('n');
+        $month      = input('month/d', $same_month);
+        $previous   = PreviousModel::where('status', ReservedModel::STATUS_SHOW)
+            ->where('month', $month)
+            ->order(['priority' => 'desc', 'id' => 'desc'])
+            ->select();
+        $previous = array_split($previous,3);
+        return view('', [
+            'previous' => $previous,
+            'month_list' => PreviousModel::MONTH,
+            'month_index' => $month,
+        ]);
+    }
+
+}

+ 98 - 6
app/home/view/index/index.html

@@ -4,15 +4,107 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width,initial-scale=1">
     <title>晋江人力资本有限公司</title>
+    <link rel="stylesheet" href="__HCSS__/style.css">
     <style>
-        body{
-            padding: 0;
-            margin: 0;
-        }
-        img {width:1255px;height:605px;}
+        .container {width:1255px;height:605px;background-image:url("__HIMAGES__/index.jpg");background-size:100% 100%;background-repeat:no-repeat;position:relative;}
+        .inner-box {width:890px;height:546px;position:absolute;left:336px;top:32px;background:white;}
+        .lw-title {height:40px;position:relative;}
+        .lw-title .main-title {color:#737373;font-weight:bold;height:22px;line-height:22px;}
+        .lw-title .main-title .big {font-size:18px;}
+        .lw-title .main-title .little {font-size:14px;}
+        .lw-title .sub-title {font-size:12px;color:#E08212;height:12px;line-height:12px;}
+        .lw-title .more a{color:#1280dd;font-size:14px;position:absolute;right:10px;top:16px;}
+        .title-review {margin-top:20px;margin-left:22px;}
+        .review {width:266px;margin-left:8px;}
+        .review .review-box {width:266px;height:470px;background:#F6F6F6;border:1px solid #FEFEFE;border-radius:20px;padding-top:5px;}
+        .review-box .img-box {width:224px;margin:5px auto;}
+        .review-box .img-box .img {width:224px;height:116px;border-radius:20px;background-size:cover;background-position: center;}
+        .review-box .img-box p {font-size:12px;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;height:32px;line-height:16px;}
+        .right {margin-right:30px;}
+        .booked-box {width:570px;height:322px;background:#F6F6F6;border:1px solid #FEFEFE;border-radius:20px;overflow:auto;}
+        .booked-title {margin-top:20px;}
+        .booked-box table {width:535px;margin-left:20px;font-size:14px;margin-top:10px;}
+        .booked-box table td{padding-right:5px;}
+        .booked-box table .thead td{border-bottom:2px solid #9DCAFC;}
+        .booked-box table .tbody td{border-bottom:1px solid #CFCFCD;vertical-align:top;padding-top:5px;}
+        .contact-box {width:570px;height:98px;background:#F6F6F6;border:1px solid #FEFEFE;border-radius:20px;display:flex;align-items:flex-end;}
+        .contact-title {margin-top:10px;}
+        .contact-box img {width:74px;height:74px;margin-bottom:12px;margin-left:15px;}
+        .contact-box span {margin-bottom:12px;margin-left:2px;font-size:15px;}
     </style>
 </head>
 <body>
-<img src="__HIMAGES__/index.jpg" alt="">
+<div class="container">
+    <div class="inner-box">
+        <div class="review fl">
+            <div class="lw-title title-review">
+                <div class="main-title">
+                    <span class="big">往期</span>
+                    <span class="little">回顾</span>
+                </div>
+                <div class="sub-title">
+                    ACTIVE REVIEW
+                </div>
+                <div class="more fr">
+                    <a href="{:url('previous/index')}">查看更多>></a>
+                </div>
+            </div>
+            <div class="review-box">
+                {volist name="previous" id="vo"}
+                <div class="img-box">
+                    <div class="img" style="background-image:url('{$vo.image}')"></div>
+                    <p>{$vo.title}</p>
+                </div>
+                {/volist}
+            </div>
+        </div>
+        <div class="right fr">
+            <div class="booked">
+                <div class="lw-title booked-title">
+                    <div class="main-title">
+                        <span class="big">已预约</span>
+                        <span class="little">活动</span>
+                    </div>
+                    <div class="sub-title">
+                        BOOKED ACTIVITIES
+                    </div>
+                </div>
+                <div class="booked-box">
+                    <table cellpadding="0" cellspacing="0">
+                        <tr class="thead">
+                            <td style="width:111px;">时间</td>
+                            <td style="width:253px">内容</td>
+                            <td style="width:95px">场地</td>
+                            <td style="width:56px;padding-right:0;">参加人数</td>
+                        </tr>
+                        {volist name="reserved" id="vo"}
+                        <tr class="tbody">
+                            <td>{$vo.time}</td>
+                            <td>{$vo.content}</td>
+                            <td>{$vo.address}</td>
+                            <td>{$vo.num}</td>
+                        </tr>
+                        {/volist}
+                    </table>
+                </div>
+            </div>
+            <div class="contact">
+                <div class="lw-title contact-title">
+                    <div class="main-title">
+                        <span class="big">联系</span>
+                        <span class="little">我们</span>
+                    </div>
+                    <div class="sub-title">
+                        CONTACT US
+                    </div>
+                </div>
+                <div class="contact-box">
+                    <img src="__HIMAGES__/qrcode_contact.png" alt="">
+                    <span>扫码添加好友或者拨打19906096782了解详情,预约场地活动。</span>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
 </body>
 </html>

+ 90 - 0
app/home/view/previous/index.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="zh-cn">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <title>晋江人力资本有限公司</title>
+    <link rel="stylesheet" href="__HCSS__/style.css">
+    <style>
+        .container {width:1255px;height:605px;background-image:url("__HIMAGES__/index.jpg");background-size:100% 100%;background-repeat:no-repeat;position:relative;}
+        .inner-box {width:890px;height:546px;position:absolute;left:336px;top:32px;background:white;}
+        .title-review {margin-top:10px;height:40px;background: #F6F6F6;border-radius: 20px;}
+        .title-review ul {display:flex;justify-content:space-around;height: 40px;align-items: center;}
+        .title-review ul li {height: 40px;line-height: 40px;width: 72px;text-align: center;}
+        .title-review ul li.active {background:#F27F0C;}
+        .title-review ul li a {color:#A2A2A2;font-weight:bold;}
+        .title-review ul li.active a{color:white;}
+        .review {width:870px;margin:0 auto;}
+        .review .review-box {width:870px;height:470px;background:#F6F6F6;border:1px solid #FEFEFE;border-radius:20px;padding-top:9px;overflow-y:auto;margin-top:10px;}
+        .review-box .review-item {display:flex;}
+        .review-box .flex-box {width: calc((100% - 10px) / 3);height:148px;margin-bottom: 5px;}
+        .review-box .img-box {width:224px;height:148px;margin:0 auto;}
+        .review-box .img-box .img {width:224px;height:116px;border-radius:20px;background-size:cover;background-position: center;}
+        .review-box .img-box p {font-size:12px;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;height:32px;line-height:16px;}
+        .back-box {position:absolute;left:388px;bottom:-15px;width:114px;height:48px;background:white;border-radius:20px;box-shadow:0 5px 2px #8A9CB2;display:flex;justify-content:center;align-items:center;}
+        .back-box .back-text {width:104px;height:38px;line-height:38px;background:#F27F0C;border-radius:20px;color:white;font-size:20px;font-weight:bold;text-align:center;}
+        .no-more {display:block;margin:150px auto 0 auto;}
+    </style>
+</head>
+<body>
+<div class="container">
+    <div class="inner-box">
+        <div class="review">
+            <div class="title-review">
+                <ul>
+                    {foreach $month_list as $key=>$month}
+                        <li class="{eq name='key' value='$month_index'}active{/eq}"><a href="{:url('previous/index')}?month={$key}">{$month}</a></li>
+                    {/foreach}
+                </ul>
+            </div>
+            <div class="review-box">
+                {empty name="previous"}
+                    <img src="__HIMAGES__/no_more.png" class="no-more">
+                {else/}
+                    {volist name="previous" id="item"}
+                    <div class="review-item">
+                        {volist name="item" id="vo"}
+                        <div class="flex-box">
+                            <div class="img-box">
+                                <div class="img" data-url="{$vo.image}" data-title="{$vo.title}" style="background-image:url('{$vo.image}')"></div>
+                                <p>{$vo.title}</p>
+                            </div>
+                        </div>
+                        {/volist}
+                    </div>
+                    {/volist}
+                {/empty}
+            </div>
+        </div>
+        <div class="back-box">
+            <a href="{:url('index/index')}" class="back-text">返回</a>
+        </div>
+    </div>
+</div>
+<script src="__COMMON_JS__/jquery-1.12.4.min.js"></script>
+<script src="__COMMON_JS__/layer/layer.js"></script>
+<script>
+    $('.img').click(function(){
+        let url = $(this).data('url');
+        let title = $(this).data('title');
+        let json = {
+            "title": title, //相册标题
+            "id": 1, //相册id
+            "start": 0, //初始显示的图片序号,默认0
+            "data": [   //相册包含的图片,数组格式
+                {
+                    "alt": title,
+                    "pid": 2, //图片id
+                    "src": url, //原图地址
+                    "thumb": "" //缩略图地址
+                }
+            ]
+        };
+        layer.photos({
+            photos: json
+        });
+        $('.layui-layer-imgbar').show();
+    });
+</script>
+</body>
+</html>

+ 1 - 1
app/middleware.php

@@ -6,5 +6,5 @@ return [
     // 多语言加载
     // \think\middleware\LoadLangPack::class,
     // Session初始化
-//     \think\middleware\SessionInit::class
+     \think\middleware\SessionInit::class
 ];

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
public/static/common/js/layer/layer.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
public/static/common/js/layer/mobile/layer.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
public/static/common/js/layer/mobile/need/layer.css


binární
public/static/common/js/layer/skin/default/icon-ext.png


binární
public/static/common/js/layer/skin/default/icon.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
public/static/common/js/layer/skin/default/layer.css


binární
public/static/common/js/layer/skin/default/loading-0.gif


binární
public/static/common/js/layer/skin/default/loading-1.gif


binární
public/static/common/js/layer/skin/default/loading-2.gif


+ 46 - 0
public/static/home/css/style.css

@@ -0,0 +1,46 @@
+body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, legend, button, form, fieldset, input, textarea, p, blockquote, th, td{
+    padding:0;
+    margin:0;
+    border:0;
+    box-sizing:border-box;
+}
+
+body{
+    font:16px/1.5 "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei",
+    "Hiragino Sans GB", "Heiti SC", "WenQuanYi Micro Hei", sans-serif;
+    color:#333;
+}
+
+em, i{
+    font-style:normal;
+}
+
+ol, ul{
+    list-style:none;
+}
+
+img {
+    vertical-align: middle;
+}
+
+button,input {
+    cursor: pointer;
+    outline: none;
+    color: #333;
+}
+
+/* 左浮动 */
+.fl {
+    float: left;
+}
+
+/* 右浮动 */
+.fr {
+    float: right;
+}
+
+
+a {
+text-decoration: none;
+color: #333;
+}

binární
public/static/home/images/index.jpg


binární
public/static/home/images/no_more.png


binární
public/static/home/images/qrcode_contact.png


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů