瀏覽代碼

预案演练任务代码提交

jingyuanchao 2 年之前
父節點
當前提交
961faa9baf

+ 9 - 0
src/api/core/drill/drillDictionary.js

@@ -42,3 +42,12 @@ export function delDrillDictionary(id) {
     method: 'delete'
   })
 }
+
+// 查询预案演练库列表
+export function initList() {
+  return request({
+    url: '/core/drillDictionary/listData',
+    method: 'get'
+  })
+}
+

+ 3 - 3
src/views/drill/drillDictionary/index.vue → src/views/core/drill/drillDictionary/index.vue

@@ -134,9 +134,9 @@ import {
   addDrillDictionary,
   updateDrillDictionary
 } from "@/api/core/drill/drillDictionary";
-import OrgTree from "@/components/orgTree/index.vue";
-import kOrgTree from "@/components/k-orgTree/index.vue";
-import KFileUpload from "@/components/K-FileUpload/index.vue";
+import OrgTree from "@/components/orgTree";
+import kOrgTree from "@/components/k-orgTree";
+import KFileUpload from "@/components/K-FileUpload";
 import tableList from "@/mixins/tableList";
 export default {
   name: "DrillDictionary",

+ 11 - 11
src/views/core/drill/plan/index.vue

@@ -61,17 +61,12 @@
           <el-table-column label="计划名称" align="center" prop="planName"/>
           <el-table-column label="计划创建机构" align="center" prop="createOrgName"/>
           <el-table-column label="计划所属机构" align="center" prop="belongOrgName"/>
-          <el-table-column label="培训机构类型" align="center" prop="execOrgType">
+          <el-table-column label="演练机构类型" align="center" prop="execOrgType">
             <template slot-scope="scope">
               <dict-tag :options="dict.type.sys_org_type" :value="scope.row.execOrgType"/>
             </template>
           </el-table-column>
-          <el-table-column label="计划周期" align="center" prop="planCycle">
-            <template slot-scope="scope">
-              <dict-tag :options="dict.type.drill_plan_cycle" :value="scope.row.planCycle"/>
-            </template>
-          </el-table-column>
-          <el-table-column prop="planRoleNameList" label="培训角色">
+          <el-table-column prop="planRoleNameList" label="演练角色">
             <template slot-scope="scope">
               <template v-if="scope.row.planRoleNameList">
                 <el-tag size="mini" type="success"
@@ -85,7 +80,12 @@
               </template>
             </template>
           </el-table-column>
-          <el-table-column label="培训次数" align="center" prop="execTimes"/>
+          <el-table-column label="计划周期" align="center" prop="planCycle">
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.drill_plan_cycle" :value="scope.row.planCycle"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="演练次数" align="center" prop="execTimes"/>
           <el-table-column label="备注" align="center" prop="remark"/>
           <el-table-column label="修改人" align="center" prop="updateBy"/>
           <el-table-column label="计划状态" align="center" prop="planStatus">
@@ -303,16 +303,16 @@ export default {
           {required: true, message: "计划周期不能为空", trigger: "blur"}
         ],
         execTimes: [
-          {required: true, message: "培训次数不能为空", trigger: "blur"}
+          {required: true, message: "演练次数不能为空", trigger: "blur"}
         ],
         planStatus: [
           {required: true, message: "计划状态不能为空", trigger: "blur"}
         ],
         execOrgType: [
-          {required: true, message: "培训机构类型不能为空", trigger: "blur"}
+          {required: true, message: "演练机构类型不能为空", trigger: "blur"}
         ],
         planRoleId: [
-          {required: true, message: "培训角色不能为空", trigger: "blur"}
+          {required: true, message: "演练角色不能为空", trigger: "blur"}
         ],
       },
       planRoleList: [],

+ 195 - 228
src/views/core/drill/task/dialog.info.vue

@@ -1,248 +1,215 @@
 <template>
-    <div class="edu-training-edit">
-        <el-dialog title="教育培训详情" :visible.sync="isShow" width="960px">
-            <div class="page-body">
-                <el-form :model="formData" size="small" ref="form" label-position="right" label-width="120px"
-                    label-suffix=":">
-                    <el-row>
+  <div class="edu-training-edit">
+    <el-dialog title="教育培训详情" :visible.sync="isShow" width="960px">
+      <div class="page-body">
+        <el-form :model="formData" size="small" ref="form" label-position="right" label-width="120px"
+                 label-suffix=":">
+          <el-row>
 
-                        <!-- 培训主题 -->
-                        <el-col :span="12">
-                            <el-form-item prop="type" label="培训主题">{{
-                                formData.title
-                            }}</el-form-item>
-                        </el-col>
+            <el-col :span="12">
+              <el-form-item prop="type" label="演练主题">{{
+                  formData.title
+                }}
+              </el-form-item>
+            </el-col>
 
-                        <!-- 机构 -->
-                        <el-col :span="12">
-                            <el-form-item label="培训机构">{{
-                                formData.orgName
-                            }}</el-form-item>
-                        </el-col>
-                        <!-- 执行角色 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="eduJobId" label="执行角色">{{
-                                formData.eduJobNames
-                            }}</el-form-item>
-                        </el-col> -->
-                        <!-- 类型 -->
-                        <el-col :span="12">
-                            <el-form-item label="类型">
-                                <template>
-                                    <dict-tag :options="dict.type.edu_type" :value="formData.type" />
-                                </template>
-                            </el-form-item>
-                        </el-col>
-                        <!-- 主持人 -->
-                        <el-col :span="12">
-                            <el-form-item prop="hostId" label="主持人">{{
-                                formData.hostName
-                            }}</el-form-item>
-                        </el-col>
-                        <!-- 记录人 -->
-                        <el-col :span="24">
-                            <el-form-item prop="recorderId" label="记录人">{{
-                                formData.recorderName
-                            }}</el-form-item>
-                        </el-col>
+            <el-col :span="12">
+              <el-form-item label="演练机构">{{
+                  formData.orgName
+                }}
+              </el-form-item>
+            </el-col>
 
