贾小兵 4 miesięcy temu
rodzic
commit
15bc94e1a0
43 zmienionych plików z 2148 dodań i 7 usunięć
  1. 39 0
      application/admin/controller/student/Collection.php
  2. 37 0
      application/admin/controller/student/Exam.php
  3. 39 0
      application/admin/controller/student/Practice.php
  4. 39 0
      application/admin/controller/teacher/Collection.php
  5. 37 0
      application/admin/controller/teacher/Exams.php
  6. 39 0
      application/admin/controller/teacher/Practice.php
  7. 2 1
      application/admin/controller/teacher/Task.php
  8. 20 0
      application/admin/lang/zh-cn/student/collection.php
  9. 22 0
      application/admin/lang/zh-cn/student/exam.php
  10. 20 0
      application/admin/lang/zh-cn/student/practice.php
  11. 20 0
      application/admin/lang/zh-cn/teacher/collection.php
  12. 22 0
      application/admin/lang/zh-cn/teacher/exams.php
  13. 20 0
      application/admin/lang/zh-cn/teacher/practice.php
  14. 41 0
      application/admin/model/teacher/Collection.php
  15. 41 0
      application/admin/model/teacher/Exams.php
  16. 3 2
      application/admin/model/teacher/Task.php
  17. 27 0
      application/admin/validate/teacher/Collection.php
  18. 27 0
      application/admin/validate/teacher/Exams.php
  19. 99 0
      application/admin/view/student/collection/add.html
  20. 99 0
      application/admin/view/student/collection/edit.html
  21. 29 0
      application/admin/view/student/collection/index.html
  22. 24 0
      application/admin/view/student/exam/index.html
  23. 99 0
      application/admin/view/student/practice/add.html
  24. 99 0
      application/admin/view/student/practice/edit.html
  25. 29 0
      application/admin/view/student/practice/index.html
  26. 99 0
      application/admin/view/teacher/collection/add.html
  27. 99 0
      application/admin/view/teacher/collection/edit.html
  28. 29 0
      application/admin/view/teacher/collection/index.html
  29. 105 0
      application/admin/view/teacher/exams/add.html
  30. 105 0
      application/admin/view/teacher/exams/edit.html
  31. 25 0
      application/admin/view/teacher/exams/index.html
  32. 99 0
      application/admin/view/teacher/practice/add.html
  33. 99 0
      application/admin/view/teacher/practice/edit.html
  34. 29 0
      application/admin/view/teacher/practice/index.html
  35. 12 1
      application/common/model/Config.php
  36. 72 0
      public/assets/js/backend/student/collection.js
  37. 64 0
      public/assets/js/backend/student/exam.js
  38. 72 0
      public/assets/js/backend/student/practice.js
  39. 78 0
      public/assets/js/backend/teacher/collection.js
  40. 69 0
      public/assets/js/backend/teacher/exams.js
  41. 77 0
      public/assets/js/backend/teacher/practice.js
  42. 6 3
      public/assets/js/backend/teacher/task.js
  43. 36 0
      public/assets/js/require-table.js

