Pārlūkot izejas kodu

Merge branch 'dev' of http://10.87.10.227:4000/jzyd_yyds/soc_web into dev

luojun 2 gadi atpakaļ
vecāks
revīzija
07720c0e5b

+ 18 - 0
src/api/common.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+import { parseStrEmpty } from "@/utils/ruoyi";
+
+export function dictionListUser(url,method,reqParams) {
+    if(method==='post'){
+        return request({
+            url: url,
+            method: 'post',
+            data: reqParams
+          })
+    }else{
+        return request({
+            url: url,
+            method: 'get',
+            params: reqParams
+          })
+    } 
+}

+ 9 - 1
src/api/core/edu/eduTask.js

@@ -27,7 +27,7 @@ export function addEduTask(data) {
 }
 
 // 修改教育任务
-export function updateEduTask(data) {
+export function recordEduTask(data) {
   return request({
     url: '/core/eduTask',
     method: 'put',
@@ -42,3 +42,11 @@ export function delEduTask(id) {
     method: 'delete'
   })
 }
+
+// 查询详细教育任务
+// export function recordEduTask(id) {
+//   return request({
+//     url: '/core/eduTask/' + id,
+//     method: 'get'
+//   })
+// }

+ 3 - 4
src/api/resumption/taskManger.js

@@ -37,11 +37,10 @@ export function exportResumptionRecord(args) {
 /**
  * 查询
  */
-export function one(args) {
+export function one(id,ymd) {
   return request({
-    url: "/core/resumption/record/" + args,
-    method: "get",
-    params: query,
+    url: "/core/resumption/record/" + id+"/"+ymd,
+    method: "get"
   });
 }
 

+ 10 - 0
src/api/system/user.js

@@ -10,6 +10,16 @@ export function listUser(query) {
   })
 }
 
+
+export function dictionListUser(query) {
+  return request({
+    url: '/system/user/dictionlist',
+    method: 'get',
+    params: query
+  })
+}
+
+
 // 查询用户详细
 export function getUser(userId) {
   return request({

+ 42 - 0
src/components/common/textarea.vue

@@ -0,0 +1,42 @@
+<template>
+  <div class="k-textarea">
+    <el-input
+      type="textarea"
+      :autosize="{minRows: 4}"
+      v-model="pv"
+      :maxlength="length"
+      :placeholder="placeholder"
+    ></el-input>
+    <div class="k-textarea__length">{{pv ? pv.length : 0}} / {{length}}</div>
+  </div>
+</template>
+<script>
+import sync from "../utils/computed.sync";
+export default {
+  data() {
+    return {};
+  },
+  computed: {
+    pv: sync("value")
+  },
+  watch: {},
+  props: {
+    value: {},
+    length: {},
+    placeholder: {}
+  },
+  methods: {},
+  mounted() {}
+};
+</script>
+<style lang="scss">
+.k-textarea {
+  position: relative;
+  &__length {
+    position: absolute;
+    bottom: 0;
+    right: 12px;
+    font-size: 12px;
+  }
+}
+</style>

+ 199 - 0
src/components/common/userselect.vue

@@ -0,0 +1,199 @@
+<template>
+  <el-select
+    class="k-select"
+    v-model="pv"
+    :placeholder="placeholder"
+    :multiple="multiple"
+    :multiple-limit="multiplelimit"
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="onChange"
+    :collapse-tags="collapseTags"
+    filterable
+  >
+    <el-option
+      v-for="item in items"
+      :key="item[valueName]"
+      :label="item[labelName]"
+      :value="item[valueName]"
+    >
+      <slot :item="item"></slot>
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import sync from "../utils/computed.sync";
+import { groupBy } from "lodash";
+import { dictionListUser } from "@/api/system/user";
+
+export default {
+  data() {
+    return {
+      isOpen: false,
+      items: [],
+    };
+  },
+  computed: {
+    // pv: sync("value"),
+    groupData() {
+      return groupBy(this.items, this.group);
+    },
+  },
+  watch: {
+    url(nv) {
+      console.log("url refresh",nv)
+      this.refresh();
+    },
+    params(n, o) {
+      if (JSON.stringify(n) == JSON.stringify(o)) return;
+      console.log("params refresh",n,o)
+      this.refresh();
+    },
+    // 当数值变化后, 但是不在数据源里面, 刷新数据源
+    pv() {
+      if(!this.pv || this.pv.length==0) return;
+
+      // 判断在不在源里面的方法有问题,当清空值的时候不应该刷新
+      if (!this.contain(this.items, this.pv)) {
+        console.log("pv refresh",this.pv)
+        this.refresh();
+      }
+    },
+    // 当数据源变换后, 如果已选的数据不在数据源中, 则重置
+    items(items) {
+      if (!this.contain(items, this.pv)) {
+        console.log("items refresh",this.pv,items)
+        if(!this.pv || this.pv.length==0) return;
+        this.pv = this.multiple ? [] : null;
+        this.onChange(this.pv);
+      }      
+    },
+  },
+  props: {
+    value: {},
+    placeholder: {},
+    url: {},
+    multiple: { type: Boolean, default: false },
+    params: {},
+    labelName: {
+      default: "name",
+    },
+    valueName: {
+      default: "id",
+    },
+    group: {},
+    engineeringDefault: {
+      type: Boolean,
+      default: false,
+    },
+    multiplelimit:{
+      type:Number,
+      default:0
+    },
+    clearable:{
+      type:Boolean,
+      default:true
+    },
+    collapseTags:{
+      type:Boolean,
+      default:false,
+    },
+    disabled:{
+      type:Boolean,
+      default:false,
+    },
+    isMountedRefresh:{
+      type:Boolean,
+      default:true,
+    }
+  },
+  methods: {
+    //
+    contain(items, value) {
+      if (this.multiple) {        
+        const tv = [];
+        items.forEach((item) => {
+          if (~value.indexOf(item[this.valueName])) {
+            tv.push(item[this.valueName]);
+          }
+        });
+        return tv.length != 0;
+      }
+      // 单选
+      return (
+        this.items.filter((item) => item[this.valueName] == this.pv).length != 0
+      );
+    },
+    async refresh() {
+      dictionListUser(this.params).then(items=>{
+        // debugger
+        if(items.data && Array.isArray(items.data)){
+        items=items.data;
+      }
+      if (Array.isArray(items)) {
+        this.items = items.map((v) => {
+          if (typeof v == "string") {
+            v = {
+              [this.labelName]: v,
+              [this.valueName]: v,
+            };
+          }
+          return v;
+        });
+      } else {
+        this.items = [];
+      }
+
+      // if (this.engineeringDefault) {
+      //   this.items.forEach((value) => {          
+      //     if ((value.code == "GCFWS" || value.code == "GCSYG") && !this.pv.includes(value.id)) {
+      //       this.pv.push(value.id);
+      //     }
+      //   });
+      //   console.log(this.pv);
+      // }
+      this.$emit("data", this.items);
+      return this.items;
+      })
+
+      // let items = await this.$api[this.params ? "post" : "get"](
+      //   this.url,
+      //   this.params || {}
+      // );
+     
+    },
+
+    //
+    onChange(val, index, item) {
+      this.$forceUpdate()
+      // this.$set(this.value, 0, val);
+      console.log("onChange",val,this.value,item)
+      this.$emit("input", val);
+      this.$emit("change", val);
+      this.$emit(
+        "select",
+        this.items.filter((v) => v[this.valueName] == val)[0]
+      );
+    },
+  },
+  mounted() {
+    if(this.isMountedRefresh)
+    {
+      this.refresh();
+    }    
+  },
+};
+</script>
+
+<style lang="scss">
+.k-select {
+  .el-icon-refresh {
+    position: absolute;
+    top: 10px;
+    right: 30px;
+    cursor: pointer;
+    color: #ccc;
+  }
+}
+</style>

+ 14 - 7
src/components/dateTime/daterange.picker.vue

@@ -4,19 +4,26 @@
         type="daterange"
         :clearable="clearable"
         :picker-options="pickerOptions"
-        v-on:change="onSelect()"
+        @change="onSelect"
         v-bind="$attrs"
     />
 </template>
-<script lang="ts">
-
+<script>
+// import sync from '@/components/computed.sync.ts'
+// import { set } from 'vue/types/umd';
 export default {
     inheritAttrs: false,
     data() {
         return {};
     },
-    computed: {
-        // pv: sync("value"),
+    computed: {        // pv: sync("value"),
+       
+        // val:{
+        //     get(){return this.value},
+        //     set(v){
+        //         this.$emit("input",v)
+        //     }
+        // },
         pickerOptions() {
             return {
                 shortcuts: [
@@ -69,8 +76,8 @@ export default {
         },
     },
     methods: {
-        onSelect() {
-            this.$emit("refresh");
+        onSelect(v) {
+            this.$emit("input",v);
         },
     },
     mounted() {},

+ 18 - 0
src/components/utils/computed.sync.js

@@ -0,0 +1,18 @@
+ let sg = (src) => {};
+
+export default function(name, getCallback, setCallback) {
+    return {
+        get() {
+            if (getCallback) {
+                return getCallback(this[name]);
+            }
+            return this[name];
+        },
+        set(v) {
+            if (setCallback) {
+                v = setCallback(v);
+            }
+            this.$emit(name == "value" ? `input` : `update:${name}`, v);
+        }
+    };
+}

+ 30 - 0
src/components/utils/ranger.js

@@ -0,0 +1,30 @@
+export default {
+    month() {
+        let r = [];
+        for (let i = 1; i <= 12; i++) {
+            r.push({
+                label: `${i}月`,
+                value: i
+            });
+        }
+        return r;
+    },
+
+    year() {
+        let r = [];
+        let d = new Date().getFullYear();
+        for (let i = 10; i >= 0; i--) {
+            r.push({
+                label: `${d - i}年`,
+                value: d - i
+            });
+        }
+        for (let i = 0; i <= 10; i++) {
+            r.push({
+                label: `${d + i}年`,
+                value: d + i
+            });
+        }
+        return r;
+    }
+};

+ 91 - 0
src/components/utils/region.js

@@ -0,0 +1,91 @@
+const allNode = {};
+const provinceNodes = {};
+const cityNodes = {};
+const countyNodes = {};
+
+class Node {
+    constructor(id, name) {
+        this.id = id;
+        this.value = id;
+        this.name = name;
+        this.label = name;
+    }
+
+    addSub(node) {
+        this.children = this.children || [];
+        this.children.push(node);
+    }
+}
+
+//省
+for (let id in CHINA_REGION) {
+    let v = CHINA_REGION[id];
+    if (v[1] == "086") {
+        let node = new Node(id, v[0]);
+        provinceNodes[id] = node;
+        allNode[id] = node;
+        delete CHINA_REGION[id];
+    }
+}
+
+//市区
+for (let id in CHINA_REGION) {
+    let v = CHINA_REGION[id];
+    if (provinceNodes[v[1]]) {
+        let node = new Node(id, v[0]);
+        provinceNodes[v[1]].addSub(node);
+        cityNodes[id] = node;
+        allNode[id] = node;
+        delete CHINA_REGION[id];
+    }
+}
+
+//区县
+for (let id in CHINA_REGION) {
+    let v = CHINA_REGION[id];
+    if (cityNodes[v[1]]) {
+        let node = new Node(id, v[0]);
+        cityNodes[v[1]].addSub(node);
+        countyNodes[id] = node;
+        allNode[id] = node;
+        delete CHINA_REGION[id];
+    }
+}
+
+//
+export default {
+    get(id) {
+        return allNode[id];
+    },
+    /**
+     * 省市区
+     */
+    getProvincesFull() {
+        return Object.values(provinceNodes);
+    },
+    /**
+     * 省市
+     */
+    getProvincesNoCounty() {
+        let ps = Object.values(provinceNodes);
+        ps = Object.assign([], ps);
+        for (const p of ps) {
+            if (!p.children) {
+                continue;
+            }
+            for (const c of p.children) {
+                delete c.children;
+            }
+        }
+        return ps;
+    },
+    getCitysFull() {
+        return Object.values(cityNodes);
+    },
+    getCitys(provinceId) {
+        return provinceNodes[provinceId].children;
+    },
+    getCountys(cityId) {
+        return Object.values(cityNodes[cityId].children);
+    }
+};

+ 3 - 51
src/views/core/edu/task/dialog.info.vue

@@ -42,13 +42,11 @@
                         <!-- 记录人 -->
                         <el-col :span="24">
                             <el-form-item prop="recorderId" label="记录人">{{
-                                formData.recorder == null
-                                ? ""
-                                : formData.recorder.name
+                                formData.recorderName
                             }}</el-form-item>
                         </el-col>
 
-                           <!-- 培训截止时间 -->
+                           <!-- 培训开始时间 -->
                            <el-col :span="12">
                             <el-form-item prop="trainingStartDateTime" label="培训开始时间">{{
                                 formData.trainingStartDateTime
@@ -126,53 +124,7 @@
                                 </div>
                                 
                             </el-form-item>
-                        </el-col>
-                        <!-- 实到人数 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="actualCount" label="实到人数">{{
-                                formData.actualCount
-                            }}</el-form-item>
-                        </el-col> -->
-                        <!-- 参与人员 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="absenceList" label="参与人员">{{
-                                formData.absenceList
-                                    .map((v) => v.name)
-                                    .join(",")
-                            }}</el-form-item>
-                        </el-col> -->
-                        <!-- 缺席人员 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="absenceList" label="缺席人员">{{
-                                formData.absentList
-                                    .map((v) => v.name)
-                                    .join(",")
-                            }}</el-form-item> 
-                        </el-col>-->
-                        <!-- 总结 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="note" label="总结">{{
-                                formData.note
-                            }}</el-form-item>
-                        </el-col> -->
-                        <!-- 图片 -->
-                        <!-- <el-col :span="12">
-                            <el-form-item prop="imageList" label="图片">
-                                <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="fileList" label="文件" :disabled="true">
-                                <div v-for="(v, i) in formData.fileList" :key="i">
-                                    <a class="downloadLink" @click="onDownload(v.url, v.name)">
-                                        {{ v.name }}
-                                    </a>
-                                </div>
-                                
-                            </el-form-item>
-                        </el-col> -->
+                        </el-col>                        
                     </el-row>
                 </el-form>
             </div>

+ 136 - 111
src/views/core/edu/task/dialog.perform.vue

@@ -1,53 +1,64 @@
 <template>
   <div class="edu-training-edit">
-    <el-dialog :title="'执行教育培训'" :visible.sync="isShow" width="960px">
+    <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=":"
-        >
+        <el-form :model="formData" :rules="formDataRules" size="small" ref="form" label-position="right"
+          label-width="120px" label-prefix=":">
           <el-row>
-             <!-- 培训主题 -->
-             <el-col :span="24">
-                <el-form-item prop="title" label="培训主题">
-                    <el-input
+            <!-- 培训主题 -->
+            <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>
+                    /> -->
+                {{ formData.title }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item prop="orgName" label="培训机构">
+                {{ formData.orgName }}
+              </el-form-item>
             </el-col>
-             <!-- 类型 -->
-             <el-col :span="24">
-                <el-form-item prop="type" label="类型">
-                    <k-select-constant
+            <!-- 类型 -->
+            <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>
+                    ></k-select-constant> -->
+              </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>
-                        </el-col>
-           
-            <!-- 主持人 -->
+            <el-col :span="12">
+              <el-form-item v-if="formData.id" prop="dateTime" label="培训开始时间">
+                <el-date-picker v-model="formData.trainingStartDateTime" 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" type="datetime" placeholder="选择日期">
+                </el-date-picker>
+              </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>
+            </el-col>
+
+            <!-- 主持人 -->
+            <!-- <el-col :span="24">
               <el-form-item v-if="formData.id" prop="hostId" label="主持人">
                 <k-select
                   v-model="formData.hostId"
@@ -66,9 +77,9 @@
                   placeholder="请选择记录人"
                 ></k-select>
               </el-form-item>
-            </el-col>
+            </el-col> -->
             <!-- 截止日期 -->
-            <el-col :span="24">
+            <!-- <el-col :span="24">
               <el-form-item v-if="formData.id" prop="dateTime" label="培训时间">
                 <el-date-picker
                   v-model="formData.dateTime"
@@ -77,19 +88,15 @@
                 >
                 </el-date-picker>
               </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"
-                />
+                <k-textarea v-model="formData.note" placeholder="请输入总结" :length="1000" />
               </el-form-item>
             </el-col>
             <!-- 应到人数 -->
-            <el-col :span="24">
+            <!-- <el-col :span="24">
               <el-form-item v-if="formData.id" prop="dueCount" label="应到人数">
                 <el-input-number
                   v-model="formData.dueCount"
@@ -97,9 +104,9 @@
                   placeholder="请输入应到人数"
                 ></el-input-number>
               </el-form-item>
-            </el-col>
+            </el-col> -->
             <!-- 实到人数 -->
-            <el-col :span="24">
+            <!-- <el-col :span="24">
               <el-form-item
                 v-if="formData.id"
                 prop="actualCount"
@@ -111,7 +118,7 @@
                   placeholder="请输入实到人数"
                 ></el-input-number>
               </el-form-item>
-            </el-col>
+            </el-col> -->
             <el-col :span="24">
               <el-form-item v-if="formData.id" label="参与人员">
                 <k-select
@@ -119,51 +126,40 @@
                   v-model="formData.absenceList"
                   url="/user/find/all"
                   :params="{ orgId: formData.orgId }"
-                  placeholder="请选择参与人员"
+                  placeholder="请选择缺席人员"
                 ></k-select>
+                <!-- <k-select :multiple="true" v-model="formData.absenceList" 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" label="缺席人员">
-                <k-select
-                  :multiple="true"
-                  v-model="formData.absentList"
-                  url="/user/find/all"
-                  :params="{ orgId: formData.orgId }"
-                  placeholder="请选择缺席人员"
-                ></k-select>
+                <k-select :multiple="true" v-model="formData.absentList" url="/user/find/all"
+                  :params="{ orgId: formData.orgId }" placeholder="请选择缺席人员"></k-select>
               </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-col :span="24">
               <el-form-item prop="imageList" label="上传图片">
-                <k-multi-upload
-                  v-model="formData.imageList"
-                  limit="4"
-                  byModule
-                  moduleName="edu-training"
-                />
+                <imgUpload  type="more" :value="formData.imageList"  @input="imageListChanged"></imgUpload>
+                <!-- <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>
 
       <div slot="footer" class="dialog-footer">
         <el-button @click="onHide">取消</el-button>
-        <el-button type="primary" @click="onSubmit">确定</el-button>
+        <el-button type="primary" @click="onSubmit">暂存</el-button>
+        <el-button type="primary" @click="onSubmit">提交</el-button>
       </div>
     </el-dialog>
   </div>
@@ -171,27 +167,33 @@
 
 <script>
 import { mapState, mapMutations } from "vuex";
-
+import { getEduTask, recordEduTask } from "@/api/core/edu/eduTask";
+import KTextarea from "@/components/common/textarea.vue";
+import KSelect from "@/components/common/userselect.vue";
+import imgUpload from "@/components/ImageUpload/index.vue";
 export default {
-  components: {},
+  components: { KTextarea,KSelect,imgUpload },
   data() {
     const params = this.$route.params;
     return {
       id: params ? params.id : null,
       isShow: false,
       formData: this.reset(),
-      formDataRules: {        
+      formDataRules: {
         type: [{ required: true, message: "请选择类型" }],
         content: [{ required: true, message: "请输入内容" }],
-        hostId: [{ required: true, message: "请输入主持人" }],
-        recorderId: [{ required: true, message: "请输入记录人" }],
-        dateTime: [{ 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: "请输入实到人数" }],
+        // dueCount: [{ required: true, message: "请输入应到人数" }],
+        // actualCount: [{ required: true, message: "请输入实到人数" }],
       },
     };
   },
+  dicts: ['edu_type', 'edu_task_status'],
   props: {},
   watch: {},
   computed: {
@@ -201,11 +203,12 @@ export default {
     ...mapMutations([]),
     reset(other = {}) {
       return {
-        hostId: null,
-        recorderId: null,
-        dateTime: null,
-        dueCount: null,
-        actualCount: null,
+        // hostId: null,
+        // recorderId: null,
+        trainingStartDateTime: new Date(),
+        trainingEndDateTime: new Date(),
+        // dueCount: null,
+        // actualCount: null,
         content: null,
         title: null,
         eduJobId: null,
@@ -218,31 +221,53 @@ export default {
       };
     },
     async refresh(id, other) {
-      this.formData = id
-        ? await this.$api.eduTraining.one(id)
-        : this.reset(other);
-      if (this.formData.imageList == null) {
-        this.formData.imageList = [];
-      }
-      if (this.formData.fileList == null) {
-        this.formData.fileList = [];
-      }
-      let alist = [];
-      if (this.formData.absenceList != null) {
-        this.formData.absenceList.forEach((element) => {
-          alist.push(element.id);
-        });
+      // this.formData = id
+      //   ? await this.$api.eduTraining.one(id)
+      //   : this.reset(other);
+
+      if (!id) {
+        this.reset(other);
+        return;
       }
-      this.formData.absenceList = alist;
-      this.formData.absentList = this.formData.absentList
-        ? this.formData.absentList.map((a) => a.id)
-        : [];
+      getEduTask(id).then(response => {
+        this.formData = response.data;
+        this.loading = false;
+        if (this.formData.imageList == null) {
+          this.formData.imageList = [];
+        }
+        if (this.formData.fileList == null) {
+          this.formData.fileList = [];
+        }
+        if (this.formData.taskUserList != null) {
+          let list1 = this.formData.taskUserList.filter((element) => {
+            element.type === 1
+          });
+          this.formData.absenceList = list1 ? list1.map((a) => a.userId)
+            : [];
+
+          let list2 = this.formData.taskUserList.filter((element) => {
+            element.type === 2
+          });
+          this.formData.absentList = list2 ? list2.map((a) => a.userId)
+            : [];
+        }
+        else {
+          this.formData.absenceList = [];
+          this.formData.absentList = [];
+        }
+      })
+
     },
     async show(id, other = {}) {
       this.id = id;
       await this.refresh(id, other);
       this.isShow = true;
     },
+    imageListChanged(list)
+    {
+      this.formData.imageList=list;
+      console.log("imageListChanged",this.formData.imageList);
+    },
 
     // 事件
     onHide() {
@@ -250,7 +275,7 @@ export default {
     },
     async onSubmit() {
       await this.$refs.form.validate();
-      console.log("onSubmit this.formData",this.formData)
+      console.log("onSubmit this.formData", this.formData)
       let due = this.formData.dueCount;
       let actual = this.formData.actualCount;
       if (actual > due) {
@@ -258,12 +283,12 @@ export default {
       } else if (!this.validatePerson()) {
         this.$message.error("参与人员与缺席人员重复,请重新选择!");
       } else {
-        await this.$api.eduTraining.executed(this.formData).then((v) => {
+        recordEduTask(this.formData).then((v) => {
           this.$emit("success", this.formData);
           this.onHide();
         });
-        this.$emit("success");
-        this.onHide();
+        // this.$emit("success");
+        // this.onHide();
       }
     },
     validatePerson() {
@@ -275,11 +300,11 @@ export default {
       }
       return true;
     },
-    uploadTriggerEvent(value) {},
+    uploadTriggerEvent(value) { },
     // 事件
     //apimark//
   },
-  mounted() {},
+  mounted() { },
 };
 </script>
 

+ 6 - 14
src/views/core/edu/task/index.vue

@@ -362,10 +362,7 @@
     </el-dialog>
 
     <dialog-info ref="infoDialog" @success="refresh(true)"></dialog-info>
-    <dialog-perform
-        ref="performDialog"
-        @success="refresh(true)"
-    ></dialog-perform>
+    <dialog-perform ref="performDialog" @success="refresh(true)"></dialog-perform>
   </div>
 </template>
 
@@ -379,7 +376,8 @@ export default {
   dicts: ['edu_task_status', 'edu_type'],
   components: {
     DialogInfo,
-    DialogInfo,OrgTree
+    DialogPerform,
+    OrgTree
   },
   data() {
     return {
@@ -519,15 +517,9 @@ export default {
         }
       });
     },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$modal.confirm('是否确认删除教育任务编号为"' + ids + '"的数据项?').then(function() {
-        return delEduTask(ids);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("删除成功");
-      }).catch(() => {});
+    /** 培训登记按钮操作 */
+    handleRecorded(id) {
+      this.$refs["performDialog"].show(id,{});
     },
     /** 导出按钮操作 */
     handleExport() {

+ 26 - 33
src/views/resumption/protection/dialog.history.vue

@@ -23,7 +23,7 @@
           <div style="margin-bottom: 20px">
             <span>上报时间范围:</span>
             <el-date-picker
-              v-model="search.updateTime"
+              v-model="queryParams.updateTime"
               :default-time="defaultTime"
               type="datetimerange"
               range-separator="至"
@@ -41,7 +41,7 @@
                 {{ getLabel(statusDict, r.row.status) }}
               </template></el-table-column
             >
-            <el-table-column prop="updateTime" label="上报时间">             
+            <el-table-column prop="updateTime" label="上报时间">
             </el-table-column>
             <el-table-column
               prop="statusUpdatorName"
@@ -49,16 +49,13 @@
             ></el-table-column>
           </el-table>
           <div style="margin-top: 20px; text-align: right">
-            <el-pagination
-              @size-change="handleSizeChange"
-              @current-change="handleCurrentChange"
-              :current-page="currentPage"
-              :page-sizes="[10, 20, 30, 40, 50, 100]"
-              :page-size="search.size"
-              layout="total, sizes, prev, pager, next, jumper"
+            <pagination
+              v-show="total > 0"
               :total="total"
-            >
-            </el-pagination>
+              :page.sync="queryParams.pageNum"
+              :limit.sync="queryParams.pageSize"
+              @pagination="getList"
+            />
           </div>
         </div>
       </div>
@@ -83,9 +80,8 @@ export default {
       protection: {},
       tableData: [],
       defaultTime: ["00:00:00", "23:59:59"],
-      search: this.resetSearch(),
+      queryParams: this.resetSearch(),
       total: 1,
-      currentPage: 1,
     };
   },
   props: {
@@ -98,44 +94,41 @@ export default {
   methods: {
     getLabel,
     async refresh() {
-      this.currentPage = 1;
-      this.getlist();
+      this.pageNum = 1;
+      this.getList();
     },
-    async getlist() {
-      this.search.page = this.currentPage - 1;      
-      await api.history(this.search).then((v) => {
+    async getList() {
+      await api.history(this.queryParams).then((v) => {
         this.tableData = v.rows;
         this.total = v.total;
       });
     },
     close() {
-      this.search = this.resetSearch();
-      this.tableData=[];
-      this.total=0;
+      this.queryParams = this.resetSearch();
+      this.tableData = [];
+      this.total = 0;
     },
     async show(protection) {
-      this.protection=protection;
-      this.search = this.resetSearch();
-      this.search.protectionId = protection.id;
+      this.protection = protection;
+      this.queryParams = this.resetSearch();
+      this.queryParams.protectionId = protection.id;
       await this.refresh();
       this.isShow = true;
     },
     handleSizeChange(val) {
-      this.currentPage = 1;
-      this.search.size = val;
-      this.getlist();
-      console.log(`每页 ${val} 条`);
+      this.queryParams.pageSize = val;
+      this.getList();
     },
     handleCurrentChange(val) {
-      this.currentPage = val;
-      this.getlist();
+      this.queryParams.pageNum = val;
+      this.getList();
     },
     resetSearch() {
       return {
-        size: 10,
-        page: 0,
+        pageNum: 1,
+        pageSize: 10,
         protectionId: null,
-        updateTime: [new Date( new Date() - 3600 * 1000 * 24 * 90), new Date()],
+        updateTime: [new Date(new Date() - 3600 * 1000 * 24 * 90), new Date()],
       };
     },
     // 事件

+ 8 - 8
src/views/resumption/protection/index.vue

@@ -29,9 +29,8 @@
               clearable
             />
           </el-form-item>
-          <el-form-item prop="ruleTypeId" label="防区状态">
+          <el-form-item prop="status" label="防区状态">
             <el-select
-              prop="ruleTypeId"
               label="防区状态"
               v-model="queryParams.status"
               placeholder="请选择防区状态"
@@ -46,10 +45,11 @@
             </el-select>
           </el-form-item>
 
-          <el-form-item prop="orgType" label="布撤防时间范围">
+          <el-form-item prop="dateRange" label="布撤防时间范围">
             <el-date-picker
               v-model="queryParams.dateRange"
               type="datetimerange"
+              format="yyyy-MM-dd HH:mm"
               range-separator="至"
               start-placeholder="开始日期"
               end-placeholder="结束日期"
@@ -162,7 +162,7 @@
           </el-table-column>
           <el-table-column label="操作">
             <template slot-scope="r">
-              <el-button
+              <!-- <el-button
                 size="mini"
                 type="text"
                 icon="el-icon-edit"
@@ -177,7 +177,7 @@
                 @click="updateStatus(r.row.id, 0)"
                 v-hasPermi="['device:protection:maintain']"
                 >撤防</el-button
-              >
+              > -->
               <el-button
                 size="mini"
                 type="text"
@@ -334,9 +334,9 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.orgId = undefined;
-      this.$refs.tree.setCurrentKey(null);
+      this.resetForm("search");
+      // this.queryParams.orgId = undefined;
+      // this.$refs.tree.setCurrentKey(null);
       this.getList();
     },
     //单选框状态改变

+ 1 - 0
src/views/resumption/rule/dialog.edit.vue

@@ -151,6 +151,7 @@ export default {
     // 事件
     onHide() {
       this.isShow = false;
+      this.$refs.form.resetFields();
     },
     onSubmit() {
       this.$refs.form.validate(async (isValidate) => {

+ 16 - 9
src/views/resumption/rule/index.vue

@@ -21,7 +21,7 @@
           v-show="showSearch"
           label-width="100px"
         >
-          <el-form-item prop="ruleName" label="履职库名称">
+          <el-form-item prop="name" label="履职库名称">
             <el-input
               v-model="queryParams.name"
               :maxlength="50"
@@ -29,7 +29,7 @@
               clearable
             />
           </el-form-item>
-          <el-form-item prop="ruleTypeId" label="履职库类型">
+          <el-form-item prop="type" label="履职库类型">
             <el-select
               prop="ruleTypeId"
               label="履职库类型"
@@ -68,7 +68,7 @@
               type="primary"
               icon="el-icon-search"
               size="mini"
-              @click="getList"
+              @click="refresh"
               v-hasPermi="['resumption:rule:query']"
               >搜索</el-button
             >
@@ -179,14 +179,17 @@
                 icon="el-icon-edit"
                 @click="onEdit(r.row.id)"
                 v-hasPermi="['resumption:rule:edit']"
-              >修改</el-button>
+                >修改</el-button
+              >
               <el-button
                 size="mini"
                 type="text"
                 icon="el-icon-delete"
                 @click="onDel(r.row.id)"
                 v-hasPermi="['resumption:rule:remove']"
-              >删除</el-button>              
+                class="red-btn"
+                >删除</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
@@ -266,6 +269,10 @@ export default {
   methods: {
     ...mapMutations([]),
     getLabel,
+    refresh() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
     getList() {
       this.loading = true;
       console.info(this.dict.type);
@@ -302,9 +309,9 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.orgId = undefined;
-      this.$refs.tree.setCurrentKey(null);
+      this.resetForm("search");
+      // this.queryParams.orgId = undefined;
+      // this.$refs.tree.setCurrentKey(null);
       this.getList();
     },
     //单选框状态改变
@@ -320,7 +327,7 @@ export default {
     getStatusLabel(value) {
       return getLabel(statusOptions, value);
     },
-    
+
     //apimark//
   },
   mounted() {},

+ 18 - 23
src/views/resumption/ruleManager/index.vue

@@ -33,13 +33,12 @@
           v-show="showSearch"
           label-width="100px"
         >
-          <el-form-item prop="ruleItemName" label="履职项">
+          <el-form-item prop="itemName" label="履职项">
             <el-input
               v-model="queryParams.itemName"
               placeholder="请输入内容"
               maxlength="50"
               clearable
-              @input="refresh"
             ></el-input>
           </el-form-item>
           <el-form-item prop="pointName" label="履职内容">
@@ -48,7 +47,6 @@
               placeholder="请输入履职内容"
               maxlength="50"
               clearable
-              @input="refresh"
             ></el-input>
           </el-form-item>
           <el-form-item>
@@ -56,7 +54,7 @@
               type="primary"
               icon="el-icon-search"
               size="mini"
-              @click="getList"
+              @click="refresh"
               v-hasPermi="['resumption:ruleManager']"
               >搜索</el-button
             >
@@ -74,11 +72,12 @@
               :disabled="rule ? false : true"
               v-hasPermi="['resumption:ruleManager:add']"
               >新 增</el-button
-            ><el-button
+            >
+            <!-- <el-button
               type="primary"
               @click="onSelect()"
               >选择</el-button
-            >
+            > -->
             <el-button
               type="warning"
               @click="dakai"
@@ -151,7 +150,7 @@
             </template>
           </el-table-column>
           <el-table-column
-            prop="order"
+            type="index"
             label="序号"
             width="80"
             v-if="columns[0].visible"
@@ -187,17 +186,13 @@
             </template>
           </el-table-column>
         </el-table>
-
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="queryParams.currentPage"
-          :page-sizes="[10, 20, 30, 40, 50, 100]"
-          :page-size="queryParams.pagesize"
-          layout="total, sizes, prev, pager, next, jumper"
+        <pagination
+          v-show="total > 0"
           :total="total"
-        >
-        </el-pagination>
+          :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize"
+          @pagination="getList"
+        />
       </el-col>
     </el-row>
     <dialog-edit
@@ -224,8 +219,8 @@ export default {
         ruleId: null,
         itemName: null,
         pointName: null,
-        currentPage: 1,
-        pagesize: 10,
+        pageNum: 1,
+        pageSize: 10,
       },
       filterText: null,
       showSearch: true,
@@ -341,10 +336,10 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.resetForm("queryForm");
-      this.queryParams.ruleId = undefined;
-      this.$refs.tree.setCurrentKey(null);
-      this.tableData = [];
+      this.resetForm("search");
+      // this.queryParams.ruleId = undefined;
+      // this.$refs.tree.setCurrentKey(null);
+      this.getList();
     },
     onAddItem() {
       if (!this.rule) {

+ 4 - 4
src/views/resumption/taskManager/dialog.detail.vue

@@ -111,18 +111,18 @@ export default {
     };
   },
   methods: {
-    async refresh(id) {
-      let detail = await api.one(id);
+    async refresh(id, ymd) {
+      let detail = await api.one(id, ymd);
       if (detail && detail.length > 0) {
         this.tableData = detail;
       } else {
         this.tableData = [];
       }
     },
-    async show(id, title) {
+    async show(id, title, ymd) {
       // console.log(id,title);
       this.title = title;
-      await this.refresh(id);
+      await this.refresh(id, ymd);
       this.isShow = true;
     },
     onHide() {

+ 8 - 8
src/views/resumption/taskManager/index.vue

@@ -82,11 +82,11 @@
             class="searchTitle"
             label="计划时间"
             v-if="
-              queryParams.executeCycle == 1 || queryParams.executeCycle == 2 || queryParams.executeCycle == null
+              queryParams.executeCycle == 1 || queryParams.executeCycle == 2 || queryParams.executeCycle == null || queryParams.executeCycle==0
             "
           >
             <DataRangePicker
-              :value="queryParams.range"
+              v-model="queryParams.range"
               key="daterange"
               type="daterange"
               :clearable="timeClearable"
@@ -287,8 +287,8 @@
             <template slot-scope="r">{{ r.row.order }}</template>
           </el-table-column>
           <el-table-column
-            prop="planName"
-            label="计划名称"
+            prop="name"
+            label="任务名称"
             min-width="20%"
             v-if="columns[1].visible"
           >
@@ -383,8 +383,8 @@
                             r.row.status != 'NOT' &&
                             r.row.status != 'WAIT'
                         " type="text" @click="onEdit(r.row.id, { isRead: true })">查看</el-button> -->
-              <el-button type="text" @click="showDetail(r.row)">查看</el-button>
-              <el-button type="text" @click="showscanRecord(r.row)"
+              <el-button type="text" @click="showDetail(r.row)" v-show="r.row.status!=2 || r.row.status!=3">查看</el-button>
+              <el-button type="text" @click="showscanRecord(r.row)" v-show="r.row.status!=2 || r.row.status!=3"
                 >扫描记录</el-button
               >
             </template>
@@ -650,7 +650,7 @@ export default {
       await api.exportResumptionRecord(this.queryParams);
     },
     showDetail(row) {
-      this.$refs.detaildialog.show(row.resumptionId, row.time);
+      this.$refs.detaildialog.show(row.resumptionId, row.name,row.ymd);
       //this.$refs.detaildialog.show("75246a09eba74e018b60ade0b1f336f8", row.planName);
     },
     showscanRecord(row) {
@@ -770,7 +770,7 @@ export default {
     monthChanged() {
       this.resetRangeParam();
     },
-    async resetRangeParam() {      
+    async resetRangeParam() {  
       if (this.queryParams.executeCycle == 3) {
         let yearSval = this.yearS.getFullYear();
         let yearEval = this.yearE.getFullYear();

+ 2 - 2
src/views/system/dept/index.vue

@@ -43,8 +43,8 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="机构状态" clearable>
+      <el-form-item label="状态" prop="isLock">
+        <el-select v-model="queryParams.isLock" placeholder="机构状态" clearable>
           <el-option
             v-for="dict in dict.type.sys_normal_disable"
             :key="dict.value"

+ 3 - 7
src/views/system/dict/index.vue

@@ -84,7 +84,7 @@
           v-hasPermi="['system:dict:remove']"
         >删除</el-button>
       </el-col>
-      <el-col :span="1.5">
+      <!-- <el-col :span="1.5">
         <el-button
           type="warning"
           plain
@@ -93,7 +93,7 @@
           @click="handleExport"
           v-hasPermi="['system:dict:export']"
         >导出</el-button>
-      </el-col>
+      </el-col> -->
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -124,11 +124,7 @@
         </template>
       </el-table-column>
       <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
-      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
-        </template>
-      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button

+ 2 - 2
src/views/system/role/index.vue

@@ -5,10 +5,10 @@
         <el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable style="width: 240px"
           @keyup.enter.native="handleQuery" />
       </el-form-item>
-      <el-form-item label="权限字符" prop="roleKey">
+      <!-- <el-form-item label="权限字符" prop="roleKey">
         <el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable style="width: 240px"
           @keyup.enter.native="handleQuery" />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="角色状态" clearable style="width: 240px">
           <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"

+ 15 - 8
src/views/system/user/extend.vue

@@ -37,11 +37,20 @@
           </el-col>
         </el-row>
         <el-row  >
+  
           <el-col :xs="24" :sm="12" :md="8" :lg="6" >
-            <el-form-item  label="所属部门" prop="deptId">
-              <tree-select style="width: 217px;" v-model="formData.deptId"  :options="deptList" :show-count="true" :normalizer="tenantIdnormalizer" placeholder="所属部门"> </tree-select>
+            <el-form-item  label="所属部门"  prop="deptId">
+              <el-select style="width: 217px;" v-model="formData.deptId" placeholder="请选择">
+        <el-option
+                v-for="dict in dict.type.sys_department_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+              </el-select>
             </el-form-item>
           </el-col>
+
           <el-col :xs="24" :sm="12" :md="8" :lg="6" >
             <el-form-item  label="责任职务"  prop="duties">
               <el-select style="width: 217px;" v-model="formData.duties" placeholder="请选择">
@@ -199,15 +208,15 @@ import {extendUserInformation} from "@/api/system/information";
 export default {
   props: [],
   components: {TreeSelect},
-  dicts:['sys_highest_education',"sys_work_type","sys_duties","sys_education_type"],
+  dicts:['sys_highest_education',"sys_work_type","sys_duties","sys_education_type",'sys_department_type'],
   data() {
     return {
       //基础信息key
       infoKeys:[
-        {label:'用户名',key:'username'},
-        {label:'姓名',key:'name'},
+        {label:'用户名',key:'username'},
+        {label:'用户昵称',key:'name'},
         {label:'工号',key:'jobNumber'},
-        {label:'部门',key:'orgName'},
+      //  {label:'部门',key:'orgName'},
         {label:'手机',key:'phone'},
         // {label:'性别',key:'gender'},
         // {label:'状态',key:'isLock'},
@@ -443,7 +452,6 @@ export default {
         getDeptTreeList() {
       deptTreeList().then(response => {
         this.deptList = response.data;
-        console.log(response.data,11111111)
         this.defaultKeys = response.data[0];
       });
     },
@@ -451,7 +459,6 @@ export default {
       this.orgloading = true;
       let dat = { orgId: this.$route.params.id };
       listOrgPhysicalDefenseConstruction(dat).then((data) => {
-        // console.log(data);
         this.constructionList = data.rows;
         this.orgloading = false;
       });

+ 5 - 4
src/views/system/user/index.vue

@@ -18,8 +18,8 @@
             <el-input v-model="queryParams.phone" placeholder="请输入手机号码" clearable style="width: 240px"
               @keyup.enter.native="handleQuery" />
           </el-form-item>
-          <el-form-item label="状态" prop="status">
-            <el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
+          <el-form-item label="状态" prop="isLock">
+            <el-select v-model="queryParams.isLock" placeholder="用户状态" clearable style="width: 240px">
               <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
                 :value="dict.value" />
             </el-select>
@@ -176,7 +176,7 @@
         </el-row>
         <el-row>
           <el-col :span="10">
-            <el-form-item v-if="!form.id" label="用户名称" prop="name">
+            <el-form-item v-if="!form.id" label="用户名称" prop="username">
               <el-input v-model="form.username" placeholder="请输入用户名称" maxlength="30" />
             </el-form-item>
           </el-col>
@@ -444,7 +444,8 @@ export default {
         status: "0",
         remark: undefined,
         postIds: [],
-        roleIds: []
+        roleIds: [],
+        isLock: "0"
       };
       this.resetForm("form");
     },