linwu 6 часов назад
Родитель
Сommit
d48b84b57e

+ 75 - 0
app/admin/controller/Select.php

@@ -0,0 +1,75 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\AdminBaseController;
+use app\common\model\ArticleModel;
+use app\common\model\ArticleCateModel;
+use app\common\model\SelectNameModel;
+use app\common\validate\ArticleCateValidate;
+use app\common\validate\ArticleValidate;
+use think\exception\ValidateException;
+
+class Select extends AdminBaseController
+{
+    /**
+     * 列表
+     */
+    public function index()
+    {
+        return view('', [
+            'status_list' => SelectNameModel::STATUS,
+        ]);
+    }
+
+    public function nameForm()
+    {
+        $id        = input('id/d, 0');
+        $info      = SelectNameModel::find($id);
+
+        return view('', [
+            'info'        => $info,
+            'status_list' => SelectNameModel::STATUS,
+        ]);
+    }
+
+    public function listName()
+    {
+        $map = $this->dealEqualInput(['status'],$this->dealLikeInput(['name']));
+
+        $list  = SelectNameModel::where($map)
+            ->limit(input('limit'))
+            ->page(input('page'))
+            ->append(['status_text'])
+            ->select();
+        $count = SelectNameModel::where($map)->count();
+
+        if ($count == 0) {
+            ajax_return(1, '未查询到数据');
+        }
+        list_return($list, $count);
+    }
+
+    public function delName()
+    {
+        $id_arr = input('id_arr/a');
+        SelectNameModel::destroy($id_arr);
+        ajax_return();
+    }
+
+    public function editName()
+    {
+        $data = input('post.');
+        if (empty($data['name'])) {
+            ajax_return(1, '姓名不能为空');
+        }
+
+        if (empty($data['id'])) {
+            SelectNameModel::create($data);
+        } else {
+            SelectNameModel::update($data, ['id' => $data['id']]);
+        }
+
+        ajax_return();
+    }
+}

+ 1 - 1
app/admin/view/company/info.html

@@ -25,7 +25,7 @@
                             </thead>
                             </thead>
                             <tbody>
                             <tbody>
                             <tr>
                             <tr>
-                                <td colspan="2" onclick="copyMobileUrl('https://58.23.212.87:30414/48461a05');">联通云:https://console.cucloud.cn/login</td>
+                                <td colspan="2" onclick="copyMobileUrl('https://console.cucloud.cn/login');">联通云:https://console.cucloud.cn/login</td>
                                 <td onclick="copyMobileUrl('jjhc');">帐号:480NWY27535290</td>
                                 <td onclick="copyMobileUrl('jjhc');">帐号:480NWY27535290</td>
                                 <td onclick="copyMobileUrl('20190515Hc#');">密码:I4v5,{o=07Gyqurr</td>
                                 <td onclick="copyMobileUrl('20190515Hc#');">密码:I4v5,{o=07Gyqurr</td>
                             </tr>
                             </tr>

+ 158 - 0
app/admin/view/select/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-inline">
+                <label class="layui-form-label">姓名</label>
+                <div class="layui-input-block">
+                    <input type="text" name="name" 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>
+                        {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 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>
+            <button class="layui-btn layuiadmin-btn" data-type="open">打开页面</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', 'form', 'set', 'table'], function () {
+        const $ = layui.$;
+        const admin = layui.admin;
+        const form = layui.form;
+        const table = layui.table;
+        let search_param = {};
+        form.render();
+
+        table.render({
+            elem: '#{$lay_table}',
+            url: "{:url('listName')}",
+            cols: [
+                [
+                    {type: 'checkbox', fixed: 'left'},
+                    {field: 'id', width: 80,title: '主键ID'},
+                    {field: 'name', title: '姓名'},
+                    {field: 'status_text', title: '状态', align: 'center'},
+                    {title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#setTpl'}
+                ]
+            ],
+            page: true,
+            limit: 50,
+            cellMinWidth: 150,
+            text: '对不起,加载出现异常!'
+        });
+
+        //监听搜索
+        form.on('submit({$lay_btn})', function (data) {
+            search_param = data.field;
+            table.reload('{$lay_table}', {
+                where: data.field,
+                page: {
+                    curr: 1
+                }
+            });
+        });
+
+        //事件
+        const active = {
+            add: function () {
+                const index = layer.open({
+                    type: 2,
+                    title: '添加人员',
+                    content: "{:url('article/cateForm')}",
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            },
+            del: function () {
+                const check_status = table.checkStatus('{$lay_table}');
+                const check_data = check_status.data; //得到选中的数据
+                if (check_data.length === 0) {
+                    return layer.msg('请选择数据');
+                }
+                let 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('delName')}",
+                        data: {
+                            id_arr: id_arr
+                        },
+                        done: function (res) {
+                            table.reload('{$lay_table}');
+                            layer.msg('已删除');
+                        }
+                    });
+                    layer.close(index);
+                });
+            },
+            open: function () {
+                open("{:url('home/select/index')}");
+            },
+        };
+
+        //监听工具条
+        table.on('tool({$lay_table})', function (obj) {
+            const data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除此人员吗?', function (index) {
+                    admin.req({
+                        url: "{:url('delName')}",
+                        data: {
+                            id_arr: [data.id]
+                        },
+                        done: function (res) {
+                            obj.del();
+                            layer.msg('已删除');
+                        }
+                    });
+                    layer.close(index);
+                });
+            } else if (obj.event === 'edit') {
+                const index = layer.open({
+                    type: 2,
+                    title: '编辑人员',
+                    content: "{:url('nameForm')}?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>

+ 60 - 0
app/admin/view/select/name_form.html

@@ -0,0 +1,60 @@
+<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="name" value="{:array_get($info,'name')}" 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">
+                                {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'], 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('editName')}",
+                type: 'post',
+                data: obj.field,
+                done: function (res) {
+                    layer.msg("提交成功", {
+                        icon: 1
+                    });
+                    parent.layui.table.reload('lay-select-index-table'); //重载表格
+                    parent.layer.close(index);
+                }
+            });
+        });
+    });
+</script>