-                        <!-- 培训开始时间 -->
-                        <el-col :span="12">
-                            <el-form-item prop="trainingStartDateTime" label="培训开始时间">{{
-                                formData.trainingStartDateTime
-                            }}</el-form-item>
-                        </el-col>
-                        <!-- 培训截止时间 -->
-                        <el-col :span="12">
-                            <el-form-item prop="trainingEndDateTime" label="培训截止时间">{{
-                                formData.trainingEndDateTime
-                            }}</el-form-item>
-                        </el-col>
-                        <!-- 开始日期 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="dateTime" label="开始日期">{{
-                                formData.startDate
-                            }}</el-form-item>
-                        </el-col> -->
-                        <!-- 截止日期 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="dateTime" label="截止日期">{{
-                                formData.endDate
-                            }}</el-form-item>
-                        </el-col> -->
-                        <!-- 内容 -->
-                        <el-col :span="24">
-                            <el-form-item prop="content" label="培训内容">{{
-                                formData.content
-                            }}</el-form-item>
-                        </el-col>
-                        <!-- 总结 -->
-                        <el-col :span="24">
-                            <el-form-item prop="note" label="总结">{{
-                                formData.note
-                            }}</el-form-item>
-                        </el-col>
+            <el-col :span="12">
+              <el-form-item label="演练项目">{{
+                  formData.typeName
+                }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="演练地点">{{
+                  formData.drillSite
+                }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="trainingStartDateTime" label="演练时间">{{
+                  formData.drillTime
+                }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="hostId" label="指挥人">{{
+                  formData.hostName
+                }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="hostId" label="预设案由">{{
+                  formData.presetCase
+                }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="hostId" label="演练情况">{{
+                  formData.drillSituation
+                }}
+              </el-form-item>
+            </el-col>
 
 
-                        <!-- 参与人数 -->
-                        <el-col :span="12">
-                            <el-form-item prop="dueCount" label="参与人员">{{
-                                formData.taskUserList ? formData.taskUserList.filter((x) => x.type === 1)
-                                    .map((v) => v.userName).join(",") : ""
-                            }}</el-form-item>
-                        </el-col>
-                        <el-col :span="12">
-                            <el-form-item prop="dueCount" label="缺陷人员">{{
-                                formData.taskUserList ? formData.taskUserList.filter((x) => x.type === 2)
-                                    .map((v) => v.userName).join(",") : ""
-                            }}</el-form-item>
-                        </el-col>
-                        <!-- 图片 -->
-                        <el-col :span="24">
-                            <el-form-item prop="imageList" label="培训图片">
-                                <ImageListPreview v-model="formData.imageList"></ImageListPreview>
-                                <!-- <k-multi-upload :disabled="!!id" v-model="formData.imageList" limit="4" byModule
-                                    moduleName="edu-training" v-if="isShow" /> -->
-                            </el-form-item>
-                        </el-col>
-                        <!-- 图片 -->
-                        <el-col :span="24">
-                            <el-form-item prop="imageList" label="签名图片">
-                                <ImageListPreview v-model="formData.signImageList"></ImageListPreview>
-                                <!-- <k-multi-upload :disabled="!!id" v-model="formData.imageList" limit="4" byModule
-                                    moduleName="edu-training" v-if="isShow" /> -->
-                            </el-form-item>
-                        </el-col>
+            <!-- 参与人数 -->
+            <el-col :span="12">
+              <el-form-item prop="dueCount" label="参与人员">{{
+                  formData.taskUserList ? formData.taskUserList.filter((x) => x.type === 1)
+                    .map((v) => v.userName).join(",") : ""
+                }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="dueCount" label="缺席人员">{{
+                  formData.taskUserList ? formData.taskUserList.filter((x) => x.type === 2)
+                    .map((v) => v.userName).join(",") : ""
+                }}
+              </el-form-item>
+            </el-col>
+            <!-- 图片 -->
+            <el-col :span="12">
+              <el-form-item prop="imageList" label="上传图片">
+                <ImageListPreview v-model="formData.imageList"></ImageListPreview>
+              </el-form-item>
+            </el-col>
+            <!-- 图片 -->
+            <el-col :span="12">
+              <el-form-item prop="imageList" label="签名图片">
+                <ImageListPreview v-model="formData.signImageList"></ImageListPreview>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item prop="commentScore" label="评分">
+                <el-rate
+                  v-model="formData.commentScore"
+                  :icon-classes="iconClasses"
+                  void-icon-class="icon-rate-face-off"
+                  :colors="['#99A9BF', '#F7BA2A', '#FF9900']">
+                </el-rate>
+              </el-form-item>
+            </el-col>
 
-                        <!-- 文件 -->
-                        <el-col :span="24">
-                            <el-form-item prop="fileList" label="文件" :disabled="true">
-                                <div v-for="(v, i) in formData.fileList" :key="i">
-                                    <a class="downloadLink" @click="onDownload(JSON.parse(v).url, JSON.parse(v).name)">
-                                        {{ JSON.parse(v).name }}
-                                    </a>
-                                </div>
+            <el-col :span="24">
+              <el-form-item prop="comment" label="评语">{{
+                  formData.comment
+                }}
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
 
-                            </el-form-item>
-                        </el-col>
-                    </el-row>
-                </el-form>
-            </div>
-
-            <div slot="footer" class="dialog-footer">
-                <el-button @click="onHide">关闭</el-button>
-            </div>
-        </el-dialog>
-    </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHide">关闭</el-button>
+      </div>
+    </el-dialog>
+  </div>
 </template>
 
 <script>
-import { mapState, mapMutations } from "vuex";
-import { getEduTask } from "@/api/core/edu/eduTask";
+import {mapState, mapMutations} from "vuex";
+import {getEduTask} from "@/api/core/edu/eduTask";
 import {getDrillTask} from "@/api/core/drill/drillTask";
+import {initList} from "@/api/core/drill/drillDictionary";
 
 export default {
-    components: {},
-    dicts: ['edu_type', 'edu_task_status'],
-    data() {
-        const params = this.$route.params;
-        return {
-            id: params ? params.id : null,
-            isShow: false,
-            formData: this.reset(),
-        };
+  components: {},
+  dicts: ['edu_type', 'edu_task_status'],
+  data() {
+    const params = this.$route.params;
+    return {
+      id: params ? params.id : null,
+      isShow: false,
+      formData: this.reset(),
+      drillTypeOptions:[],
+      iconClasses: ['icon-rate-face-1', 'icon-rate-face-2', 'icon-rate-face-3'] // 等同于 { 2: 'icon-rate-face-1', 4: { value: 'icon-rate-face-2', excluded: true }, 5: 'icon-rate-face-3' }
+    };
+  },
+  props: {},
+  watch: {},
+  computed: {
+    ...mapState(["loginUser"]),
+  },
+  methods: {
+    ...mapMutations([]),
+    reset(other = {}) {
+      return {
+        id: null,
+        type: null,
+        host: null,
+        drillSite: null,
+        drillTime: null,
+        hostName: null,
+        presetCase: null,
+        drillSituation: null,
+        imageList: null,
+        signImageList: null,
+        commentScore: 5,
+
+        org: {},
+        ...other,
+      };
     },
-    props: {},
-    watch: {},
-    computed: {
-        ...mapState(["loginUser"]),
+    async refresh(id, other) {
+      if (!id) {
+        this.reset(other);
+      } else {
+        getDrillTask(id).then(response => {
+          this.formData = response.data;
+          this.formData.signImageList = this.getSingImageList();
+          this.loading = false;
+        })
+      }
     },
-    methods: {
-        ...mapMutations([]),
-        reset(other = {}) {
-            return {
-                id: null,
-                type: null,
-                host: {},
-                recorder: {},
-                dateTime: null,
-                dueCount: null,
-                actualCount: null,
-                content: null,
-                imageList: null,
-                signImageList:null,
-                org: {},
-                ...other,
-            };
-        },
-        async refresh(id, other) {
-            if (!id) {
-                this.reset(other);
-            }
-            else {
-                getDrillTask(id).then(response => {
-                    this.formData = response.data;
-                    this.formData.signImageList=this.getSingImageList();
-                    this.loading = false;
-                })
-            }
-        },
-        async show(id, other = {}) {
-            this.id = id;
-            await this.refresh(id, other);
-            this.isShow = true;
-        },
-        // 事件
-        onHide() {
-            this.isShow = false;
-        },
-        onDownload(url, filename) {
-            let this_ = this;
-            this.getBlob(url, function (blob) {
-                this_.saveAs(blob, filename);
-            });
-        },
-        getSingImageList() {
-            let res = this.formData.taskUserList ? this.formData.taskUserList.filter((x) => x.type === 1 && x.sign == 1)
-                .map((v) => v.signImage).join(",") : null;
-            console.log("getSingImage",res)
-            return res;
-        },
-        getBlob(url, cb) {
-            var xhr = new XMLHttpRequest();
-            xhr.open("GET", url, true);
-            xhr.responseType = "blob";
-            xhr.onload = function () {
-                if (xhr.status === 200) {
-                    cb(xhr.response);
-                }
-            };
-            xhr.send();
-        },
-       saveAs(blob, filename) {
-            if (window.navigator.msSaveOrOpenBlob) {
-                navigator.msSaveBlob(blob, filename);
-            } else {
-              /* var link = document.createElement("a");
-                var body = document.querySelector("body");
-
-                link.href = window.URL.createObjectURL(blob);
-                link.download = filename;
-
-                // fix Firefox
-                link.style.display = "none";
-                body.appendChild(link);
-
-                link.click();
-                body.removeChild(link);
-
-               window.URL.revokeObjectURL(link.href);*/
-           }
-        },
-        // 事件
-        //apimark//
+    async show(id, other = {}) {
+      this.id = id;
+      await this.refresh(id, other);
+      this.isShow = true;
+    },
+    // 事件
+    onHide() {
+      this.isShow = false;
+    },
+    onDownload(url, filename) {
+      let this_ = this;
+      this.getBlob(url, function (blob) {
+        this_.saveAs(blob, filename);
+      });
+    },
+    getSingImageList() {
+      let res = this.formData.taskUserList ? this.formData.taskUserList.filter((x) => x.type === 1 && x.sign == 1)
+        .map((v) => v.signImage).join(",") : null;
+      console.log("getSingImage", res)
+      return res;
+    },
+    getBlob(url, cb) {
+      var xhr = new XMLHttpRequest();
+      xhr.open("GET", url, true);
+      xhr.responseType = "blob";
+      xhr.onload = function () {
+        if (xhr.status === 200) {
+          cb(xhr.response);
+        }
+      };
+      xhr.send();
     },
-    mounted() { },
+    initDrillTypeOptions(){
+      initList().then(response => {
+        this.drillTypeOptions = response;
+      })
+    }
+    // 事件
+    //apimark//
+  },
+  mounted() {
+  },
 };
 </script>
 

+ 73 - 148
src/views/core/drill/task/dialog.perform.vue

@@ -3,136 +3,68 @@
     <el-dialog :title="'培训登记'" :visible.sync="isShow" width="960px">
       <div class="page-body">
         <el-form :model="formData" :rules="formDataRules" size="small" ref="form" label-position="right"
-          label-width="120px" label-prefix=":">
+                 label-width="120px" label-prefix=":">
           <el-row>
             <!-- 培训主题 -->
             <el-col :span="12">
-              <el-form-item prop="title" label="培训主题">
-                <!-- <el-input
-                        v-model="formData.title"
-                        :maxlength="32"
-                        placeholder="请输入培训主题"
-                        clearable
-                        readonly
-                        disabled
-                    /> -->
+              <el-form-item prop="title" label="演练主题">
                 {{ formData.title }}
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item prop="orgName" label="培训机构">
+              <el-form-item prop="orgName" label="演练机构">
                 {{ formData.orgName }}
               </el-form-item>
             </el-col>
-            <!-- 类型 -->
-            <el-col :span="24">
-              <el-form-item prop="type" label="类型">
-                <el-select v-model="formData.type" placeholder="请选择执行机构类型" clearable>
-                  <el-option v-for="dict in dict.type.edu_type" :key="dict.value" :label="dict.label"
-                    :value="parseInt(dict.value)" />
-                </el-select>
-                <!-- <k-select-constant
-                        name="EduTrainingType"
-                        v-model="formData.type"
-                        placeholder="请选择类型"
-                    ></k-select-constant> -->
-              </el-form-item>
-            </el-col>
             <el-col :span="12">
-              <el-form-item v-if="formData.id" prop="dateTime" label="培训开始时间">
-                <el-date-picker v-model="formData.trainingStartDateTime" :picker-options="startDatepickerOptions"     
-                  type="datetime" placeholder="选择日期"  @change="startDateChanged">
+              <el-form-item prop="dateTime" label="演练时间">
+                <el-date-picker v-model="formData.drillTime" :picker-options="startDatepickerOptions"
+                                type="datetime" placeholder="选择日期">
                 </el-date-picker>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item v-if="formData.id" prop="dateTime" label="培训结束时间">
-                <el-date-picker v-model="formData.trainingEndDateTime" :picker-options="endDatepickerOptions"
-                  type="datetime" placeholder="选择日期">
-                </el-date-picker>
+              <el-form-item prop="content" label="演练地点">
+                <el-input v-model="formData.content" placeholder="请输入演练地点" :length="2000"/>
               </el-form-item>
             </el-col>
-            <!-- 内容 -->
             <el-col :span="24">
-              <el-form-item prop="content" label="内容">
-                <k-textarea v-model="formData.content" placeholder="请输入内容" :length="2000" />
+              <el-form-item prop="type" label="演练项目">
+                <el-select v-model="formData.type" clearable placeholder="请选择演练项目">
+                  <el-option
+                    v-for="item in this.drillTypeOptions"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id">
+                  </el-option>
+                </el-select>
               </el-form-item>
             </el-col>
 
-            <!-- 主持人 -->
-            <!-- <el-col :span="24">
-              <el-form-item v-if="formData.id" prop="hostId" label="主持人">
-                <k-select
-                  v-model="formData.hostId"
-                  url="/user/find/all"
-                  :params="{ orgId: formData.orgId }"
-                  placeholder="请选择主持人"
-                ></k-select>
-              </el-form-item>
-            </el-col>
             <el-col :span="24">
-              <el-form-item v-if="formData.id" prop="recorderId" label="记录人">
-                <k-select
-                  v-model="formData.recorderId"
-                  url="/user/find/all"
-                  :params="{ orgId: formData.orgId }"
-                  placeholder="请选择记录人"
-                ></k-select>
-              </el-form-item>
-            </el-col> -->
-            <!-- 截止日期 -->
-            <!-- <el-col :span="24">
-              <el-form-item v-if="formData.id" prop="dateTime" label="培训时间">
-                <el-date-picker
-                  v-model="formData.dateTime"
-                  type="datetime"
-                  placeholder="选择日期"
-                >
-                </el-date-picker>
+              <el-form-item prop="content" label="预设案由">
+                <k-textarea v-model="formData.content" placeholder="请输入预设案由" :length="2000"/>
               </el-form-item>
-            </el-col> -->
-            <!-- 总结 -->
+            </el-col>
+
             <el-col :span="24">
-              <el-form-item v-if="formData.id" prop="note" label="总结">
-                <k-textarea v-model="formData.note" placeholder="请输入总结" :length="1000" />
+              <el-form-item v-if="formData.id" prop="note" label="演练情况">
+                <k-textarea v-model="formData.note" placeholder="请输入演练情况" :length="1000"/>
               </el-form-item>
             </el-col>
-            <!-- 应到人数 -->
-            <!-- <el-col :span="24">
-              <el-form-item v-if="formData.id" prop="dueCount" label="应到人数">
-                <el-input-number
-                  v-model="formData.dueCount"
-                  :min="0"
-                  placeholder="请输入应到人数"
-                ></el-input-number>
-              </el-form-item>
-            </el-col> -->
-            <!-- 实到人数 -->
-            <!-- <el-col :span="24">
-              <el-form-item
-                v-if="formData.id"
-                prop="actualCount"
-                label="实到人数"
-              >
-                <el-input-number
-                  v-model="formData.actualCount"
-                  :min="0"
-                  placeholder="请输入实到人数"
-                ></el-input-number>
-              </el-form-item>
-            </el-col> -->
-            <el-col :span="24">
+
+            <el-col :span="12">
               <el-form-item v-if="formData.id" label="参与人员">
                 <k-select :multiple="true" v-model="formData.absenceList" url="/user/find/all"
-                  :params="{ orgId: formData.orgId }" placeholder="请选择缺席人员" @select="absenceUserSelectChanged"></k-select>
-                <!-- <k-select :multiple="true" v-model="formData.absenceList" url="/user/find/all"
-                  :params="{ orgId: formData.orgId }" placeholder="请选择参与人员"></k-select> -->
+                          :params="{ orgId: formData.orgId }" placeholder="请选择缺席人员"
+                          @select="absenceUserSelectChanged"></k-select>
               </el-form-item>
             </el-col>
-            <el-col :span="24">
+            <el-col :span="12">
               <el-form-item v-if="formData.id" label="缺席人员">
                 <k-select :multiple="true" v-model="formData.absentList" url="/user/find/all"
-                  :params="{ orgId: formData.orgId }" @select="absentUserSelectChanged" placeholder="请选择缺席人员">
+                          :params="{ orgId: formData.orgId }" @select="absentUserSelectChanged"
+                          placeholder="请选择缺席人员">
                 </k-select>
               </el-form-item>
             </el-col>
@@ -142,14 +74,7 @@
                 <!-- <k-multi-upload v-model="formData.imageList" limit="4" byModule moduleName="edu-training" /> -->
               </el-form-item>
             </el-col>
-            <!-- 上传文件 -->
-            <!-- <el-col :span="24">
-              <el-form-item prop="fileList" label="上传文件">
-                <k-upload-file-multiple :disabled="!!id" v-model="formData.fileList" max="4"
-                  @uploadTriggerEvent="uploadTriggerEvent" byModule
-                  moduleName="edu-traning-perform"></k-upload-file-multiple>
-              </el-form-item>
-            </el-col> -->
+
           </el-row>
         </el-form>
       </div>
@@ -164,14 +89,17 @@
 </template>
 
 <script>
-import { mapState, mapMutations } from "vuex";
-import { getEduTask, recordEduTask } from "@/api/core/edu/eduTask";
+import {mapState, mapMutations} from "vuex";
+import {getEduTask, recordEduTask} from "@/api/core/edu/eduTask";
 import dayjs from "dayjs";
 import KTextarea from "@/components/common/textarea.vue";
 import KSelect from "@/components/common/userselect.vue";
 import imgUpload from "@/components/ImageUpload/index.vue";
+import {initList} from "@/api/core/drill/drillDictionary";
+import {getDrillTask} from "@/api/core/drill/drillTask";
+
 export default {
-  components: { KTextarea, KSelect, imgUpload },
+  components: {KTextarea, KSelect, imgUpload},
   data() {
     const params = this.$route.params;
     return {
@@ -179,16 +107,10 @@ export default {
       isShow: false,
       formData: this.reset(),
       formDataRules: {
-        type: [{ required: true, message: "请选择类型" }],
-        content: [{ required: true, message: "请输入内容" }],
-        // hostId: [{ required: true, message: "请输入主持人" }],
-        // recorderId: [{ required: true, message: "请输入记录人" }],
-
-        trainingStartDateTime: [{ required: true, message: "请输入培训时间" }],
-        trainingEndDateTime: [{ required: true, message: "请输入培训时间" }],
-        note: [{ required: true, message: "请输入总结" }],
-        // dueCount: [{ required: true, message: "请输入应到人数" }],
-        // actualCount: [{ required: true, message: "请输入实到人数" }],
+        type: [{required: true, message: "请选择类型"}],
+        content: [{required: true, message: "请输入内容"}],
+        drillTime: [{required: true, message: "请输入培训时间"}],
+        note: [{required: true, message: "请输入总结"}],
       },
       startDatepickerOptions: {
         disabledDate(time) {
@@ -198,6 +120,7 @@ export default {
       endDatepickerOptions: {
         disabledDate: this.endDisabledDate,
       },
+      drillTypeOptions: [],
     };
   },
   dicts: ['edu_type', 'edu_task_status'],
@@ -210,12 +133,7 @@ export default {
     ...mapMutations([]),
     reset(other = {}) {
       return {
-        // hostId: null,
-        // recorderId: null,
-        trainingStartDateTime: null,
-        trainingEndDateTime: null,
-        // dueCount: null,
-        // actualCount: null,
+        drillTime: null,
         content: null,
         title: null,
         eduJobId: null,
@@ -224,19 +142,17 @@ export default {
         absentList: [],
         orgList: [],
         fileList: [],
+
         ...other,
       };
     },
     async refresh(id, other) {
-      // this.formData = id
-      //   ? await this.$api.eduTraining.one(id)
-      //   : this.reset(other);
-
+      this.initDrillTypeOptions();
       if (!id) {
         this.reset(other);
         return;
       }
-      getEduTask(id).then(response => {
+      getDrillTask(id).then(response => {
         this.formData = response.data;
         this.loading = false;
         if (this.formData.imageList == null) {
@@ -250,17 +166,20 @@ export default {
             element.type === 1
           );
           console.log("list1", list1)
-          this.formData.absenceList = list1 ? list1.map((a) => { return a.userId; })
+          this.formData.absenceList = list1 ? list1.map((a) => {
+              return a.userId;
+            })
             : [];
 
           let list2 = this.formData.taskUserList.filter((element) =>
             element.type === 2
           );
           console.log("list2", list2)
-          this.formData.absentList = list2 ? list2.map((a) => { return a.userId; })
+          this.formData.absentList = list2 ? list2.map((a) => {
+              return a.userId;
+            })
             : [];
-        }
-        else {
+        } else {
           this.formData.absenceList = [];
           this.formData.absentList = [];
         }
@@ -280,8 +199,7 @@ export default {
       // 将类型为2的数据删除
       if (this.formData.taskUserList) {
         this.formData.taskUserList = this.formData.taskUserList.filter(x => x.type == 1);
-      }
-      else {
+      } else {
         this.formData.taskUserList = [];
       }
       let tempList = list.map(x => {
@@ -299,8 +217,7 @@ export default {
       // 将类型为1的数据删除
       if (this.formData.taskUserList) {
         this.formData.taskUserList = this.formData.taskUserList.filter(x => x.type == 2);
-      }
-      else {
+      } else {
         this.formData.taskUserList = [];
       }
       let tempList = list.map(x => {
@@ -324,7 +241,7 @@ export default {
         this.$message.error("参与人员与缺席人员重复,请重新选择!");
         return;
       }
-      let request = { submitType: 1, ...this.formData };
+      let request = {submitType: 1, ...this.formData};
       if (request.trainingStartDateTime)
         request.trainingStartDateTime = dayjs(request.trainingStartDateTime).format('YYYY-MM-DD HH:mm:ss')
 
@@ -349,13 +266,13 @@ export default {
       } else if (!this.validatePerson()) {
         this.$message.error("参与人员与缺席人员重复,请重新选择!");
       } else {
-        let request = { submitType: 2, ...this.formData };
+        let request = {submitType: 2, ...this.formData};
         if (request.trainingStartDateTime)
-        request.trainingStartDateTime = dayjs(request.trainingStartDateTime).format('YYYY-MM-DD HH:mm:ss')
+          request.trainingStartDateTime = dayjs(request.trainingStartDateTime).format('YYYY-MM-DD HH:mm:ss')
+
+        if (request.trainingEndDateTime)
+          request.trainingEndDateTime = dayjs(request.trainingEndDateTime).format('YYYY-MM-DD HH:mm:ss')
 
-      if (request.trainingEndDateTime)
-        request.trainingEndDateTime = dayjs(request.trainingEndDateTime).format('YYYY-MM-DD HH:mm:ss')
-      
         recordEduTask(request).then((v) => {
           this.$emit("success", this.formData);
           this.onHide();
@@ -374,7 +291,8 @@ export default {
       }
       return true;
     },
-    uploadTriggerEvent(value) { },
+    uploadTriggerEvent(value) {
+    },
 
     endDisabledDate(time) {
       //小于开始日期禁止选择
@@ -388,14 +306,21 @@ export default {
 
     },
     startDateChanged(time) {
-      console.log("startDateChanged",time,this.formData.trainingStartDateTime ,this.formData.trainingEndDateTime)
+      console.log("startDateChanged", time, this.formData.trainingStartDateTime, this.formData.trainingEndDateTime)
       if (dayjs(this.formData.trainingStartDateTime).isAfter(dayjs(this.formData.trainingEndDateTime))) {
         this.formData.trainingEndDateTime = this.formData.trainingStartDateTime;
-        console.log("trainingEndDateTime",this.formData.trainingEndDateTime)
+        console.log("trainingEndDateTime", this.formData.trainingEndDateTime)
       }
     },
+    initDrillTypeOptions() {
+      initList().then(response => {
+        this.drillTypeOptions = response.data;
+      })
+    }
+  },
+  mounted() {
+    this.initDrillTypeOptions()
   },
-  mounted() { },
 };
 </script>
 

+ 104 - 133
src/views/core/drill/task/index.vue

@@ -1,142 +1,113 @@
 <template>
   <div class="app-container">
     <el-row :gutter="20">
-    <el-col :span="4" :xs="24">
-      <org-tree v-model="queryParams.orgId" @defaultKey="getDefaultKey" @checkChange="checkChange"
-                @click="clickTreeNode"></org-tree>
-    </el-col>
-    <el-col :span="20" :xs="24">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
+      <el-col :span="4" :xs="24">
+        <org-tree v-model="queryParams.orgId" @defaultKey="getDefaultKey" @checkChange="checkChange"
+                  @click="clickTreeNode"></org-tree>
+      </el-col>
+      <el-col :span="20" :xs="24">
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
+                 label-width="100px">
 
-      <el-form-item label="培训主题" prop="title">
-        <el-input
-          v-model="queryParams.title"
-          placeholder="请输入培训岗位"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="任务时间" prop="rangen">
-        <el-date-picker
-          v-model="queryParams.range"
-          type="daterange"
-          value-format="yyyy-MM-dd"
-          placeholder="请选择开始日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="培训类型" prop="type">
-        <el-select v-model="queryParams.type" placeholder="请选择执行机构类型" clearable>
-            <el-option
-              v-for="dict in dict.type.edu_type"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-            />
-          </el-select>
-      </el-form-item>
-      <el-form-item label="培训状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择培训状态" clearable>
-            <el-option
-              v-for="dict in dict.type.edu_task_status"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
+          <el-form-item label="演练主题" prop="title">
+            <el-input
+              v-model="queryParams.title"
+              placeholder="请输入演练主题"
+              clearable
+              @keyup.enter.native="handleQuery"
             />
-          </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
+          </el-form-item>
+          <el-form-item label="任务时间" prop="rangen">
+            <el-date-picker
+              v-model="queryParams.range"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              placeholder="请选择开始日期">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>
 
 
-    <el-table height="550px" v-loading="loading" :data="eduTaskList" @selection-change="handleSelectionChange">
-      <el-table-column label="培训机构" align="center" prop="orgName" />
-      <el-table-column label="培训角色" align="center" >
-        <template slot-scope="scope">
-            <template v-if="scope.row.taskRoleNameList  ">
-              <el-tag size="mini" type="success" v-for="(item, index) in (scope.row.taskRoleNameList || '').split(',')"
-                      :key="index">
-                {{ item }}
-              </el-tag>
+        <el-table height="550px" v-loading="loading" :data="eduTaskList" @selection-change="handleSelectionChange">
+          <el-table-column label="演练机构" align="center" prop="orgName"/>
+          <el-table-column label="演练角色" align="center">
+            <template slot-scope="scope">
+              <template v-if="scope.row.taskRoleNameList  ">
+                <el-tag size="mini" type="success"
+                        v-for="(item, index) in (scope.row.taskRoleNameList || '').split(',')"
+                        :key="index">
+                  {{ item }}
+                </el-tag>
+              </template>
             </template>
-          </template>
-      </el-table-column>
-      <el-table-column label="培训主题" align="center" prop="title" />
-      <el-table-column label="类型" align="center"  >
-        <template slot-scope="scope">
-            <dict-tag :options="dict.type.edu_type" :value="scope.row.type"/>
-          </template>
-      </el-table-column>
+          </el-table-column>
+          <el-table-column label="演练主题" align="center" prop="title"/>
 
-      <el-table-column label="主持人" align="center" prop="hostName" />
-      <el-table-column label="开始日期" align="center" prop="startDate" width="180">
-      </el-table-column>
-      <el-table-column label="截止日期" align="center" prop="endDate" width="180">
+          <el-table-column label="开始日期" align="center" prop="startDate" width="180">
+          </el-table-column>
+          <el-table-column label="截止日期" align="center" prop="endDate" width="180">
+          </el-table-column>
+          <el-table-column label="指挥人" align="center" prop="hostName"/>
+          <el-table-column label="演练地点" align="center" prop="drillSite"/>
+          <el-table-column label="评分" align="center" prop="commentScore"/>
+
+          <el-table-column scoped-slot="comment" align="center" prop="comment" label="评语">
+            <template slot-scope="scope">
+              <div class="ellipsis" :title="scope.row.comment">{{ scope.row.comment }}</div>
+            </template>
+          </el-table-column>
 
-      </el-table-column>
-      <el-table-column label="培训时间" align="center" prop="trainingStartDateTime" width="180">
-      </el-table-column>
-      <el-table-column label="状态" align="center" prop="status" >
-        <template slot-scope="scope">
-            <dict-tag :options="dict.type.edu_task_status" :value="scope.row.status"/>
-          </template>
-      </el-table-column>
-      <el-table-column label="操作" width="120px" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-view"
-            @click="handleDetail(scope.row.id)"
-            v-hasPermi="['system:eduTask:detail']"
-          >详情</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-document-add"
-            v-if="canPerform(scope.row)"
-            @click="handleRecorded(scope.row.id)"
-            v-hasPermi="['system:eduTask:remove']"
-          >培训登记</el-button>
-          <el-button type="text" v-if="scope.row.pdfUrl" @click="onDown(scope.row.pdfUrl)"
-            >培训登记簿
-          </el-button>
-          <!-- <el-button type="text" @click="onEdit(scope.row)">查看</el-button>
-          <el-button
-              type="text"
-              v-if="
-              r.row.auditFlag == 'PASS' &&
-                (isExecute || loginOrgId == r.row.orgId) && canPerform(r.row.eduJobIds)&&isOverOrUnStart(r.row)
-            "
-              @click="onPerform(r.row.id, r.row.eduJobIds, r.row.endDate)"
-          >执行
-          </el-button> -->
-        </template>
-      </el-table-column>
-    </el-table>
+          <el-table-column label="操作" width="120px" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-view"
+                @click="handleDetail(scope.row.id)"
+                v-hasPermi="['system:eduTask:detail']"
+              >详情
+              </el-button>
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-document-add"
+                v-if="canPerform(scope.row)"
+                @click="handleRecorded(scope.row.id)"
+                v-hasPermi="['system:eduTask:remove']"
+              >演练登记
+              </el-button>
+              <el-button type="text" v-if="scope.row.pdfUrl" @click="onDown(scope.row.pdfUrl)"
+              >演练登记簿
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
 
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </el-col>
-  </el-row>
+        <pagination
+          v-show="total>0"
+          :total="total"
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </el-col>
+    </el-row>
     <dialog-info ref="infoDialog" @success="handleQuery(true)"></dialog-info>
     <dialog-perform ref="performDialog" @success="handleQuery(true)"></dialog-perform>
   </div>
 </template>
 
 <script>
-import { listEduTask, getEduTask, delEduTask, addEduTask, updateEduTask } from "@/api/core/drill/drillTask";
+import {listEduTask, getEduTask, delEduTask, addEduTask, updateEduTask} from "@/api/core/drill/drillTask";
 import OrgTree from "@/components/orgTree";
 import DialogInfo from "./dialog.info";
 import DialogPerform from "./dialog.perform";
 import dayjs from "dayjs";
+
 export default {
   name: "EduTask",
   dicts: ['edu_task_status', 'edu_type'],
@@ -169,7 +140,7 @@ export default {
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        checkSub:false,
+        checkSub: false,
         title: null,
         orgId: this.$store.getters.orgId,
         type: null,
@@ -181,7 +152,7 @@ export default {
       // 表单校验
       rules: {
         orgId: [
-          { required: true, message: "机构不能为空", trigger: "blur" }
+          {required: true, message: "机构不能为空", trigger: "blur"}
         ],
       }
     };
@@ -208,10 +179,10 @@ export default {
     // 表单重置
     reset() {
       this.form = {
-        range:[],
+        range: [],
         title: null,
         type: null,
-        status : null,
+        status: null,
       };
       this.resetForm("form");
     },
@@ -242,7 +213,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -253,7 +224,7 @@ export default {
     },
     /** 修改按钮操作 */
     handleDetail(id) {
-      this.$refs["infoDialog"].show(id,{});
+      this.$refs["infoDialog"].show(id, {});
     },
     /** 提交按钮 */
     submitForm() {
@@ -277,7 +248,7 @@ export default {
     },
     /** 培训登记按钮操作 */
     handleRecorded(id) {
-      this.$refs["performDialog"].show(id,{});
+      this.$refs["performDialog"].show(id, {});
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -286,12 +257,12 @@ export default {
       }, `eduTask_${new Date().getTime()}.xlsx`)
     },
     canPerform(row) {
-      // debugger
-      let flag = 0;
-      if(row.status>0) return false;
-      if(!row.taskRoleList)   return false;
-      let isOver =this.isNotOverOrUnStart(row);
-      console.log("isNotOverOrUnStart",isOver);
+      return true;
+     /* let flag = 0;
+      if (row.status > 0) return false;
+      if (!row.taskRoleList) return false;
+      let isOver = this.isNotOverOrUnStart(row);
+      console.log("isNotOverOrUnStart", isOver);
       row.taskRoleList.forEach((taskRole) => {
         this.$store.getters.roleList.forEach((role) => {
           if (taskRole.roleId == role.roleId) {
@@ -299,7 +270,7 @@ export default {
           }
         });
       });
-      return (flag == 1) && isOver;
+      return (flag == 1) && isOver;*/
     },
     isNotOverOrUnStart(row) {
       const currentTime = dayjs().startOf('day'); // 获取当前时间,并将时分秒部分设置为00时00分00秒
@@ -308,7 +279,7 @@ export default {
       const endDate = dayjs(row.endDate).startOf('day'); // 转换结束时间为 Moment.js 对象,并将时分秒部分设置为00时00分00秒
       // 判断开始时间和结束时间是否是同一天
       const isSameDay = startDate.isSame(endDate, 'day');
-      console.log("isOverOrUnStart",currentTime,startDate,endDate);
+      console.log("isOverOrUnStart", currentTime, startDate, endDate);
       // 如果是同一天,则判断当前时间是否在开始时间和结束时间之间(包括开始和结束时间)
       // if (isSameDay) {
       //   return dayjs(currentTime).isBetween(startDate, endDate, null, '[]');

+ 20 - 19
src/views/core/materials/index.vue

@@ -4,7 +4,7 @@
       <!--机构数据-->
       <el-col :span="4" :xs="24">
         <org-tree v-model="queryParams.orgId" @defaultKey="getDefaultKey" @checkChange="checkChange"
-                    @click="clickTreeNode" hangsheTree></org-tree>
+                  @click="clickTreeNode" hangsheTree></org-tree>
       </el-col>
       <!--用户数据-->
       <el-col :span="20" :xs="24">
@@ -79,15 +79,15 @@
             </el-button>
           </el-col>
           <el-col :span="1.5">
-<!--            <el-button
-              type="warning"
-              plain
-              icon="el-icon-download"
-              size="mini"
-              @click="handleExport"
-              v-hasPermi="['core:materials:export']"
-            >导出
-            </el-button>-->
+            <!--            <el-button
+                          type="warning"
+                          plain
+                          icon="el-icon-download"
+                          size="mini"
+                          @click="handleExport"
+                          v-hasPermi="['core:materials:export']"
+                        >导出
+                        </el-button>-->
           </el-col>
           <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
         </el-row>
@@ -103,7 +103,7 @@
           <el-table-column label="上传人" align="center" prop="createBy"/>
           <el-table-column label="上传时间" align="center" prop="createTime"/>
           <el-table-column label="附件" align="center" prop="fileList"/>
-          <el-table-column scoped-slot="remark" align="center" prop="remark">
+          <el-table-column scoped-slot="remark" align="center" prop="remark" label="备注">
             <template slot-scope="scope">
               <div class="ellipsis" :title="scope.row.remark">{{ scope.row.remark }}</div>
             </template>
@@ -167,7 +167,7 @@
     <DialogCom :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="资料标题" prop="title">
-          <el-input v-model="form.title" placeholder="请输入资料标题"  maxlength="50" show-word-limit/>
+          <el-input v-model="form.title" placeholder="请输入资料标题" maxlength="50" show-word-limit/>
         </el-form-item>
 
         <el-form-item label="资料类型" prop="knowledgeId">
@@ -177,10 +177,10 @@
         </el-form-item>
 
         <el-form-item label="资料内容" prop="content">
-          <el-input v-model="form.content" placeholder="请输入资料内容"  maxlength="200" show-word-limit/>
+          <el-input v-model="form.content" placeholder="请输入资料内容" maxlength="200" show-word-limit/>
         </el-form-item>
         <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注"  maxlength="200" show-word-limit/>
+          <el-input v-model="form.remark" placeholder="请输入备注" maxlength="200" show-word-limit/>
         </el-form-item>
         <el-form-item label="附件" prop="fileList">
           <K-file-upload ref="upload" @input="getKUploadFileList" v-model="form.fileList"/>
@@ -208,11 +208,12 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import {queryKnowledgeList} from "@/api/core/edu/knowledge";
 import OrgTree from "@/components/orgTree/index.vue";
 import kOrgTree from "@/components/k-orgTree/index.vue";
-import KFileUpload  from "@/components/K-FileUpload/index.vue";
+import KFileUpload from "@/components/K-FileUpload/index.vue";
 import tableList from "@/mixins/tableList";
+
 export default {
   name: "Materials",
-  components: {OrgTree, kOrgTree,KFileUpload},
+  components: {OrgTree, kOrgTree, KFileUpload},
   mixins: [tableList],
   data() {
     return {
@@ -260,13 +261,13 @@ export default {
       // 表单校验
       rules: {
         title: [
-          { required: true, message: "资料标题不能为空", trigger: "blur" }
+          {required: true, message: "资料标题不能为空", trigger: "blur"}
         ],
         knowledgeId: [
-          { required: true, message: "资料类型不能为空", trigger: "blur" }
+          {required: true, message: "资料类型不能为空", trigger: "blur"}
         ],
         content: [
-          { required: true, message: "资料内容不能为空", trigger: "blur" }
+          {required: true, message: "资料内容不能为空", trigger: "blur"}
         ],
       },
       //默认选中节点