瀏覽代碼

党务竞赛

linwu 18 小時之前
父節點
當前提交
3694fe8fc4

+ 93 - 1
app/admin/controller/Grade.php

@@ -4,6 +4,7 @@ namespace app\admin\controller;
 
 use app\admin\AdminBaseController;
 use app\common\model\GradeModel;
+use app\common\model\GradePartyModel;
 use app\common\service\QrcodeService;
 
 class Grade extends AdminBaseController
@@ -14,7 +15,7 @@ class Grade extends AdminBaseController
      */
     public function index()
     {
-        $file_url = QrcodeService::getQrcode('grade_index', url('/mobile/grade/login'), 600);
+        $file_url = QrcodeService::getQrcode('grade_index.png', url('/mobile/grade/login'), 600);
         return view('', [
             'is_final_list' => GradeModel::IS_FINAL,
             'file_url'       => $file_url,
@@ -109,4 +110,95 @@ class Grade extends AdminBaseController
         GradeModel::insertAll($list);
         ajax_return(0);
     }
+
+    /**
+     * 党务列表
+     */
+    public function party()
+    {
+        $file_url = QrcodeService::getQrcode('grade_party.png', url('/mobile/grade_party/login'), 600);
+        return view('', [
+            'file_url'       => $file_url,
+        ]);
+    }
+
+    public function listParty()
+    {
+        $map   = $this->dealLikeInput(['name', 'mobile']);
+        $list  = GradePartyModel::where($map)
+            ->limit(input('limit'))
+            ->page(input('page'))
+            ->select();
+        $count = GradePartyModel::where($map)->count();
+        if ($count == 0) {
+            ajax_return(1, '未查询到数据');
+        }
+        list_return($list, $count);
+    }
+
+    public function delParty()
+    {
+        $id_arr = input('id_arr/a');
+        GradePartyModel::destroy($id_arr);
+        ajax_return();
+    }
+
+    /**
+     * 编辑
+     */
+    public function partyForm()
+    {
+        $id   = input('id/d, 0');
+        $info = GradePartyModel::find($id);
+
+        return view('', [
+            'info'          => $info,
+        ]);
+    }
+
+    public function editParty()
+    {
+        $data = input('post.');
+
+        if (empty($data['id'])) {
+            GradePartyModel::create($data);
+        } else {
+            GradePartyModel::update($data, ['id' => $data['id']]);
+        }
+
+        ajax_return();
+    }
+
+    /**
+     * 用户导入
+     */
+    public function importParty()
+    {
+        return view('public/import', [
+            'url'           => url('grade/importPartyPost'),
+            'last_table'    => 'lay-grade-party-table',
+            'template_file' => '/static/common/exl/grade_party.xls',
+        ]);
+    }
+
+    /**
+     * 用户导入提交
+     */
+    public function importPartyPost()
+    {
+        $file_url = input('file_url/s', "");
+        if (!file_exists($file_url)) {
+            ajax_return(1, '文件不存在');
+        }
+
+        //初始化数据
+        $data = ['no', 'name', 'mobile', 'score'];
+        $list = import_exl($file_url, $data, 1);
+        if (empty($list)) {
+            ajax_return(1, '请上传有数据的文件');
+        }
+
+        GradePartyModel::insertAll($list);
+        ajax_return(0);
+    }
 }

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

@@ -31,7 +31,7 @@
                                     <td onclick="copyMobileUrl('c9a4dbb5');">密码:c9a4dbb5</td>
                                 </tr>
                                 <tr>
-                                    <td colspan="2" onclick="copyMobileUrl('jinjianghc');">服务器帐号:jinjianghc</td>
+                                    <td colspan="2" onclick="copyMobileUrl('root');">服务器帐号:root</td>
                                     <td colspan="2" onclick="copyMobileUrl('20190515Hc#');">服务器密码:20190515Hc#</td>
                                 </tr>
                             </tbody>

+ 152 - 0
app/admin/view/grade/party.html

@@ -0,0 +1,152 @@
+<style>
+
+</style>
+<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">
+                        <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">
+                        <input type="text" name="mobile" placeholder="请输入联系方式" autocomplete="off" class="layui-input">
+                    </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" data-type="add">添加</button>
+            <button class="layui-btn layuiadmin-btn" data-type="import">批量导入</button>
+            <button class="layui-btn layui-btn-normal layuiadmin-btn" data-type="qrcode">二维码</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('grade/listParty')}",
+            cols: [
+                [
+                    {field: 'name', title: '姓名' ,width: 100},
+                    {field: 'mobile', title: '联系方式', width: 300},
+                    {field: 'score', title: '总分分'},
+                    {title: '操作', 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 = {
+            add: function () {
+                const index = layer.open({
+                    type: 2,
+                    title: '添加成绩',
+                    content: "{:url('grade/partyForm')}",
+                    maxmin: true,
+                    area: ['550px', '550px']
+                });
+                layer.full(index);
+            },
+            import: function() {
+                layer.open({
+                    type: 2,
+                    title: '批量导入',
+                    content: "{:url('grade/importParty')}",
+                    maxmin: true,
+                    area: ['750px', '300px']
+                });
+            },
+            qrcode: function () {
+                layer.photos({
+                    photos: {
+                        "title": "", //相册标题
+                        "id": 123, //相册id
+                        "start": 0, //初始显示的图片序号,默认0
+                        "data": [   //相册包含的图片,数组格式
+                            {
+                                "alt": "图片名",
+                                "pid": 666, //图片id
+                                "src": "{$file_url}", //原图地址
+                                "thumb": "" //缩略图地址
+                            }
+                        ]
+                    }
+                    ,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
+                });
+            },
+        };
+
+        //监听工具条
+        table.on('tool({$lay_table})', function (obj) {
+            const data = obj.data;
+            if (obj.event === 'del') {
+                layer.confirm('确定删除此成绩吗?', function (index) {
+                    admin.req({
+                        url: "{:url('grade/delParty')}",
+                        data: {
+                            id: 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('grade/partyForm')}?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>

+ 68 - 0
app/admin/view/grade/party_form.html

@@ -0,0 +1,68 @@
+<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">
+                                <input type="text" name="mobile" value="{:array_get($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="number" name="score" value="{:array_get($info,'score')}" lay-verify="required"
+                                       placeholder="请输入总分" autocomplete="off"
+                                       class="layui-input">
+                            </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('grade/editParty')}",
+                type: 'post',
+                data: obj.field,
+                done: function (res) {
+                    layer.msg("提交成功", {
+                        icon: 1
+                    });
+                    parent.layui.table.reload('lay-grade-party-table'); //重载表格
+                    parent.layer.close(index);
+                }
+            });
+        });
+
+    });
+</script>

+ 12 - 0
app/common/model/GradePartyModel.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace app\common\model;
+
+class GradePartyModel extends BaseModel
+{
+    // 设置表名
+    protected $name = 'grade_party';
+
+    //自动完成
+    protected $autoWriteTimestamp = true;
+}

+ 0 - 4
app/mobile/controller/Grade.php

@@ -3,10 +3,6 @@
 namespace app\mobile\controller;
 
 use app\common\model\GradeModel;
-use app\common\model\SoldierModel;
-use app\common\model\SoldierVideoModel;
-use app\common\model\SoldierVideoSeriesModel;
-use app\common\model\SoldierVideoWatchModel;
 use app\mobile\MobileBaseController;
 
 class Grade extends MobileBaseController

+ 45 - 0
app/mobile/controller/GradeParty.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace app\mobile\controller;
+
+use app\common\model\GradeModel;
+use app\common\model\GradePartyModel;
+use app\mobile\MobileBaseController;
+
+class GradeParty extends MobileBaseController
+{
+    public function login()
+    {
+        return view();
+    }
+
+    public function doLogin()
+    {
+        $param = input('post.');
+        if (empty($param['mobile']) || empty($param['name'])) {
+            ajax_return(1, '请输入联系方式或姓名');
+        }
+
+        $grade = GradePartyModel::where('mobile', $param['mobile'])->where('name', $param['name'])->find();
+        if (empty($grade)) {
+            ajax_return(1, '联系方式或姓名输入错误');
+        }
+
+        session('mobile.grade_party.mobile', $grade['mobile']);
+        ajax_return();
+    }
+
+    public function index()
+    {
+        $mobile = session('mobile.grade_party.mobile');
+        if (empty($mobile)) {
+            return redirect(url('grade_party/login'));
+        }
+
+        $grade = GradePartyModel::where('mobile', $mobile)->find();
+        return view('', [
+            'grade' => json_encode($grade),
+        ]);
+    }
+
+}

+ 48 - 0
app/mobile/view/grade_party/index.html

@@ -0,0 +1,48 @@
+{extend name="public/base"/}
+{block name="css"}
+<style>
+    body {
+        --van-cell-font-size: 18px;
+        --van-grid-item-text-font-size: 14px;
+    }
+    .score {
+        font-size: 30px;
+        padding-bottom: 5px;
+        font-weight: bold;
+        color: var(--red);
+    }
+</style>
+{/block}
+{block name="body"}
+<van-nav-bar
+        class="nav-theme"
+        :fixed="true"
+        :placeholder="true"
+>
+    <template #title>
+        <span class="text-white">成绩查询</span>
+    </template>
+</van-nav-bar>
+<van-grid :column-num="1">
+    <van-grid-item text="总得分">
+        <template #icon>
+            <div class="score">{{grade.score}}</div>
+        </template>
+    </van-grid-item>
+</van-grid>
+<van-cell-group inset style="margin-top:10px;">
+    <van-field v-model="grade.name" label="姓名" readonly></van-field>
+    <van-field v-model="grade.mobile" label="联系方式" readonly></van-field>
+</van-cell-group>
+{/block}
+{block name="script"}
+<script>
+    function v_setup() {
+        let base = {};
+
+        base.grade = Vue.reactive({$grade});
+
+        return base;
+    }
+</script>
+{/block}

+ 100 - 0
app/mobile/view/grade_party/login.html

@@ -0,0 +1,100 @@
+{extend name="public/base"/}
+{block name="css"}
+<style>
+    .content {
+        height: 100vh;
+        background-color: aquamarine;
+        background: url("__MIMAGES__/bg_login.jpg") no-repeat;
+        background-size: cover;
+    }
+
+    .topBox {
+        font-size: 17px;
+        color: #fff;
+        padding: 10px 25px;
+    }
+
+    h3 {
+        margin-bottom: 5px;
+    }
+
+    .inputBox {
+        position: fixed;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        height: 85vh;
+        background-color: #fff;
+        border-top-left-radius: 20px;
+        border-top-right-radius: 20px;
+        padding: 30px;
+        box-sizing: border-box;
+    }
+
+    .ipt {
+        margin-bottom: 25px;
+    }
+
+    .ipt h4 {
+        margin-bottom: 10px;
+        font-size: 18px;
+        color: #333;
+    }
+
+    .ipt input {
+        border:none;
+        border-bottom:1px solid #dedede;
+        width:100%;
+        padding-bottom: 10px;
+        font-size: 14px;
+    }
+
+    .loginBtn {
+        line-height: 43px;
+        text-align: center;
+        background: linear-gradient(to right, rgb(86, 104, 214), rgb(86, 104, 214));
+        border-radius: 20px;
+        color: #fff;
+        margin-top: 25px;
+        width:100%;
+        border:none;
+        display:block;
+    }
+
+</style>
+{/block}
+{block name="body"}
+<div class="content">
+    <div class="topBox">
+        <h3>党务竞赛成绩查询</h3>
+    </div>
+    <div class="inputBox">
+        <div class="ipt">
+            <h4>联系方式</h4>
+            <input type="text" v-model="form.mobile" placeholder="请输入联系方式" />
+        </div>
+        <div class="ipt">
+            <h4>姓名</h4>
+            <input type="text" v-model="form.name" placeholder="请输入姓名" />
+        </div>
+        <button class="loginBtn" @click="onLogin">查询成绩</button>
+    </div>
+</div>
+{/block}
+{block name="script"}
+<script>
+    function v_setup() {
+        let base = {};
+
+        base.form = Vue.reactive({});
+
+        base.onLogin = () => {
+            postJson('/grade_party/doLogin', base.form).then(({data, code}) => {
+                location.href = "{:url('grade_party/index')}";
+            })
+        };
+
+        return base;
+    }
+</script>
+{/block}

二進制
public/static/common/exl/grade_party.xls