+ 39 - 0
application/admin/controller/student/Collection.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\admin\controller\student;
+
+use app\common\controller\Backend;
+use app\common\model\Config as ConfigModel;
+
+/**
+ * sim-考试集合管理
+ *
+ * @icon fa fa-circle-o
+ */
+class Collection extends Backend
+{
+
+    /**
+     * Collection模型对象
+     * @var \app\admin\model\teacher\Collection
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\teacher\Collection;
+        $this->assignConfig('sim_sim_type', ConfigModel::getSimTypeList());
+        $this->assignConfig('sim_question_setting_method', ConfigModel::getSimQuestionList());
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+
+
+}

+ 37 - 0
application/admin/controller/student/Exam.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\admin\controller\student;
+
+use app\common\controller\Backend;
+
+/**
+ * sim-考试表/成绩总分
+ *
+ * @icon fa fa-circle-o
+ */
+class Exam extends Backend
+{
+
+    /**
+     * Exams模型对象
+     * @var \app\admin\model\teacher\Exams
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\teacher\Exams;
+
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+
+
+}

+ 39 - 0
application/admin/controller/student/Practice.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\admin\controller\student;
+
+use app\common\controller\Backend;
+use app\common\model\Config as ConfigModel;
+
+/**
+ * sim-练习集合管理
+ *
+ * @icon fa fa-circle-o
+ */
+class Practice extends Backend
+{
+
+    /**
+     * Collection模型对象
+     * @var \app\admin\model\teacher\Collection
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\teacher\Collection;
+        $this->assignConfig('sim_sim_type', ConfigModel::getSimTypeList());
+        $this->assignConfig('sim_question_setting_method', ConfigModel::getSimQuestionList());
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+
+
+}

+ 39 - 0
application/admin/controller/teacher/Collection.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\admin\controller\teacher;
+
+use app\common\controller\Backend;
+use app\common\model\Config as ConfigModel;
+
+/**
+ * sim-考试集合管理
+ *
+ * @icon fa fa-circle-o
+ */
+class Collection extends Backend
+{
+
+    /**
+     * Collection模型对象
+     * @var \app\admin\model\teacher\Collection
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\teacher\Collection;
+        $this->assignConfig('sim_sim_type', ConfigModel::getSimTypeList());
+        $this->assignConfig('sim_question_setting_method', ConfigModel::getSimQuestionList());
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+
+
+}

+ 37 - 0
application/admin/controller/teacher/Exams.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\admin\controller\teacher;
+
+use app\common\controller\Backend;
+
+/**
+ * sim-考试表/成绩总分
+ *
+ * @icon fa fa-circle-o
+ */
+class Exams extends Backend
+{
+
+    /**
+     * Exams模型对象
+     * @var \app\admin\model\teacher\Exams
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\teacher\Exams;
+
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+
+
+}

+ 39 - 0
application/admin/controller/teacher/Practice.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\admin\controller\teacher;
+
+use app\common\controller\Backend;
+use app\common\model\Config as ConfigModel;
+
+/**
+ * sim-练习集合管理
+ *
+ * @icon fa fa-circle-o
+ */
+class Practice extends Backend
+{
+
+    /**
+     * Collection模型对象
+     * @var \app\admin\model\teacher\Collection
+     */
+    protected $model = null;
+
+    public function _initialize()
+    {
+        parent::_initialize();
+        $this->model = new \app\admin\model\teacher\Collection;
+        $this->assignConfig('sim_sim_type', ConfigModel::getSimTypeList());
+        $this->assignConfig('sim_question_setting_method', ConfigModel::getSimQuestionList());
+    }
+
+
+
+    /**
+     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
+     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
+     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
+     */
+
+
+}

+ 2 - 1
application/admin/controller/teacher/Task.php

@@ -3,7 +3,7 @@
 namespace app\admin\controller\teacher;
 
 use app\common\controller\Backend;
-
+use app\common\model\Config as ConfigModel;
 /**
  * sim-任务管理
  *
@@ -23,6 +23,7 @@ class Task extends Backend
         parent::_initialize();
         $this->model = new \app\admin\model\teacher\Task;
 
+        $this->assignConfig('sim_sim_type', ConfigModel::getSimTypeList());
     }
 
 

+ 20 - 0
application/admin/lang/zh-cn/student/collection.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+    'Exam_collection_id'      => '编号',
+    'Sim_type'                => '模拟器类型',
+    'Question_setting_method' => '出题方式',//:[1]-系统随机,[2]-教师自选,[3]任务自选
+    'Exam_collection_type'    => '考试类型',//:[1]-练习,[2]-自主练习,[3]-考试
+    'Exam_collection_state'   => '考试集合状态',//:[0]-初始化,[2]-打开,[3]-关闭
+    'Exam_collection_name'    => '考试名称',
+    'Task_id'                 => '任务ID',
+    'Limit_duration'          => '限制时长(分钟)',
+    'Start_time'              => '考试开始时间',
+    'End_time'                => '考试结束时间',
+    'Create_user_id'          => '创建教师ID/用户ID',
+    'Create_by'               => '创建者',
+    'Create_time'             => '创建时间',
+    'Update_by'               => '更新者',
+    'Update_time'             => '更新时间',
+    'Remark'                  => '备注'
+];

+ 22 - 0
application/admin/lang/zh-cn/student/exam.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+    'Exam_id'               => '编号',
+    'Exam_collection_id'    => '考试集合ID',
+    'User_id'               => '学员ID/用户ID',
+    'Seat_id'               => '座ID',
+    'Sim_id'                => '模拟器ID',
+    //状态:[0]-未登录,[1]-已登录,[2]-模拟器检查并下发故障中,[3]:模拟器检查OK可开考,[4]-答题中,[5]-已交卷,[6]-计算成绩中,[7]-获取到成绩报告,[80]-教师标记缺考,[81]-登录未开始答题,[90]-模拟器异常结束
+    'Exam_status'           => '考试状态',
+    'Total_score'           => '总分',//:累加扣分和计算出总分
+    'Deduction_total_score' => '扣分总计,不计超时扣分',
+    'Start_time'            => '考试开始时间',
+    'End_time'              => '考试结束时间',
+    'Login_time'            => '登录时间',
+    'Logout_time'           => '登出时间',
+    'Create_by'             => '创建者',
+    'Create_time'           => '创建时间',
+    'Update_by'             => '更新者',
+    'Update_time'           => '更新时间',
+    'Remark'                => '备注'
+];

+ 20 - 0
application/admin/lang/zh-cn/student/practice.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+    'Exam_collection_id'      => '编号',
+    'Sim_type'                => '模拟器类型',
+    'Question_setting_method' => '出题方式',//:[1]-系统随机,[2]-教师自选,[3]任务自选
+    'Exam_collection_type'    => '类型',//:[1]-练习,[2]-自主练习,[3]-考试
+    'Exam_collection_state'   => '状态',//:[0]-初始化,[2]-打开,[3]-关闭
+    'Exam_collection_name'    => '练习名称',
+    'Task_id'                 => '任务ID',
+    'Limit_duration'          => '限制时长(分钟)',
+    'Start_time'              => '练习开始时间',
+    'End_time'                => '练习结束时间',
+    'Create_user_id'          => '创建教师ID/用户ID',
+    'Create_by'               => '创建者',
+    'Create_time'             => '创建时间',
+    'Update_by'               => '更新者',
+    'Update_time'             => '更新时间',
+    'Remark'                  => '备注'
+];

+ 20 - 0
application/admin/lang/zh-cn/teacher/collection.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+    'Exam_collection_id'      => '编号',
+    'Sim_type'                => '模拟器类型',
+    'Question_setting_method' => '出题方式',//:[1]-系统随机,[2]-教师自选,[3]任务自选
+    'Exam_collection_type'    => '考试类型',//:[1]-练习,[2]-自主练习,[3]-考试
+    'Exam_collection_state'   => '考试集合状态',//:[0]-初始化,[2]-打开,[3]-关闭
+    'Exam_collection_name'    => '考试名称',
+    'Task_id'                 => '任务ID',
+    'Limit_duration'          => '限制时长(分钟)',
+    'Start_time'              => '考试开始时间',
+    'End_time'                => '考试结束时间',
+    'Create_user_id'          => '创建教师ID/用户ID',
+    'Create_by'               => '创建者',
+    'Create_time'             => '创建时间',
+    'Update_by'               => '更新者',
+    'Update_time'             => '更新时间',
+    'Remark'                  => '备注'
+];

+ 22 - 0
application/admin/lang/zh-cn/teacher/exams.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+    'Exam_id'               => '编号',
+    'Exam_collection_id'    => '考试集合ID',
+    'User_id'               => '学员ID/用户ID',
+    'Seat_id'               => '座ID',
+    'Sim_id'                => '模拟器ID',
+    //状态:[0]-未登录,[1]-已登录,[2]-模拟器检查并下发故障中,[3]:模拟器检查OK可开考,[4]-答题中,[5]-已交卷,[6]-计算成绩中,[7]-获取到成绩报告,[80]-教师标记缺考,[81]-登录未开始答题,[90]-模拟器异常结束
+    'Exam_status'           => '考试状态',
+    'Total_score'           => '总分',//:累加扣分和计算出总分
+    'Deduction_total_score' => '扣分总计,不计超时扣分',
+    'Start_time'            => '考试开始时间',
+    'End_time'              => '考试结束时间',
+    'Login_time'            => '登录时间',
+    'Logout_time'           => '登出时间',
+    'Create_by'             => '创建者',
+    'Create_time'           => '创建时间',
+    'Update_by'             => '更新者',
+    'Update_time'           => '更新时间',
+    'Remark'                => '备注'
+];

+ 20 - 0
application/admin/lang/zh-cn/teacher/practice.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+    'Exam_collection_id'      => '编号',
+    'Sim_type'                => '模拟器类型',
+    'Question_setting_method' => '出题方式',//:[1]-系统随机,[2]-教师自选,[3]任务自选
+    'Exam_collection_type'    => '类型',//:[1]-练习,[2]-自主练习,[3]-考试
+    'Exam_collection_state'   => '状态',//:[0]-初始化,[2]-打开,[3]-关闭
+    'Exam_collection_name'    => '练习名称',
+    'Task_id'                 => '任务ID',
+    'Limit_duration'          => '限制时长(分钟)',
+    'Start_time'              => '练习开始时间',
+    'End_time'                => '练习结束时间',
+    'Create_user_id'          => '创建教师ID/用户ID',
+    'Create_by'               => '创建者',
+    'Create_time'             => '创建时间',
+    'Update_by'               => '更新者',
+    'Update_time'             => '更新时间',
+    'Remark'                  => '备注'
+];

+ 41 - 0
application/admin/model/teacher/Collection.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace app\admin\model\teacher;
+
+use think\Model;
+use traits\model\SoftDelete;
+
+
+class Collection extends Model
+{
+
+
+
+    use SoftDelete;
+
+    // 表名
+    protected $name = 'real_exam_collection';
+    
+    // 自动写入时间戳字段
+    protected $autoWriteTimestamp = 'int';
+
+    // 定义时间戳字段名
+    protected $createTime = 'createtime';
+    protected $updateTime = 'updatetime';
+    protected $deleteTime = 'deletetime';
+
+    // 追加属性
+    protected $append = [
+
+    ];
+    
+
+    
+
+
+
+
+
+
+
+}

+ 41 - 0
application/admin/model/teacher/Exams.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace app\admin\model\teacher;
+
+use think\Model;
+use traits\model\SoftDelete;
+
+
+class Exams extends Model
+{
+
+
+
+    use SoftDelete;
+
+    // 表名
+    protected $name = 'real_exam';
+    
+    // 自动写入时间戳字段
+    protected $autoWriteTimestamp = 'int';
+
+    // 定义时间戳字段名
+    protected $createTime = 'createtime';
+    protected $updateTime = 'updatetime';
+    protected $deleteTime = 'deletetime';
+
+    // 追加属性
+    protected $append = [
+
+    ];
+    
+
+    
+
+
+
+
+
+
+
+}

+ 3 - 2
application/admin/model/teacher/Task.php

@@ -3,14 +3,15 @@
 namespace app\admin\model\teacher;
 
 use think\Model;
+use traits\model\SoftDelete;
 
 
 class Task extends Model
 {
 
-    
 
-    
+
+    use SoftDelete;
 
     // 表名
     protected $name = 'sim_task';

+ 27 - 0
application/admin/validate/teacher/Collection.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace app\admin\validate\teacher;
+
+use think\Validate;
+
+class Collection extends Validate
+{
+    /**
+     * 验证规则
+     */
+    protected $rule = [
+    ];
+    /**
+     * 提示消息
+     */
+    protected $message = [
+    ];
+    /**
+     * 验证场景
+     */
+    protected $scene = [
+        'add'  => [],
+        'edit' => [],
+    ];
+    
+}

+ 27 - 0
application/admin/validate/teacher/Exams.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace app\admin\validate\teacher;
+
+use think\Validate;
+
+class Exams extends Validate
+{
+    /**
+     * 验证规则
+     */
+    protected $rule = [
+    ];
+    /**
+     * 提示消息
+     */
+    protected $message = [
+    ];
+    /**
+     * 验证场景
+     */
+    protected $scene = [
+        'add'  => [],
+        'edit' => [],
+    ];
+    
+}

+ 99 - 0
application/admin/view/student/collection/add.html

@@ -0,0 +1,99 @@
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text">
+        </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>

+ 99 - 0
application/admin/view/student/collection/edit.html

@@ -0,0 +1,99 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text" value="{$row.sim_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text" value="{$row.question_setting_method|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text" value="{$row.exam_collection_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="{$row.exam_collection_state|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text" value="{$row.exam_collection_name|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="{$row.task_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number" value="{$row.limit_duration|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{$row.start_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{$row.end_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="{$row.create_user_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text" value="{$row.create_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{$row.create_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text" value="{$row.update_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{$row.update_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
+        </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>

+ 29 - 0
application/admin/view/student/collection/index.html

@@ -0,0 +1,29 @@
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('teacher/collection/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('teacher/collection/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('teacher/collection/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                        
+
+                        
+
+                        
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit="{:$auth->check('teacher/collection/edit')}"
+                           data-operate-del="{:$auth->check('teacher/collection/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 24 - 0
application/admin/view/student/exam/index.html

@@ -0,0 +1,24 @@
+
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('teacher/exams/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('teacher/exams/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('teacher/exams/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit="{:$auth->check('teacher/exams/edit')}"
+                           data-operate-del="{:$auth->check('teacher/exams/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 99 - 0
application/admin/view/student/practice/add.html

@@ -0,0 +1,99 @@
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text">
+        </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>

+ 99 - 0
application/admin/view/student/practice/edit.html

@@ -0,0 +1,99 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text" value="{$row.sim_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text" value="{$row.question_setting_method|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text" value="{$row.exam_collection_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="{$row.exam_collection_state|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text" value="{$row.exam_collection_name|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="{$row.task_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number" value="{$row.limit_duration|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{$row.start_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{$row.end_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="{$row.create_user_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text" value="{$row.create_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{$row.create_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text" value="{$row.update_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{$row.update_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
+        </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>

+ 29 - 0
application/admin/view/student/practice/index.html

@@ -0,0 +1,29 @@
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('teacher/collection/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('teacher/collection/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('teacher/collection/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                        
+
+                        
+
+                        
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit="{:$auth->check('teacher/collection/edit')}"
+                           data-operate-del="{:$auth->check('teacher/collection/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 99 - 0
application/admin/view/teacher/collection/add.html

@@ -0,0 +1,99 @@
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text">
+        </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>

+ 99 - 0
application/admin/view/teacher/collection/edit.html

@@ -0,0 +1,99 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text" value="{$row.sim_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text" value="{$row.question_setting_method|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text" value="{$row.exam_collection_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="{$row.exam_collection_state|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text" value="{$row.exam_collection_name|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="{$row.task_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number" value="{$row.limit_duration|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{$row.start_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{$row.end_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="{$row.create_user_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text" value="{$row.create_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{$row.create_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text" value="{$row.update_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{$row.update_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
+        </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>

+ 29 - 0
application/admin/view/teacher/collection/index.html

@@ -0,0 +1,29 @@
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('teacher/collection/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('teacher/collection/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('teacher/collection/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                        
+
+                        
+
+                        
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit="{:$auth->check('teacher/collection/edit')}"
+                           data-operate-del="{:$auth->check('teacher/collection/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 105 - 0
application/admin/view/teacher/exams/add.html

@@ -0,0 +1,105 @@
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_id" data-rule="required" data-source="exam/collection/index" class="form-control selectpage" name="row[exam_collection_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Seat_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-seat_id" data-rule="required" data-source="seat/index" class="form-control selectpage" name="row[seat_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_id" data-rule="required" data-source="sim/index" class="form-control selectpage" name="row[sim_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_status')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_status" class="form-control" name="row[exam_status]" type="text" value="0">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Total_score')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-total_score" class="form-control" name="row[total_score]" type="number">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Deduction_total_score')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-deduction_total_score" class="form-control" name="row[deduction_total_score]" type="number">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Login_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-login_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[login_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Logout_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-logout_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[logout_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text">
+        </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>

+ 105 - 0
application/admin/view/teacher/exams/edit.html

@@ -0,0 +1,105 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_id" data-rule="required" data-source="exam/collection/index" class="form-control selectpage" name="row[exam_collection_id]" type="text" value="{$row.exam_collection_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Seat_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-seat_id" data-rule="required" data-source="seat/index" class="form-control selectpage" name="row[seat_id]" type="text" value="{$row.seat_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_id" data-rule="required" data-source="sim/index" class="form-control selectpage" name="row[sim_id]" type="text" value="{$row.sim_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_status')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_status" class="form-control" name="row[exam_status]" type="text" value="{$row.exam_status|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Total_score')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-total_score" class="form-control" name="row[total_score]" type="number" value="{$row.total_score|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Deduction_total_score')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-deduction_total_score" class="form-control" name="row[deduction_total_score]" type="number" value="{$row.deduction_total_score|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{$row.start_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{$row.end_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Login_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-login_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[login_time]" type="text" value="{$row.login_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Logout_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-logout_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[logout_time]" type="text" value="{$row.logout_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text" value="{$row.create_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{$row.create_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text" value="{$row.update_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{$row.update_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
+        </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>

+ 25 - 0
application/admin/view/teacher/exams/index.html

@@ -0,0 +1,25 @@
+
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="tableTitle" style="font-size: 16px;margin: 10px 0">成绩列表</div>
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('teacher/exams/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('teacher/exams/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('teacher/exams/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit="{:$auth->check('teacher/exams/edit')}"
+                           data-operate-del="{:$auth->check('teacher/exams/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 99 - 0
application/admin/view/teacher/practice/add.html

@@ -0,0 +1,99 @@
+<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{:date('Y-m-d H:i:s')}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text">
+        </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>

+ 99 - 0
application/admin/view/teacher/practice/edit.html

@@ -0,0 +1,99 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Sim_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-sim_type" data-rule="required" class="form-control" name="row[sim_type]" type="text" value="{$row.sim_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Question_setting_method')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-question_setting_method" data-rule="required" class="form-control" name="row[question_setting_method]" type="text" value="{$row.question_setting_method|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_type')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_type" data-rule="required" class="form-control" name="row[exam_collection_type]" type="text" value="{$row.exam_collection_type|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_state')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_state" data-rule="required" class="form-control" name="row[exam_collection_state]" type="text" value="{$row.exam_collection_state|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Exam_collection_name')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-exam_collection_name" data-rule="required" class="form-control" name="row[exam_collection_name]" type="text" value="{$row.exam_collection_name|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Task_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-task_id" data-rule="required" data-source="task/index" class="form-control selectpage" name="row[task_id]" type="text" value="{$row.task_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Limit_duration')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-limit_duration" class="form-control" name="row[limit_duration]" type="number" value="{$row.limit_duration|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{$row.start_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('End_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-end_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[end_time]" type="text" value="{$row.end_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_user_id')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_user_id" data-rule="required" data-source="create/user/index" class="form-control selectpage" name="row[create_user_id]" type="text" value="{$row.create_user_id|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_by" class="form-control" name="row[create_by]" type="text" value="{$row.create_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Create_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-create_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[create_time]" type="text" value="{$row.create_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_by')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_by" class="form-control" name="row[update_by]" type="text" value="{$row.update_by|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Update_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-update_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[update_time]" type="text" value="{$row.update_time}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
+        </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>

+ 29 - 0
application/admin/view/teacher/practice/index.html

@@ -0,0 +1,29 @@
+<div class="panel panel-default panel-intro">
+    {:build_heading()}
+
+    <div class="panel-body">
+        <div id="myTabContent" class="tab-content">
+            <div class="tab-pane fade active in" id="one">
+                <div class="widget-body no-padding">
+                    <div id="toolbar" class="toolbar">
+                        <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('teacher/collection/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
+                        <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('teacher/collection/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
+                        <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('teacher/collection/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
+                        
+
+                        
+
+                        
+                    </div>
+                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
+                           data-operate-edit="{:$auth->check('teacher/collection/edit')}"
+                           data-operate-del="{:$auth->check('teacher/collection/del')}"
+                           width="100%">
+                    </table>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>

+ 12 - 1
application/common/model/Config.php

@@ -3,7 +3,7 @@
 namespace app\common\model;
 
 use think\Model;
-
+use think\Db;
 /**
  * 配置模型
  */
@@ -91,6 +91,17 @@ class Config extends Model
         return $result;
     }
 
+    public static function getSimTypeList()
+    {
+         $sim_sim_type_list =  Db::name('config')->where('name', 'sim_sim_type')->value('content');
+         return json_decode($sim_sim_type_list,true);
+    }
+    public static function getSimQuestionList()
+    {
+        $sim_question_setting_method =  Db::name('config')->where('name', 'sim_question_setting_method')->value('content');
+        return json_decode($sim_question_setting_method,true);
+    }
+
     /**
      * 读取分类分组列表
      * @return array

+ 72 - 0
public/assets/js/backend/student/collection.js

@@ -0,0 +1,72 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
+
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'student/collection/index' + location.search,
+                    table: 'teacher_collection',
+                }
+            });
+
+            var table = $("#table");
+
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'exam_collection_id',
+                sortName: 'exam_collection_id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                searchFormVisible:true,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'exam_collection_id', title: __('编号')},
+                        {field: 'exam_collection_name', title: __('Exam_collection_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
+                        {field: 'question_setting_method', title: __('Question_setting_method'),searchList:{"1":"系统随机","2":"教师自选","3":"任务自选"},formatter: Table.api.formatter.simmethod},
+                        {field: 'exam_collection_type', title: __('Exam_collection_type'),operate: false,formatter: function (value, row, index) {
+                                return '考试';
+                            }
+                        },
+                        {
+                            field: 'exam_collection_state',searchList:{"2":"打开","3":"关闭"},
+                            title: __('Exam_collection_state'),
+                            align: 'center',
+                            table: table,disable:true,
+                            formatter: Table.api.formatter.collectonstate
+                        },
+
+                        {field: 'limit_duration', title: __('Limit_duration')},
+                        {field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'create_user_id', title: __('Create_user_id')},
+                        {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
+                        {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
+                        // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 64 - 0
public/assets/js/backend/student/exam.js

@@ -0,0 +1,64 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
+
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'student/exam/index' + location.search,
+                    table: 'teacher_exams',
+                }
+            });
+
+            var table = $("#table");
+
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'exam_id',
+                sortName: 'exam_id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                searchFormVisible:true,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'exam_id', title: __('Exam_id')},
+                        {field: 'exam_collection_id', title: __('Exam_collection_id')},
+                        {field: 'user_id', title: __('User_id')},
+                        {field: 'seat_id', title: __('Seat_id')},
+                        // {field: 'sim_id', title: __('Sim_id')},
+                        {field: 'exam_status', title: __('Exam_status')},
+                        {field: 'total_score', title: __('Total_score')},
+                        // {field: 'deduction_total_score', title: __('Deduction_total_score')},
+                        {field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'login_time', title: __('Login_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'logout_time', title: __('Logout_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
+                        {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
+                        // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 72 - 0
public/assets/js/backend/student/practice.js

@@ -0,0 +1,72 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
+
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'student/collection/index' + location.search,
+                    table: 'teacher_collection',
+                }
+            });
+
+            var table = $("#table");
+
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'exam_collection_id',
+                sortName: 'exam_collection_id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                searchFormVisible:true,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'exam_collection_id', title: __('编号')},
+                        {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
+                        {field: 'question_setting_method', title: __('Question_setting_method'),searchList:{"1":"系统随机","2":"教师自选","3":"任务自选"},formatter: Table.api.formatter.simmethod},
+                        {field: 'exam_collection_type', title: __('Exam_collection_type'),operate: false,formatter: function (value, row, index) {
+                                return '练习';
+                            }
+                        },
+                        {
+                            field: 'exam_collection_state',searchList:{"2":"打开","3":"关闭"},
+                            title: __('Exam_collection_state'),
+                            align: 'center',
+                            table: table,disable:true,
+                            formatter: Table.api.formatter.collectonstate
+                        },
+                        {field: 'exam_collection_name', title: __('Exam_collection_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        // {field: 'task_id', title: __('Task_id')},
+                        {field: 'limit_duration', title: __('Limit_duration')},
+                        {field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'create_user_id', title: __('Create_user_id')},
+                        {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
+                        {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
+                        // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 78 - 0
public/assets/js/backend/teacher/collection.js

@@ -0,0 +1,78 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
+
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'teacher/collection/index' + location.search,
+                    add_url: 'teacher/collection/add',
+                    edit_url: 'teacher/collection/edit',
+                    del_url: 'teacher/collection/del',
+                    multi_url: 'teacher/collection/multi',
+                    import_url: 'teacher/collection/import',
+                    table: 'teacher_collection',
+                }
+            });
+
+            var table = $("#table");
+
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'exam_collection_id',
+                sortName: 'exam_collection_id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                searchFormVisible:true,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'exam_collection_id', title: __('编号')},
+                        {field: 'exam_collection_name', title: __('Exam_collection_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
+                        {field: 'question_setting_method', title: __('Question_setting_method'),searchList:{"1":"系统随机","2":"教师自选","3":"任务自选"},formatter: Table.api.formatter.simmethod},
+                        {field: 'exam_collection_type', title: __('Exam_collection_type'),operate: false,formatter: function (value, row, index) {
+                                return '考试';
+                            }
+                        },
+                        {
+                            field: 'exam_collection_state',searchList:{"2":"打开","3":"关闭"},
+                            title: __('Exam_collection_state'),
+                            align: 'center',
+                            table: table,
+                            formatter: Table.api.formatter.collectonstate
+                        },
+
+                        // {field: 'task_id', title: __('Task_id')},
+                        {field: 'limit_duration', title: __('Limit_duration')},
+                        {field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'create_user_id', title: __('Create_user_id')},
+                        {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
+                        {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
+                        // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 69 - 0
public/assets/js/backend/teacher/exams.js

@@ -0,0 +1,69 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
+
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'teacher/exams/index' + location.search,
+                    add_url: 'teacher/exams/add',
+                    edit_url: 'teacher/exams/edit',
+                    del_url: 'teacher/exams/del',
+                    multi_url: 'teacher/exams/multi',
+                    import_url: 'teacher/exams/import',
+                    table: 'teacher_exams',
+                }
+            });
+
+            var table = $("#table");
+
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'exam_id',
+                sortName: 'exam_id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                searchFormVisible:true,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'exam_id', title: __('Exam_id')},
+                        {field: 'exam_collection_id', title: __('Exam_collection_id')},
+                        {field: 'user_id', title: __('User_id')},
+                        {field: 'seat_id', title: __('Seat_id')},
+                        // {field: 'sim_id', title: __('Sim_id')},
+                        {field: 'exam_status', title: __('Exam_status')},
+                        {field: 'total_score', title: __('Total_score')},
+                        // {field: 'deduction_total_score', title: __('Deduction_total_score')},
+                        {field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'login_time', title: __('Login_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'logout_time', title: __('Logout_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
+                        {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
+                        // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 77 - 0
public/assets/js/backend/teacher/practice.js

@@ -0,0 +1,77 @@
+define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
+
+    var Controller = {
+        index: function () {
+            // 初始化表格参数配置
+            Table.api.init({
+                extend: {
+                    index_url: 'teacher/collection/index' + location.search,
+                    add_url: 'teacher/collection/add',
+                    edit_url: 'teacher/collection/edit',
+                    del_url: 'teacher/collection/del',
+                    multi_url: 'teacher/collection/multi',
+                    import_url: 'teacher/collection/import',
+                    table: 'teacher_collection',
+                }
+            });
+
+            var table = $("#table");
+
+            // 初始化表格
+            table.bootstrapTable({
+                url: $.fn.bootstrapTable.defaults.extend.index_url,
+                pk: 'exam_collection_id',
+                sortName: 'exam_collection_id',
+                fixedColumns: true,
+                fixedRightNumber: 1,
+                searchFormVisible:true,
+                columns: [
+                    [
+                        {checkbox: true},
+                        {field: 'exam_collection_id', title: __('编号')},
+                        {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
+                        {field: 'question_setting_method', title: __('Question_setting_method'),searchList:{"1":"系统随机","2":"教师自选","3":"任务自选"},formatter: Table.api.formatter.simmethod},
+                        {field: 'exam_collection_type', title: __('Exam_collection_type'),operate: false,formatter: function (value, row, index) {
+                                return '练习';
+                            }
+                        },
+                        {
+                            field: 'exam_collection_state',searchList:{"2":"打开","3":"关闭"},
+                            title: __('Exam_collection_state'),
+                            align: 'center',
+                            table: table,
+                            formatter: Table.api.formatter.collectonstate
+                        },
+                        {field: 'exam_collection_name', title: __('Exam_collection_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        // {field: 'task_id', title: __('Task_id')},
+                        {field: 'limit_duration', title: __('Limit_duration')},
+                        {field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        {field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'create_user_id', title: __('Create_user_id')},
+                        {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
+                        {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
+                        // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
+                        // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
+                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
+                    ]
+                ]
+            });
+
+            // 为表格绑定事件
+            Table.api.bindevent(table);
+        },
+        add: function () {
+            Controller.api.bindevent();
+        },
+        edit: function () {
+            Controller.api.bindevent();
+        },
+        api: {
+            bindevent: function () {
+                Form.api.bindevent($("form[role=form]"));
+            }
+        }
+    };
+    return Controller;
+});

+ 6 - 3
public/assets/js/backend/teacher/task.js

@@ -24,14 +24,17 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 sortName: 'task_id',
                 fixedColumns: true,
                 fixedRightNumber: 1,
+                searchFormVisible:true,
                 columns: [
                     [
                         {checkbox: true},
                         {field: 'task_id', title: __('Task_id')},
-                        {field: 'sim_type', title: __('Sim_type')},
-                        {field: 'task_type', title: __('Task_type')},
+                        {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
+                        {field: 'task_type', title: __('Task_type'),operate: false,formatter: function (value, row, index) {
+                                return '教师创建';
+                            }
+                        },
                         {field: 'name', title: __('Name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
-                        // {field: 'create_by_user_id', title: __('Create_by_user_id')},
                         {field: '', title: __('故障现象数量')},
                         {field: '', title: __('故障部位数量')},
                         {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},

+ 36 - 0
public/assets/js/require-table.js

@@ -782,6 +782,42 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                     this.icon = 'fa fa-circle';
                     return Table.api.formatter.normal.call(this, value, row, index);
                 },
+                simtype: function (value, row, index) {
+                    var custom = {'0001': 'success', '0002': 'info', '0003': 'warning'};
+                    if (typeof this.custom !== 'undefined') {
+                        custom = $.extend(custom, this.custom);
+                    }
+                    this.custom = custom;
+                    this.icon = 'fa fa-circle';
+                    return Table.api.formatter.normal.call(this, value, row, index);
+                },
+                simmethod: function (value, row, index) {
+                    var custom = {'1': 'danger', '2': 'info', '3': 'success'};
+                    if (typeof this.custom !== 'undefined') {
+                        custom = $.extend(custom, this.custom);
+                    }
+                    this.custom = custom;
+                    return Table.api.formatter.normal.call(this, value, row, index);
+                },
+                collectonstate: function (value, row, index) {
+                    var table = this.table;
+                    var options = table ? table.bootstrapTable('getOptions') : {};
+                    var pk = options.pk || "id";
+                    var color = typeof this.color !== 'undefined' ? this.color : 'success';
+                    var yes = typeof this.yes !== 'undefined' ? this.yes : 2;
+                    var no = typeof this.no !== 'undefined' ? this.no : 3;
+                    var url = typeof this.url !== 'undefined' ? this.url : '';
+                    var confirm = '';
+                    var disable = false;
+                    if (typeof this.confirm !== "undefined") {
+                        confirm = typeof this.confirm === "function" ? this.confirm.call(this, value, row, index) : this.confirm;
+                    }
+                    if (typeof this.disable !== "undefined") {
+                        disable = typeof this.disable === "function" ? this.disable.call(this, value, row, index) : this.disable;
+                    }
+                    return "<a href='javascript:;' data-toggle='tooltip' title='" + __('Click to toggle') + "' class='btn-change " + (disable ? 'btn disabled no-padding' : '') + "' data-index='" + index + "' data-id='"
+                        + row[pk] + "' " + (url ? "data-url='" + url + "'" : "") + (confirm ? "data-confirm='" + confirm + "'" : "") + " data-params='" + this.field + "=" + (value == yes ? no : yes) + "'><i class='fa fa-toggle-on text-success text-" + color + " " + (value == yes ? '' : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
+                },
                 normal: function (value, row, index) {
                     var colorArr = ["primary", "success", "danger", "warning", "info", "gray", "red", "yellow", "aqua", "blue", "navy", "teal", "olive", "lime", "fuchsia", "purple", "maroon"];
                     var custom = {};