+ 17 - 0
app/common/model/SelectNameModel.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace app\common\model;
+
+class SelectNameModel extends BaseModel
+{
+    // 设置表名
+    protected $name = 'select_name';
+
+    //常量
+    const STATUS = [1 => '显示', 2 => '隐藏'];
+
+    public function getStatusTextAttr($value, $data)
+    {
+        return self::STATUS[$data['status']];
+    }
+}

+ 19 - 0
app/home/controller/Select.php

@@ -0,0 +1,19 @@
+<?php
+
+
+namespace app\home\controller;
+
+use app\common\model\SelectNameModel;
+use app\home\HomeBaseController;
+
+class Select extends HomeBaseController
+{
+    public function index()
+    {
+        $list = SelectNameModel::where('status', 1)->column('name');
+
+        return view('', [
+            "list" => json_encode($list),
+        ]);
+    }
+}

+ 135 - 0
app/home/view/select/index.html

@@ -0,0 +1,135 @@
+{extend name="public/base_el"/}
+{block name="css"}
+<style>
+    .box {
+        width: 800px;
+        margin: 0 auto;
+    }
+
+    .title {
+        margin-top: 50px;
+        text-align: center;
+        font-size: 24px;
+        padding-bottom: 50px;
+    }
+
+    .name-list {
+        display: flex;
+        align-items: center;
+        justify-content: space-around;
+        flex-wrap: wrap;
+    }
+
+    .name-list .name {
+        width: 266px;
+        text-align: center;
+        margin-top: 20px;
+        font-size: 24px;
+    }
+</style>
+{/block}
+{block name="body"}
+<div class="box">
+    <div class="input_number" v-show="showBox == 'number'">
+        <div class="title">请输入人数</div>
+        <el-row>
+            <el-col :span="12" :offset="6">
+                <el-form-item label="抽取人数">
+                    <el-input v-model="number" placeholder="请输入抽取人数"></el-input>
+                </el-form-item>
+            </el-col>
+        </el-row>
+
+        <div style="margin-top:50px;text-align: center;">
+            <el-button type="primary" @click="toSelect">提交</el-button>
+            <el-button type="primary" @click="onRest">重置</el-button>
+        </div>
+    </div>
+    <div class="select_name" v-show="showBox == 'select'">
+        <div class="title">抽取中奖人员</div>
+        <div class="name-list">
+            <div class="name" v-for="item in list_now">{{item}}</div>
+        </div>
+        <div style="margin-top:50px;text-align: center;">
+            <el-button type="primary" @click="onStart" v-show="status == 'unstart'">开始</el-button>
+            <el-button type="success" @click="onEnd" v-show="status == 'start'">确定</el-button>
+            <el-button type="danger" @click="onBack" v-show="status == 'end'">返回</el-button>
+        </div>
+    </div>
+
+    <div style="margin-top: 10px;">
+        已排除人员:
+        <span  v-for="item in ext_list">
+            <el-tag type="danger" style="margin-left: 10px;margin-top: 5px;">{{item}}</el-tag>
+        </span>
+    </div>
+</div>
+{/block}
+{block name="script"}
+<script>
+    function v_setup() {
+        let base = {};
+
+        base.showBox = Vue.ref('number');
+        base.number = Vue.ref(3);
+        base.list = Vue.ref({$list});
+        base.list_now = Vue.ref([]);
+        base.ext_list = Vue.ref([]);
+        base.set = null;
+        base.status = Vue.ref('unstart');
+
+        base.toSelect = () => {
+            base.showBox.value = 'select';
+            base.status.value = 'unstart';
+            const { selected, rest } =base.getRandomUniqueItems(base.list.value, base.number.value);
+            base.list_now.value = selected;
+        }
+
+        base.onRest = () => {
+            location.reload();
+        }
+
+        base.onStart = () => {
+            if (base.number.value > base.list.value.length) {
+                alert('剩余人数不满足需要中奖人数');
+                return false;
+            }
+            base.status.value = 'start';
+            base.set = setInterval(() => {
+                const { selected, rest } =base.getRandomUniqueItems(base.list.value, base.number.value);
+                base.list_now.value = selected;
+            },100)
+        }
+
+        base.onEnd = () => {
+            clearInterval(base.set);
+            const { selected, rest } =base.getRandomUniqueItems(base.list.value, base.number.value);
+            base.list_now.value = selected;
+            base.list.value = rest;
+            base.ext_list.value = [...base.ext_list.value,...selected];
+            base.status.value = 'end'
+        }
+
+        base.onBack = () => {
+            base.showBox.value = 'number';
+        }
+
+        base.getRandomUniqueItems = (array, count) => {
+            const shuffled = [...array];
+
+            // 只需打乱前 count 个位置即可(优化版 Fisher-Yates)
+            for (let i = 0; i < count; i++) {
+                const j = Math.floor(Math.random() * (array.length - i)) + i;
+                [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
+            }
+            // 前 count 个是随机选出的,后面的是剩余的
+            const selected = shuffled.slice(0, count);
+            const rest = shuffled.slice(count);
+
+            return {selected, rest};
+        }
+
+        return base;
+    }
+</script>
+{/block}