Browse Source

考试下拉部门选人,完成

lizhen_gitee 8 months ago
parent
commit
9a9d8223f0

+ 39 - 1
application/admin/controller/exam/Paper.php

@@ -23,7 +23,7 @@ class Paper extends Backend
      * @var \app\admin\model\exam\PaperModel
      */
     protected $model = null;
-    protected $noNeedRight = ['nograde'];
+    protected $noNeedRight = ['nograde','selectuser'];
     public function _initialize()
     {
         parent::_initialize();
@@ -302,4 +302,42 @@ class Paper extends Backend
         return $this->view->fetch();
     }
 
+    /**
+     * 选人
+     */
+    public function selectuser(){
+
+        $id = input('id');
+
+        if($this->request->isPost()){
+            $params = $this->request->post('row/a');
+            $user_rule = explode(',',$params['user_rule']);
+
+            $user_ids = [];
+            foreach($user_rule as $key => $val){
+                if(strpos($val,'u_') !== false){
+                    $user_ids[] = substr($val,2);
+                }
+            }
+            $user_ids = implode(',',$user_ids);
+
+            $update = [
+                'user_ids' => $user_ids,
+                'user_rule' => $params['user_rule'],
+            ];
+            Db::name('exam_paper')->where('id',$id)->update($update);
+            $this->success('设置成功');
+        }
+
+        $id = input('id');
+        $row = Db::name('exam_paper')->where('id',$id)->find();
+
+        $user_rule = explode(',', $row['user_rule']);
+        $nodeList = \app\admin\model\User::getTreeList($user_rule);
+        $this->assign("nodeList", $nodeList);
+
+        $this->assign('row',$row);
+        return $this->view->fetch();
+    }
+
 }

+ 2 - 2
application/admin/view/exam/paper/add.html

@@ -183,12 +183,12 @@
                 </select>
             </div>
         </div>-->
-        <div class="form-group">
+        <!--<div class="form-group">
             <label class="control-label col-xs-12 col-sm-2">可参加考试的用户:</label>
             <div class="col-xs-12 col-sm-8">
                 <input id="c-user_ids" data-source="user/user/index" data-multiple="true" data-order-by="id desc" data-pagination="false" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value="">
             </div>
-        </div>
+        </div>-->
 
 
         <div class="form-group layer-footer">

+ 2 - 2
application/admin/view/exam/paper/edit.html

@@ -161,12 +161,12 @@
             </div>
         </div>
 
-        <div class="form-group">
+        <!--<div class="form-group">
             <label class="control-label col-xs-12 col-sm-2">可参加考试的用户:</label>
             <div class="col-xs-12 col-sm-8">
                 <input id="c-user_ids" data-source="user/user/index" data-multiple="true" data-order-by="id desc" data-pagination="false" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value="{$row.user_ids}">
             </div>
-        </div>
+        </div>-->
 
         <div class="form-group layer-footer">
             <label class="control-label col-xs-12 col-sm-2"></label>

+ 24 - 0
application/admin/view/exam/paper/selectuser.html

@@ -0,0 +1,24 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <input type="hidden" name="row[user_rule]" value="{$row.user_rule}" />
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('User_ids')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <span class="text-muted"><input type="checkbox" name="" id="checkall" /> <label for="checkall"><small>{:__('Check all')}</small></label></span>
+            <span class="text-muted"><input type="checkbox" name="" id="expandall" /> <label for="expandall"><small>{:__('Expand all')}</small></label></span>
+
+            <div id="treeview"></div>
+        </div>
+    </div>
+
+    <div class="form-group layer-footer">
+        <label class="control-label col-xs-12 col-sm-2"></label>
+        <div class="col-xs-12 col-sm-8">
+            <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
+        </div>
+    </div>
+</form>
+<script>
+    var nodeData = {:json_encode($nodeList); };
+</script>

+ 81 - 2
public/assets/js/backend/exam/paper.js

@@ -1,8 +1,23 @@
 let configs_count = {}
 let config_dialog = 0
 
-define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
-
+define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function ($, undefined, Backend, Table, Form) {
+    //读取选中的条目
+    $.jstree.core.prototype.get_all_checked = function (full) {
+        var obj = this.get_selected(), i, j;
+        for (i = 0, j = obj.length; i < j; i++) {
+            obj = obj.concat(this.get_node(obj[i]).parents);
+        }
+        obj = $.grep(obj, function (v, i, a) {
+            return v != '#';
+        });
+        obj = obj.filter(function (itm, i, a) {
+            return i == a.indexOf(itm);
+        });
+        return full ? $.map(obj, $.proxy(function (i) {
+            return this.get_node(i);
+        }, this)) : obj;
+    };
     var Controller = {
         index: function () {
             // 初始化表格参数配置
@@ -111,6 +126,15 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                             table: table,
                             buttons:[
                                 {
+                                    name:'selectuser',
+                                    text:'选择用户',
+                                    title:'选择用户',
+                                    icon:'fa fa-exclamation-circle',
+                                    classname:'btn btn-xs btn-info btn-dialog btn-selectuser',
+                                    url:'exam/paper/selectuser/id/{ids}?dialog=1',
+                                    target:'_self',
+                                },
+                                {
                                     name:'grade',
                                     text:'成绩',
                                     title:'成绩',
@@ -136,6 +160,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 ],
                 onLoadSuccess:function(){
                     // 这里就是数据渲染结束后的回调函数
+                    $(".btn-selectuser").data("area", ['80%','80%']);
                     $(".btn-grade").data("area", ['90%','90%']);
                     $(".btn-nograde").data("area", ['90%','90%']);
                 }
@@ -209,6 +234,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
             Controller.api.bindConfigs()
             Controller.api.bindTime()
         },
+        selectuser: function () {
+            Controller.api.bindevent();
+        },
         nograde: function () {
             Controller.api.bindevent()
         },
@@ -259,6 +287,57 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 });
             },
 
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"), null, null, function () {
+                    if ($("#treeview").length > 0) {
+                        var r = $("#treeview").jstree("get_all_checked");
+                        $("input[name='row[user_rule]']").val(r.join(','));
+                    }
+                    return true;
+                });
+                //渲染权限节点树
+                //销毁已有的节点树
+                $("#treeview").jstree("destroy");
+                Controller.api.rendertree(nodeData);
+                //全选和展开
+                $(document).on("click", "#checkall", function () {
+                    $("#treeview").jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
+                });
+                $(document).on("click", "#expandall", function () {
+                    $("#treeview").jstree($(this).prop("checked") ? "open_all" : "close_all");
+                });
+                $("select[name='row[pid]']").trigger("change");
+            },
+
+            rendertree: function (content) {
+                $("#treeview")
+                    .on('redraw.jstree', function (e) {
+                        $(".layer-footer").attr("domrefresh", Math.random());
+                    })
+                    .jstree({
+                        "themes": {"stripes": true},
+                        "checkbox": {
+                            "keep_selected_style": false,
+                        },
+                        "types": {
+                            "root": {
+                                "icon": "fa fa-folder-open",
+                            },
+                            "menu": {
+                                "icon": "fa fa-folder-open",
+                            },
+                            "file": {
+                                "icon": "fa fa-file-o",
+                            }
+                        },
+                        "plugins": ["checkbox", "types"],
+                        "core": {
+                            'check_callback': true,
+                            "data": content
+                        }
+                    });
+            },
+
             // 选题模式设置
             bindConfigs: function () {
                 // 选题模式弹窗